diff --git a/.gn b/.gn index 29d65d7..1386456 100644 --- a/.gn +++ b/.gn
@@ -76,6 +76,7 @@ "//chrome/browser/ui/*", "//chrome/common/*", "//chrome/installer/*", + "//chrome/profiling", "//chrome/third_party/mozilla_security_manager/*", "//chrome/tools/*", "//chrome/utility/*",
diff --git a/.vpython b/.vpython new file mode 100644 index 0000000..cf74427 --- /dev/null +++ b/.vpython
@@ -0,0 +1,32 @@ +# This is a vpython "spec" file. +# +# It describes patterns for python wheel dependencies of the python scripts in +# the chromium repo, particularly for dependencies that have compiled components +# (since pure-python dependencies can be easily vendored into third_party). +# +# When vpython is invoked, it finds this file and builds a python VirtualEnv, +# containing all of the dependencies described in this file, fetching them from +# CIPD (the "Chrome Infrastructure Package Deployer" service). Unlike `pip`, +# this never requires the end-user machine to have a working python extension +# compilation environment. All of these packages are built using: +# https://chromium.googlesource.com/infra/infra/+/master/infra/tools/dockerbuild/ +# +# All python scripts in the repo share this same spec, to avoid dependency +# fragmentation. +# +# If you have depot_tools installed in your $PATH, you can invoke python scripts +# in this repo by running them as you normally would run them, except +# substituting `vpython` instead of `python` on the command line, e.g.: +# vpython path/to/script.py some --arguments +# +# Read more about `vpython` and how to modify this file here: +# https://chromium.googlesource.com/infra/infra/+/master/doc/users/vpython.md + +python_version: "2.7" + +# Used by: +# third_party/catapult +wheel: < + name: "infra/python/wheels/psutil/${platform}_${py_python}_${py_abi}" + version: "version:5.2.2" +>
diff --git a/DEPS b/DEPS index aa44606b..0b8613a 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '332b55954f92d51d60158d8142c68eb9c3ca296f', + 'skia_revision': '36c60c9777fc8635f6538db2c67da69ec07b2ef3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '5d9a865599971f903fc450dd0e2de1aa853e05d4', + 'v8_revision': 'efa2ac4129d30c7c72e84c16af3d20b44829f990', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -56,7 +56,7 @@ # 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. - 'buildtools_revision': '5af0a3a8b89827a8634132080a39ab4b63dee489', + 'buildtools_revision': '84fdc992430562c77356707e9a047c7c691b7c3e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -64,7 +64,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': 'cc2b38d41141a939c7ef73c0066418b8d823c681', + 'pdfium_revision': '47a90b894ecca2d3547226169602d7f8729d564f', # 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. @@ -96,11 +96,11 @@ # 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': 'b18300c0d1541d12e01941d7a5a088a98ca946bc', + 'catapult_revision': '017fd5cf4ccbcbed7bba20760f1b3d923a7cd3ca', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. - 'libfuzzer_revision': '6d39c6ba7f52b61664c982d6ac89d7491b6f8730', + 'libfuzzer_revision': 'edcfbba60b279570f7f065bba421e4b01adbc3f1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-node-modules # and whatever else without interference from each other. @@ -150,8 +150,11 @@ 'src/third_party/colorama/src': Var('chromium_git') + '/external/colorama.git' + '@' + '799604a1041e9b3bc5d2789ecbd7e8db2e18e6b8', + 'src/third_party/crc32c/src': + Var('chromium_git') + '/external/github.com/google/crc32c.git' + '@' + 'db73a3f73581c6d5cbc290e8d92bdcfe653c8099', + 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'e081cbe5aae6b131955b6c3bd7308d95d650948f', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'b2e961b1171d9f27278461a0a3286ab89161368c', 'src/third_party/googletest/src': Var('chromium_git') + '/external/github.com/google/googletest.git' + '@' + '7f8fefabedf2965980585be8c2bff97458f28e0b', @@ -303,7 +306,7 @@ # Used for building libFuzzers (only supports Linux). 'src/third_party/libFuzzer/src': - Var('chromium_git') + '/chromium/llvm-project/llvm/lib/Fuzzer.git' + '@' + Var('libfuzzer_revision'), + Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git' + '@' + Var('libfuzzer_revision'), 'src/third_party/libprotobuf-mutator/src': Var('chromium_git') + '/external/github.com/google/libprotobuf-mutator.git' + '@' + Var('libprotobuf-mutator'), @@ -359,7 +362,7 @@ Var('chromium_git') + '/external/github.com/swisspol/GCDWebServer.git' + '@' + '43555c66627f6ed44817855a0f6d465f559d30e0', 'src/ios/third_party/material_components_ios/src': - Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'b72e8cb97f70f41d550620b2f03f193930f7c888', + Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '7026a1f8016419aa2a05ff08b3897a9878aeae63', 'src/ios/third_party/material_font_disk_loader_ios/src': Var('chromium_git') + '/external/github.com/material-foundation/material-font-disk-loader-ios.git' + '@' + '8e30188777b016182658fbaa0a4a020a48183224', @@ -403,11 +406,11 @@ # For Linux and Chromium OS. 'src/third_party/cros_system_api': - Var('chromium_git') + '/chromiumos/platform/system_api.git' + '@' + 'd3b70a23a22ab8baa87367c6aaa77944ab965e18', + Var('chromium_git') + '/chromiumos/platform/system_api.git' + '@' + '27810c6ba2d3f136811e516fe07d5562704a92ee', # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': - Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '1342348f9fa2b7959feb7dac98ce93a927b90ca8', + Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'f542336f1ad33cbf13fe2fdecd90a7908d9e46e1', # Dependency of chromite.git and skia. 'src/third_party/pyelftools': @@ -495,7 +498,7 @@ Var('chromium_git') + '/external/netty4.git' + '@' + 'cc4420b13bb4eeea5b1cf4f93b2755644cd3b120', 'src/third_party/robolectric/robolectric': - Var('chromium_git') + '/external/robolectric.git' + '@' + '0ccaf33cf6a6d98cbef7d0f3604fda45b13cce54', + Var('chromium_git') + '/external/robolectric.git' + '@' + 'b02c65cc6d7465f58f0de48a39914aa905692afa', 'src/third_party/ub-uiautomator/lib': Var('chromium_git') + '/chromium/third_party/ub-uiautomator.git' + '@' + '00270549ce3161ae72ceb24712618ea28b4f9434', @@ -1222,7 +1225,7 @@ 'action': [ 'python', 'src/build/fuchsia/update_sdk.py', - '4f60d251ab16d2e514fb6394c83e4544ce91554c', + '2947889cf6f6a53dcd9826e4ce41316920fcb05c', ], }, ],
diff --git a/OWNERS b/OWNERS index 1d44582..3964919a 100644 --- a/OWNERS +++ b/OWNERS
@@ -9,6 +9,12 @@ per-file .git-blame-ignore-revs=mgiuca@chromium.org per-file .git-blame-ignore-revs=thakis@chromium.org per-file .gn=file://build/OWNERS +per-file .vpython=dnj@chromium.org +per-file .vpython=dpranke@chromium.org +per-file .vpython=iannucci@chromium.org +per-file .vpython=jbudorick@chromium.org +per-file .vpython=nednguyen@chromium.org +per-file .vpython=phajdan.jr@chromium.org per-file AUTHORS=* per-file BUILD.gn=file://build/OWNERS per-file codereview.settings=agable@chromium.org
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index de5d9cb..fbcbd549 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -1509,6 +1509,7 @@ # matching the above patterns, which trigger false positives. exclude_paths = [ 'third_party/crashpad/*', + 'third_party/win_build_output/*', ] # Dictionary mapping an OWNERS file path to Patterns.
diff --git a/WATCHLISTS b/WATCHLISTS index df1c1e00..0e677db 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -157,7 +157,8 @@ 'components/webdata/', }, 'background_fetch': { - 'filepath': 'background_fetch', + 'filepath': 'background_fetch|'\ + 'background-fetch', }, 'background_sync': { 'filepath': '/background_sync/', @@ -423,11 +424,6 @@ 'filepath': 'third_party/WebKit/Source/modules/navigatorcontentutils' \ '|third_party/WebKit/LayoutTests/fast/dom/navigatorcontentutils' }, - 'blink_notifications': { - 'filepath': 'third_party/WebKit/LayoutTests/http/tests/notifications' \ - '|third_party/WebKit/Source/modules/notifications' \ - '|third_party/WebKit/public/platform/modules/notifications' - }, 'blink_out_of_process_frames': { 'filepath': 'third_party/WebKit/Source/core/frame/FrameOwner' \ '|third_party/WebKit/Source/core/frame/Frame\.' \ @@ -464,11 +460,6 @@ 'blink_public_api': { 'filepath': 'third_party/WebKit/public' }, - 'blink_push_messaging': { - 'filepath': 'third_party/WebKit/LayoutTests/http/tests/push_messaging' \ - '|third_party/WebKit/Source/modules/push_messaging' \ - '|third_party/WebKit/public/platform/modules/push_messaging' - }, 'blink_quota': { 'filepath': 'third_party/WebKit/Source/modules/quota/' \ '|third_party/WebKit/Source/web/.*Quota' \ @@ -1166,15 +1157,19 @@ 'filepath': '/netinfo/', }, 'notifications': { - 'filepath': 'chrome/browser/extensions/api/notifications/|' \ - 'chrome/browser/notifications/|' \ - 'chrome/test/data/notifications/|' \ - 'content/browser/notifications/|' \ - 'content/child/notifications/|' \ - 'content/common/platform_notification|' \ - 'content/public/browser/platform_notification|' \ - 'content/public/common/platform_notification|' \ - 'content/renderer/notification_|' \ + 'filepath': 'chrome/browser/extensions/api/notifications/|'\ + 'chrome/browser/notifications/|'\ + 'chrome/test/data/notifications/|'\ + 'content/browser/notifications/|'\ + 'content/child/notifications/|'\ + 'content/common/platform_notification|'\ + 'content/public/browser/platform_notification|'\ + 'content/public/common/platform_notification|'\ + 'content/renderer/notification_|'\ + 'third_party/WebKit/LayoutTests/external/wpt/notifications|'\ + 'third_party/WebKit/LayoutTests/http/tests/notifications|'\ + 'third_party/WebKit/Source/modules/notifications|'\ + 'third_party/WebKit/public/platform/modules/notifications|'\ 'ui/message_center/' }, 'nqe': { @@ -1671,7 +1666,7 @@ 'mathp+autofillwatch@chromium.org', 'sebsg+autofillwatch@chromium.org', 'rogerm+autofillwatch@chromium.org'], - 'background_fetch': ['awdf+watch@chromium.org', + 'background_fetch': ['delphick+watch@chromium.org', 'johnme+watch@chromium.org', 'peter@chromium.org'], 'background_sync': ['chasej+watch@chromium.org', @@ -1802,8 +1797,6 @@ 'blink_mediastream': ['tommyw+watchlist@chromium.org'], 'blink_modules': ['haraken@chromium.org'], 'blink_navigator_content_utils': ['gyuyoung.kim@chromium.org'], - 'blink_notifications': ['awdf+watch@chromium.org', - 'peter@chromium.org'], 'blink_out_of_process_frames': ['dcheng@chromium.org', 'mlamouri+watch-blink@chromium.org'], 'blink_owners': ['abarth@chromium.org'], @@ -1826,9 +1819,6 @@ 'yoav@yoav.ws'], 'blink_public_api': ['blink-reviews-api@chromium.org', 'dglazkov+blink@chromium.org'], - 'blink_push_messaging': ['awdf+watch@chromium.org', - 'johnme+watch@chromium.org', - 'peter@chromium.org'], 'blink_quota': ['kinuko+fileapi@chromium.org', 'nhiroki@chromium.org', 'tzik@chromium.org'], @@ -2191,7 +2181,8 @@ 'tburkard+watch@chromium.org'], 'presentation': ['amp+watch@chromium.org', 'mfoltz+watch@chromium.org'], - 'push_messaging': ['johnme+watch@chromium.org', + 'push_messaging': ['awdf+watch@chromium.org', + 'johnme+watch@chromium.org', 'peter@chromium.org'], 'reading_list': ['stkhapugin@chromium.org'], 'remoting': ['chromoting-reviews@chromium.org'],
diff --git a/android_webview/browser/aw_permission_manager_unittest.cc b/android_webview/browser/aw_permission_manager_unittest.cc index 691c451..4f069b9 100644 --- a/android_webview/browser/aw_permission_manager_unittest.cc +++ b/android_webview/browser/aw_permission_manager_unittest.cc
@@ -32,7 +32,7 @@ const char kRequestingOrigin1[] = "https://www.google.com/"; const char kRequestingOrigin2[] = "https://www.chromium.org/"; -class AwBrowserPermissionRequestDelegateForTesting +class AwBrowserPermissionRequestDelegateForTesting final : public AwBrowserPermissionRequestDelegate { public: void EnqueueResponse(const std::string& origin,
diff --git a/android_webview/browser/aw_safe_browsing_resource_throttle.cc b/android_webview/browser/aw_safe_browsing_resource_throttle.cc index 4a61902f..93d733e 100644 --- a/android_webview/browser/aw_safe_browsing_resource_throttle.cc +++ b/android_webview/browser/aw_safe_browsing_resource_throttle.cc
@@ -4,39 +4,53 @@ #include "android_webview/browser/aw_safe_browsing_resource_throttle.h" +#include <memory> + #include "android_webview/browser/aw_contents_client_bridge.h" -#include "android_webview/browser/aw_safe_browsing_ui_manager.h" #include "android_webview/browser/aw_safe_browsing_whitelist_manager.h" -#include "base/macros.h" -#include "components/safe_browsing/base_resource_throttle.h" -#include "components/safe_browsing_db/database_manager.h" +#include "components/safe_browsing/features.h" #include "components/safe_browsing_db/v4_protocol_manager_util.h" -#include "components/security_interstitials/content/unsafe_resource.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/navigation_entry.h" -#include "content/public/common/resource_type.h" -#include "net/base/net_errors.h" #include "net/url_request/url_request.h" namespace android_webview { +namespace { -// static -const void* const AwSafeBrowsingResourceThrottle::kUserDataKey = - &AwSafeBrowsingResourceThrottle::kUserDataKey; +// This is used as a user data key for net::URLRequest. Setting it indicates +// that the request is cancelled because of SafeBrowsing. It could be used, for +// example, to decide whether to override the error code with a +// SafeBrowsing-specific error code. +const void* const kCancelledBySafeBrowsingUserDataKey = + &kCancelledBySafeBrowsingUserDataKey; -// static -AwSafeBrowsingResourceThrottle* AwSafeBrowsingResourceThrottle::MaybeCreate( +void SetCancelledBySafeBrowsing(net::URLRequest* request) { + request->SetUserData(kCancelledBySafeBrowsingUserDataKey, + std::make_unique<base::SupportsUserData::Data>()); +} + +} // namespace + +content::ResourceThrottle* MaybeCreateAwSafeBrowsingResourceThrottle( net::URLRequest* request, content::ResourceType resource_type, scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> database_manager, scoped_refptr<AwSafeBrowsingUIManager> ui_manager, AwSafeBrowsingWhitelistManager* whitelist_manager) { - if (database_manager->IsSupported()) { - return new AwSafeBrowsingResourceThrottle(request, resource_type, - database_manager, ui_manager, - whitelist_manager); + if (!database_manager->IsSupported()) + return nullptr; + + if (base::FeatureList::IsEnabled(safe_browsing::kParallelUrlCheck)) { + return new AwSafeBrowsingParallelResourceThrottle( + request, resource_type, std::move(database_manager), + std::move(ui_manager), whitelist_manager); } - return nullptr; + + return new AwSafeBrowsingResourceThrottle( + request, resource_type, std::move(database_manager), + std::move(ui_manager), whitelist_manager); +} + +bool IsCancelledBySafeBrowsing(const net::URLRequest* request) { + return request->GetUserData(kCancelledBySafeBrowsingUserDataKey) != nullptr; } AwSafeBrowsingResourceThrottle::AwSafeBrowsingResourceThrottle( @@ -59,7 +73,7 @@ std::move(ui_manager), whitelist_manager)) {} -AwSafeBrowsingResourceThrottle::~AwSafeBrowsingResourceThrottle() {} +AwSafeBrowsingResourceThrottle::~AwSafeBrowsingResourceThrottle() = default; bool AwSafeBrowsingResourceThrottle::CheckUrl(const GURL& gurl) { if (url_checker_delegate_->IsUrlWhitelisted(gurl)) { @@ -70,10 +84,6 @@ void AwSafeBrowsingResourceThrottle::StartDisplayingBlockingPageHelper( security_interstitials::UnsafeResource resource) { - resource.callback = - base::Bind(&AwSafeBrowsingResourceThrottle::OnBlockingPageComplete, - AsWeakPtr(), resource.callback); - const content::ResourceRequestInfo* info = content::ResourceRequestInfo::ForRequest(request_); bool is_main_frame = @@ -88,19 +98,31 @@ resource, request_->method(), headers, is_main_frame, has_user_gesture); } -// static -void AwSafeBrowsingResourceThrottle::OnBlockingPageComplete( - const base::WeakPtr<BaseResourceThrottle>& throttle, - const base::Callback<void(bool)>& forward_callback, - bool proceed) { - if (throttle && !proceed) { - AwSafeBrowsingResourceThrottle* aw_throttle = - static_cast<AwSafeBrowsingResourceThrottle*>(throttle.get()); - aw_throttle->request_->SetUserData( - kUserDataKey, base::MakeUnique<base::SupportsUserData::Data>()); - } +void AwSafeBrowsingResourceThrottle::CancelResourceLoad() { + SetCancelledBySafeBrowsing(request_); + Cancel(); +} - forward_callback.Run(proceed); +AwSafeBrowsingParallelResourceThrottle::AwSafeBrowsingParallelResourceThrottle( + net::URLRequest* request, + content::ResourceType resource_type, + scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> database_manager, + scoped_refptr<AwSafeBrowsingUIManager> ui_manager, + AwSafeBrowsingWhitelistManager* whitelist_manager) + : safe_browsing::BaseParallelResourceThrottle( + request, + resource_type, + new AwUrlCheckerDelegateImpl(std::move(database_manager), + std::move(ui_manager), + whitelist_manager)), + request_(request) {} + +AwSafeBrowsingParallelResourceThrottle:: + ~AwSafeBrowsingParallelResourceThrottle() = default; + +void AwSafeBrowsingParallelResourceThrottle::CancelResourceLoad() { + SetCancelledBySafeBrowsing(request_); + Cancel(); } } // namespace android_webview
diff --git a/android_webview/browser/aw_safe_browsing_resource_throttle.h b/android_webview/browser/aw_safe_browsing_resource_throttle.h index 75b991a7..fb4405f0d 100644 --- a/android_webview/browser/aw_safe_browsing_resource_throttle.h +++ b/android_webview/browser/aw_safe_browsing_resource_throttle.h
@@ -10,6 +10,7 @@ #include "android_webview/browser/net/aw_web_resource_request.h" #include "base/macros.h" #include "components/safe_browsing/base_resource_throttle.h" +#include "components/safe_browsing/browser/base_parallel_resource_throttle.h" #include "components/safe_browsing_db/database_manager.h" #include "components/security_interstitials/content/unsafe_resource.h" #include "content/public/common/resource_type.h" @@ -25,14 +26,28 @@ class AwSafeBrowsingWhitelistManager; +// Contructs a resource throttle for SafeBrowsing. It returns an +// AwSafeBrowsingParallelResourceThrottle instance if +// --enable-features=S13nSafeBrowsingParallelUrlCheck is specified; returns +// an AwSafeBrowsingResourceThrottle otherwise. +// +// It returns nullptr if GMS doesn't exist on device or support SafeBrowsing. +content::ResourceThrottle* MaybeCreateAwSafeBrowsingResourceThrottle( + net::URLRequest* request, + content::ResourceType resource_type, + scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> database_manager, + scoped_refptr<AwSafeBrowsingUIManager> ui_manager, + AwSafeBrowsingWhitelistManager* whitelist_manager); + +bool IsCancelledBySafeBrowsing(const net::URLRequest* request); + class AwSafeBrowsingResourceThrottle : public safe_browsing::BaseResourceThrottle { - public: - static const void* const kUserDataKey; + protected: + bool CheckUrl(const GURL& url) override; - // Will construct an AwSafeBrowsingResourceThrottle if GMS exists on device - // and supports safebrowsing. - static AwSafeBrowsingResourceThrottle* MaybeCreate( + private: + friend content::ResourceThrottle* MaybeCreateAwSafeBrowsingResourceThrottle( net::URLRequest* request, content::ResourceType resource_type, scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> @@ -40,10 +55,6 @@ scoped_refptr<AwSafeBrowsingUIManager> ui_manager, AwSafeBrowsingWhitelistManager* whitelist_manager); - protected: - bool CheckUrl(const GURL& url) override; - - private: AwSafeBrowsingResourceThrottle( net::URLRequest* request, content::ResourceType resource_type, @@ -57,10 +68,8 @@ void StartDisplayingBlockingPageHelper( security_interstitials::UnsafeResource resource) override; - static void OnBlockingPageComplete( - const base::WeakPtr<BaseResourceThrottle>& throttle, - const base::Callback<void(bool)>& forward_callback, - bool proceed); + // safe_browsing::BaseResourceThrottle overrides: + void CancelResourceLoad() override; net::URLRequest* request_; @@ -69,6 +78,39 @@ DISALLOW_COPY_AND_ASSIGN(AwSafeBrowsingResourceThrottle); }; +// Unlike AwSafeBrowsingResourceThrottle, this class never defers starting the +// URL request or following redirects. If any of the checks for the original URL +// and redirect chain are not complete by the time the response headers are +// available, the request is deferred until all the checks are done. +class AwSafeBrowsingParallelResourceThrottle + : public safe_browsing::BaseParallelResourceThrottle { + private: + friend content::ResourceThrottle* MaybeCreateAwSafeBrowsingResourceThrottle( + net::URLRequest* request, + content::ResourceType resource_type, + scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> + database_manager, + scoped_refptr<AwSafeBrowsingUIManager> ui_manager, + AwSafeBrowsingWhitelistManager* whitelist_manager); + + AwSafeBrowsingParallelResourceThrottle( + net::URLRequest* request, + content::ResourceType resource_type, + scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> + database_manager, + scoped_refptr<AwSafeBrowsingUIManager> ui_manager, + AwSafeBrowsingWhitelistManager* whitelist_manager); + + ~AwSafeBrowsingParallelResourceThrottle() override; + + // safe_browsing::BaseParallelResourceThrottle overrides: + void CancelResourceLoad() override; + + net::URLRequest* request_; + + DISALLOW_COPY_AND_ASSIGN(AwSafeBrowsingParallelResourceThrottle); +}; + } // namespace android_webview #endif // ANDROID_WEBVIEW_BROWSER_AW_SAFE_BROWSING_RESOURCE_THROTTLE_H_
diff --git a/android_webview/browser/aw_settings.cc b/android_webview/browser/aw_settings.cc index 6f63877..a4e902e 100644 --- a/android_webview/browser/aw_settings.cc +++ b/android_webview/browser/aw_settings.cc
@@ -467,6 +467,9 @@ // attribute is explicitly specified. This "opt-in" behavior is for backward // consistency in apps that use WebView (see crbug.com/652314). web_prefs->spellcheck_enabled_by_default = false; + + web_prefs->scroll_top_left_interop_enabled = + Java_AwSettings_getScrollTopLeftInteropEnabledLocked(env, obj); } static jlong Init(JNIEnv* env,
diff --git a/android_webview/browser/deferred_gpu_command_service.cc b/android_webview/browser/deferred_gpu_command_service.cc index 66aaa6313..b457209 100644 --- a/android_webview/browser/deferred_gpu_command_service.cc +++ b/android_webview/browser/deferred_gpu_command_service.cc
@@ -66,8 +66,8 @@ gpu::GPUInfo gpu_info = content::GpuDataManager::GetInstance()->GetGPUInfo(); DCHECK(base::CommandLine::InitializedForCurrentProcess()); - gpu::GpuFeatureInfo gpu_feature_info = gpu::GetGpuFeatureInfo( - gpu_info, *base::CommandLine::ForCurrentProcess()); + gpu::GpuFeatureInfo gpu_feature_info = gpu::ComputeGpuFeatureInfo( + gpu_info, base::CommandLine::ForCurrentProcess()); g_service.Get() = new DeferredGpuCommandService(gpu_info, gpu_feature_info); } }
diff --git a/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc b/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc index 3703041..9a5c288 100644 --- a/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc +++ b/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc
@@ -298,7 +298,7 @@ if (ioThreadThrottle->GetSafeBrowsingEnabled()) { content::ResourceThrottle* throttle = - AwSafeBrowsingResourceThrottle::MaybeCreate( + MaybeCreateAwSafeBrowsingResourceThrottle( request, resource_type, AwBrowserContext::GetDefault()->GetSafeBrowsingDBManager(), AwBrowserContext::GetDefault()->GetSafeBrowsingUIManager(), @@ -342,7 +342,7 @@ content::ResourceRequestInfo::ForRequest(request); bool safebrowsing_hit = false; - if (request->GetUserData(AwSafeBrowsingResourceThrottle::kUserDataKey)) { + if (IsCancelledBySafeBrowsing(request)) { safebrowsing_hit = true; } BrowserThread::PostTask(
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java index 3e8eae46..8d595a7 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java +++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -86,6 +86,7 @@ private boolean mEnableSupportedHardwareAcceleratedFeatures; private int mMixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW; private boolean mCSSHexAlphaColorEnabled = false; + private boolean mScrollTopLeftInteropEnabled = false; private boolean mOffscreenPreRaster; private int mDisabledMenuItems = WebSettings.MENU_ITEM_NONE; @@ -1267,6 +1268,21 @@ } @CalledByNative + private boolean getScrollTopLeftInteropEnabledLocked() { + assert Thread.holdsLock(mAwSettingsLock); + return mScrollTopLeftInteropEnabled; + } + + public void setScrollTopLeftInteropEnabled(boolean enabled) { + synchronized (mAwSettingsLock) { + if (mScrollTopLeftInteropEnabled != enabled) { + mScrollTopLeftInteropEnabled = enabled; + mEventHandler.updateWebkitPreferencesLocked(); + } + } + } + + @CalledByNative private boolean getSupportLegacyQuirksLocked() { assert Thread.holdsLock(mAwSettingsLock); return mSupportLegacyQuirks;
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 0118129..d476e6a 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -42,6 +42,10 @@ "accelerators/magnifier_key_scroller.h", "accelerators/spoken_feedback_toggler.cc", "accelerators/spoken_feedback_toggler.h", + "accessibility/accessibility_controller.cc", + "accessibility/accessibility_controller.h", + + # TODO(jamescook): Move these into accessibility/ after M61 stable. "accessibility_delegate.h", "accessibility_types.h", "animation/animation_change_type.h", @@ -196,10 +200,6 @@ "laser/laser_pointer_view.h", "laser/laser_segment_utils.cc", "laser/laser_segment_utils.h", - "link_handler_model.cc", - "link_handler_model.h", - "link_handler_model_factory.cc", - "link_handler_model_factory.h", "login/lock_screen_controller.cc", "login/lock_screen_controller.h", "login/ui/lock_contents_view.cc", @@ -597,8 +597,12 @@ "system/virtual_keyboard/virtual_keyboard_tray.h", "system/web_notification/ash_popup_alignment_delegate.cc", "system/web_notification/ash_popup_alignment_delegate.h", + "system/web_notification/login_state_notification_blocker.cc", + "system/web_notification/login_state_notification_blocker.h", "system/web_notification/message_center_bubble.cc", "system/web_notification/message_center_bubble.h", + "system/web_notification/message_center_controller.cc", + "system/web_notification/message_center_controller.h", "system/web_notification/web_notification_tray.cc", "system/web_notification/web_notification_tray.h", "touch/ash_touch_transform_controller.cc", @@ -866,6 +870,7 @@ "//components/prefs", "//components/quirks", "//components/session_manager:base", + "//components/session_manager/core", "//components/signin/core/account_id", "//components/strings", "//components/user_manager", @@ -1143,6 +1148,7 @@ "accelerators/accelerator_filter_unittest.cc", "accelerators/accelerator_table_unittest.cc", "accelerators/spoken_feedback_toggler_unittest.cc", + "accessibility/accessibility_controller_unittest.cc", "ash_touch_exploration_manager_chromeos_unittest.cc", "autoclick/autoclick_unittest.cc", "display/display_configuration_controller_unittest.cc", @@ -1247,11 +1253,13 @@ "system/tray/tray_event_filter_unittest.cc", "system/tray/tray_info_label_unittest.cc", "system/tray/tri_view_unittest.cc", + "system/tray_accessibility_unittest.cc", "system/tray_caps_lock_unittest.cc", "system/tray_tracing_unittest.cc", "system/update/tray_update_unittest.cc", "system/user/tray_user_unittest.cc", "system/web_notification/ash_popup_alignment_delegate_unittest.cc", + "system/web_notification/login_state_notification_blocker_unittest.cc", "system/web_notification/web_notification_tray_unittest.cc", "test/ash_test_helper_unittest.cc", "tooltips/tooltip_controller_unittest.cc", @@ -1307,6 +1315,7 @@ "//chromeos:test_support", "//chromeos:test_support_without_gmock", "//components/prefs:test_support", + "//components/session_manager/core", "//components/user_manager:test_support", "//device/bluetooth", "//services/ui/public/interfaces",
diff --git a/ash/accelerators/debug_commands.cc b/ash/accelerators/debug_commands.cc index a49a6a0..0411bf3 100644 --- a/ash/accelerators/debug_commands.cc +++ b/ash/accelerators/debug_commands.cc
@@ -6,6 +6,7 @@ #include "ash/accelerators/accelerator_commands.h" #include "ash/ash_switches.h" +#include "ash/public/cpp/touchscreen_enabled_source.h" #include "ash/root_window_controller.h" #include "ash/shell.h" #include "ash/shell_delegate.h" @@ -142,10 +143,9 @@ void HandleToggleTouchscreen() { base::RecordAction(base::UserMetricsAction("Accel_Toggle_Touchscreen")); ShellDelegate* delegate = Shell::Get()->shell_delegate(); - delegate->SetTouchscreenEnabledInPrefs( - !delegate->IsTouchscreenEnabledInPrefs(false /* use_local_state */), - false /* use_local_state */); - delegate->UpdateTouchscreenStatusFromPrefs(); + delegate->SetTouchscreenEnabled( + !delegate->GetTouchscreenEnabled(TouchscreenEnabledSource::USER_PREF), + TouchscreenEnabledSource::USER_PREF); } void HandleToggleTabletMode() {
diff --git a/ash/accessibility/accessibility_controller.cc b/ash/accessibility/accessibility_controller.cc new file mode 100644 index 0000000..4b045c4 --- /dev/null +++ b/ash/accessibility/accessibility_controller.cc
@@ -0,0 +1,134 @@ +// 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 "ash/accessibility/accessibility_controller.h" + +#include "ash/public/cpp/ash_pref_names.h" +#include "ash/session/session_controller.h" +#include "ash/session/session_observer.h" +#include "ash/shell.h" +#include "ash/shell_port.h" +#include "ash/system/tray/system_tray_notifier.h" +#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_change_registrar.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" +#include "ui/base/cursor/cursor_type.h" + +namespace ash { +namespace { + +void NotifyAccessibilityStatusChanged() { + Shell::Get()->system_tray_notifier()->NotifyAccessibilityStatusChanged( + A11Y_NOTIFICATION_NONE); +} + +} // namespace + +AccessibilityController::AccessibilityController() { + Shell::Get()->session_controller()->AddObserver(this); +} + +AccessibilityController::~AccessibilityController() { + Shell::Get()->session_controller()->RemoveObserver(this); +} + +// static +void AccessibilityController::RegisterProfilePrefs(PrefRegistrySimple* registry, + bool for_test) { + if (for_test) { + // In tests there is no remote pref service. Make ash own the prefs. + registry->RegisterBooleanPref(prefs::kAccessibilityLargeCursorEnabled, + false); + registry->RegisterIntegerPref(prefs::kAccessibilityLargeCursorDipSize, + kDefaultLargeCursorSize); + registry->RegisterBooleanPref(prefs::kAccessibilityHighContrastEnabled, + false); + registry->RegisterBooleanPref(prefs::kAccessibilityScreenMagnifierEnabled, + false); + return; + } + + // In production the prefs are owned by chrome. + // TODO(jamescook): Move ownership to ash. + registry->RegisterForeignPref(prefs::kAccessibilityLargeCursorEnabled); + registry->RegisterForeignPref(prefs::kAccessibilityLargeCursorDipSize); + registry->RegisterForeignPref(prefs::kAccessibilityHighContrastEnabled); + registry->RegisterForeignPref(prefs::kAccessibilityScreenMagnifierEnabled); +} + +void AccessibilityController::SetLargeCursorEnabled(bool enabled) { + PrefService* prefs = GetActivePrefService(); + // Null early in startup. + if (!prefs) + return; + + prefs->SetBoolean(prefs::kAccessibilityLargeCursorEnabled, enabled); + prefs->CommitPendingWrite(); +} + +bool AccessibilityController::IsLargeCursorEnabled() const { + return large_cursor_enabled_; +} + +// static +bool AccessibilityController::RequiresCursorCompositing(PrefService* prefs) { + return prefs->GetBoolean(prefs::kAccessibilityLargeCursorEnabled) || + prefs->GetBoolean(prefs::kAccessibilityHighContrastEnabled) || + prefs->GetBoolean(prefs::kAccessibilityScreenMagnifierEnabled); +} + +void AccessibilityController::OnActiveUserPrefServiceChanged( + PrefService* prefs) { + // Watch for pref updates from webui settings. + pref_change_registrar_ = base::MakeUnique<PrefChangeRegistrar>(); + pref_change_registrar_->Init(prefs); + pref_change_registrar_->Add( + prefs::kAccessibilityLargeCursorEnabled, + base::Bind(&AccessibilityController::UpdateLargeCursorFromPref, + base::Unretained(this))); + pref_change_registrar_->Add( + prefs::kAccessibilityLargeCursorDipSize, + base::Bind(&AccessibilityController::UpdateLargeCursorFromPref, + base::Unretained(this))); + + UpdateLargeCursorFromPref(); +} + +void AccessibilityController::SetPrefServiceForTest(PrefService* prefs) { + pref_service_for_test_ = prefs; + OnActiveUserPrefServiceChanged(prefs); +} + +PrefService* AccessibilityController::GetActivePrefService() const { + if (pref_service_for_test_) + return pref_service_for_test_; + + return Shell::Get()->session_controller()->GetLastActiveUserPrefService(); +} + +void AccessibilityController::UpdateLargeCursorFromPref() { + PrefService* prefs = GetActivePrefService(); + const bool enabled = + prefs->GetBoolean(prefs::kAccessibilityLargeCursorEnabled); + // Reset large cursor size to the default size when large cursor is disabled. + if (!enabled) + prefs->ClearPref(prefs::kAccessibilityLargeCursorDipSize); + const int size = prefs->GetInteger(prefs::kAccessibilityLargeCursorDipSize); + + if (large_cursor_enabled_ == enabled && large_cursor_size_in_dip_ == size) + return; + + large_cursor_enabled_ = enabled; + large_cursor_size_in_dip_ = size; + + NotifyAccessibilityStatusChanged(); + + ShellPort::Get()->SetCursorSize( + large_cursor_enabled_ ? ui::CursorSize::kLarge : ui::CursorSize::kNormal); + Shell::Get()->SetLargeCursorSizeInDip(large_cursor_size_in_dip_); + Shell::Get()->SetCursorCompositingEnabled(RequiresCursorCompositing(prefs)); +} + +} // namespace ash
diff --git a/ash/accessibility/accessibility_controller.h b/ash/accessibility/accessibility_controller.h new file mode 100644 index 0000000..6c14856 --- /dev/null +++ b/ash/accessibility/accessibility_controller.h
@@ -0,0 +1,63 @@ +// 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 ASH_ACCESSIBILITY_ACCESSIBILITY_CONTROLLER_H_ +#define ASH_ACCESSIBILITY_ACCESSIBILITY_CONTROLLER_H_ + +#include <memory> + +#include "ash/ash_constants.h" +#include "ash/ash_export.h" +#include "ash/session/session_observer.h" +#include "base/macros.h" + +class PrefChangeRegistrar; +class PrefRegistrySimple; +class PrefService; + +namespace ash { + +// The controller for accessibility features in ash. Features can be enabled +// in chrome's webui settings or the system tray menu (see TrayAccessibility). +// Uses preferences to communicate with chrome to support mash. +class ASH_EXPORT AccessibilityController : public SessionObserver { + public: + AccessibilityController(); + ~AccessibilityController() override; + + // See Shell::RegisterProfilePrefs(). + static void RegisterProfilePrefs(PrefRegistrySimple* registry, bool for_test); + + void SetLargeCursorEnabled(bool enabled); + bool IsLargeCursorEnabled() const; + + // Returns true if an accessibility feature is enabled that requires cursor + // compositing. + static bool RequiresCursorCompositing(PrefService* prefs); + + // SessionObserver: + void OnActiveUserPrefServiceChanged(PrefService* prefs) override; + + void SetPrefServiceForTest(PrefService* prefs); + + private: + // Before login returns the signin screen profile prefs. After login returns + // the active user profile prefs. + PrefService* GetActivePrefService() const; + + void UpdateLargeCursorFromPref(); + + std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_; + + bool large_cursor_enabled_ = false; + int large_cursor_size_in_dip_ = kDefaultLargeCursorSize; + + PrefService* pref_service_for_test_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(AccessibilityController); +}; + +} // namespace ash + +#endif // ASH_ACCESSIBILITY_ACCESSIBILITY_CONTROLLER_H_
diff --git a/ash/accessibility/accessibility_controller_unittest.cc b/ash/accessibility/accessibility_controller_unittest.cc new file mode 100644 index 0000000..d6d0132 --- /dev/null +++ b/ash/accessibility/accessibility_controller_unittest.cc
@@ -0,0 +1,89 @@ +// 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 "ash/accessibility/accessibility_controller.h" + +#include "ash/ash_constants.h" +#include "ash/public/cpp/ash_pref_names.h" +#include "ash/session/session_controller.h" +#include "ash/shell.h" +#include "ash/system/accessibility_observer.h" +#include "ash/system/tray/system_tray_notifier.h" +#include "ash/test/ash_test_base.h" +#include "components/prefs/pref_service.h" + +namespace ash { + +class TestAccessibilityObserver : public AccessibilityObserver { + public: + TestAccessibilityObserver() = default; + ~TestAccessibilityObserver() override = default; + + // AccessibilityObserver: + void OnAccessibilityStatusChanged( + AccessibilityNotificationVisibility notify) override { + changed_++; + } + + int changed_ = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(TestAccessibilityObserver); +}; + +using AccessibilityControllerTest = AshTestBase; + +TEST_F(AccessibilityControllerTest, PrefsAreRegistered) { + PrefService* prefs = + Shell::Get()->session_controller()->GetLastActiveUserPrefService(); + EXPECT_TRUE(prefs->FindPreference(prefs::kAccessibilityLargeCursorEnabled)); + EXPECT_TRUE(prefs->FindPreference(prefs::kAccessibilityLargeCursorDipSize)); + EXPECT_TRUE(prefs->FindPreference(prefs::kAccessibilityHighContrastEnabled)); + EXPECT_TRUE( + prefs->FindPreference(prefs::kAccessibilityScreenMagnifierEnabled)); +} + +TEST_F(AccessibilityControllerTest, SetLargeCursorEnabled) { + AccessibilityController* controller = + Shell::Get()->accessibility_controller(); + EXPECT_FALSE(controller->IsLargeCursorEnabled()); + controller->SetLargeCursorEnabled(true); + EXPECT_TRUE(controller->IsLargeCursorEnabled()); + controller->SetLargeCursorEnabled(false); + EXPECT_FALSE(controller->IsLargeCursorEnabled()); +} + +TEST_F(AccessibilityControllerTest, SetLargeCursorNotifiesObservers) { + TestAccessibilityObserver observer; + Shell::Get()->system_tray_notifier()->AddAccessibilityObserver(&observer); + EXPECT_EQ(0, observer.changed_); + + AccessibilityController* controller = + Shell::Get()->accessibility_controller(); + controller->SetLargeCursorEnabled(true); + EXPECT_EQ(1, observer.changed_); + controller->SetLargeCursorEnabled(false); + EXPECT_EQ(2, observer.changed_); + + Shell::Get()->system_tray_notifier()->RemoveAccessibilityObserver(&observer); +} + +TEST_F(AccessibilityControllerTest, DisableLargeCursorResetsSize) { + PrefService* prefs = + Shell::Get()->session_controller()->GetLastActiveUserPrefService(); + EXPECT_EQ(kDefaultLargeCursorSize, + prefs->GetInteger(prefs::kAccessibilityLargeCursorDipSize)); + + // Simulate using chrome settings webui to turn on large cursor and set a + // custom size. + prefs->SetBoolean(prefs::kAccessibilityLargeCursorEnabled, true); + prefs->SetInteger(prefs::kAccessibilityLargeCursorDipSize, 48); + + // Turning off large cursor resets the size to the default. + prefs->SetBoolean(prefs::kAccessibilityLargeCursorEnabled, false); + EXPECT_EQ(kDefaultLargeCursorSize, + prefs->GetInteger(prefs::kAccessibilityLargeCursorDipSize)); +} + +} // namespace ash
diff --git a/ash/accessibility_delegate.h b/ash/accessibility_delegate.h index 59d1753..480d480 100644 --- a/ash/accessibility_delegate.h +++ b/ash/accessibility_delegate.h
@@ -13,6 +13,10 @@ namespace ash { // A delegate class to control and query accessibility features. +// +// NOTE: Methods in this class are migrating to AccessibilityController to +// support mash (because ash is in a separate process and cannot call back into +// chrome). Add new methods there, not here. class ASH_EXPORT AccessibilityDelegate { public: virtual ~AccessibilityDelegate() {} @@ -36,12 +40,6 @@ // Returns true if the screen magnifier is enabled. virtual bool IsMagnifierEnabled() const = 0; - // Invoked to enable Large Cursor. - virtual void SetLargeCursorEnabled(bool enabled) = 0; - - // Returns true if Large Cursor is enabled. - virtual bool IsLargeCursorEnabled() const = 0; - // Invoked to enable autoclick. virtual void SetAutoclickEnabled(bool enabled) = 0; @@ -153,6 +151,8 @@ // Forward an accessibility gesture from the touch exploration controller to // ChromeVox. virtual void HandleAccessibilityGesture(ui::AXGesture gesture) = 0; + + // NOTE: Prefer adding methods to AccessibilityController, see class comment. }; } // namespace ash
diff --git a/ash/default_accessibility_delegate.cc b/ash/default_accessibility_delegate.cc index a3b95399..26bf6bfe 100644 --- a/ash/default_accessibility_delegate.cc +++ b/ash/default_accessibility_delegate.cc
@@ -6,6 +6,9 @@ #include <limits> +#include "ash/accessibility/accessibility_controller.h" +#include "ash/shell.h" + namespace ash { DefaultAccessibilityDelegate::DefaultAccessibilityDelegate() {} @@ -32,14 +35,6 @@ return screen_magnifier_enabled_; } -void DefaultAccessibilityDelegate::SetLargeCursorEnabled(bool enabled) { - large_cursor_enabled_ = enabled; -} - -bool DefaultAccessibilityDelegate::IsLargeCursorEnabled() const { - return large_cursor_enabled_; -} - void DefaultAccessibilityDelegate::SetAutoclickEnabled(bool enabled) { autoclick_enabled_ = enabled; } @@ -122,8 +117,9 @@ bool DefaultAccessibilityDelegate::ShouldShowAccessibilityMenu() const { return spoken_feedback_enabled_ || high_contrast_enabled_ || - screen_magnifier_enabled_ || large_cursor_enabled_ || - autoclick_enabled_ || virtual_keyboard_enabled_ || mono_audio_enabled_; + screen_magnifier_enabled_ || autoclick_enabled_ || + virtual_keyboard_enabled_ || mono_audio_enabled_ || + Shell::Get()->accessibility_controller()->IsLargeCursorEnabled(); } bool DefaultAccessibilityDelegate::IsBrailleDisplayConnected() const {
diff --git a/ash/default_accessibility_delegate.h b/ash/default_accessibility_delegate.h index 3621e46..e1187c6 100644 --- a/ash/default_accessibility_delegate.h +++ b/ash/default_accessibility_delegate.h
@@ -22,8 +22,6 @@ bool IsHighContrastEnabled() const override; void SetMagnifierEnabled(bool enabled) override; bool IsMagnifierEnabled() const override; - void SetLargeCursorEnabled(bool enabled) override; - bool IsLargeCursorEnabled() const override; void SetAutoclickEnabled(bool enabled) override; bool IsAutoclickEnabled() const override; void SetVirtualKeyboardEnabled(bool enabled) override; @@ -64,7 +62,6 @@ bool spoken_feedback_enabled_ = false; bool high_contrast_enabled_ = false; bool screen_magnifier_enabled_ = false; - bool large_cursor_enabled_ = false; bool autoclick_enabled_ = false; bool virtual_keyboard_enabled_ = false; bool mono_audio_enabled_ = false;
diff --git a/ash/link_handler_model.cc b/ash/link_handler_model.cc deleted file mode 100644 index 759ee2d..0000000 --- a/ash/link_handler_model.cc +++ /dev/null
@@ -1,12 +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/link_handler_model.h" - -namespace ash { - -LinkHandlerModel::Observer::~Observer() {} -LinkHandlerModel::~LinkHandlerModel() {} - -} // namespace ash
diff --git a/ash/link_handler_model.h b/ash/link_handler_model.h deleted file mode 100644 index 12def0b..0000000 --- a/ash/link_handler_model.h +++ /dev/null
@@ -1,42 +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_LINK_HANDLER_MODEL_H_ -#define ASH_LINK_HANDLER_MODEL_H_ - -#include <string> -#include <vector> - -#include "ash/ash_export.h" -#include "ui/gfx/image/image.h" - -class GURL; - -namespace ash { - -struct ASH_EXPORT LinkHandlerInfo { - std::string name; - gfx::Image icon; - uint32_t id; -}; - -// A model LinkHandlerModelFactory returns. -class ASH_EXPORT LinkHandlerModel { - public: - class Observer { - public: - virtual ~Observer(); - virtual void ModelChanged(const std::vector<LinkHandlerInfo>& handlers) = 0; - }; - - virtual ~LinkHandlerModel(); - virtual void AddObserver(Observer* observer) = 0; - - // Opens the |url| with a handler specified by the |handler_id|. - virtual void OpenLinkWithHandler(const GURL& url, uint32_t handler_id) = 0; -}; - -} // namespace ash - -#endif // ASH_LINK_HANDLER_MODEL_H_
diff --git a/ash/link_handler_model_factory.cc b/ash/link_handler_model_factory.cc deleted file mode 100644 index 86eed0e..0000000 --- a/ash/link_handler_model_factory.cc +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ash/link_handler_model_factory.h" - -#include "ash/link_handler_model.h" - -namespace ash { - -LinkHandlerModelFactory::LinkHandlerModelFactory() {} -LinkHandlerModelFactory::~LinkHandlerModelFactory() {} - -std::unique_ptr<LinkHandlerModel> LinkHandlerModelFactory::CreateModel( - const GURL& url) { - return nullptr; -} - -} // namespace ash
diff --git a/ash/link_handler_model_factory.h b/ash/link_handler_model_factory.h deleted file mode 100644 index f39fef3..0000000 --- a/ash/link_handler_model_factory.h +++ /dev/null
@@ -1,35 +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_LINK_HANDLER_MODEL_FACTORY_H_ -#define ASH_LINK_HANDLER_MODEL_FACTORY_H_ - -#include <memory> - -#include "ash/ash_export.h" -#include "base/macros.h" - -class GURL; - -namespace ash { - -class LinkHandlerModel; - -// A class for creating a LinkHandlerModel object. -class ASH_EXPORT LinkHandlerModelFactory { - public: - LinkHandlerModelFactory(); - virtual ~LinkHandlerModelFactory(); - - // Returns a model for the |url|. When such a model for the |url| cannot be - // created, returns nullptr. - virtual std::unique_ptr<LinkHandlerModel> CreateModel(const GURL& url); - - private: - DISALLOW_COPY_AND_ASSIGN(LinkHandlerModelFactory); -}; - -} // namespace ash - -#endif // ASH_LINK_HANDLER_MODEL_FACTORY_H_
diff --git a/ash/mus/manifest.json b/ash/mus/manifest.json index 6b38cbe9..d550e7bd 100644 --- a/ash/mus/manifest.json +++ b/ash/mus/manifest.json
@@ -20,7 +20,7 @@ "ash::mojom::ShelfController", "ash::mojom::ShutdownController", "ash::mojom::SystemTray", - "ash::mojom::TouchViewManager", + "ash::mojom::TabletModeManager", "ash::mojom::TrayAction", "ash::mojom::VpnList", "ash::mojom::WallpaperController"
diff --git a/ash/mus/shell_delegate_mus.cc b/ash/mus/shell_delegate_mus.cc index ef0d867..5f831c1 100644 --- a/ash/mus/shell_delegate_mus.cc +++ b/ash/mus/shell_delegate_mus.cc
@@ -120,17 +120,14 @@ return gfx::Image(); } -bool ShellDelegateMus::IsTouchscreenEnabledInPrefs(bool use_local_state) const { +bool ShellDelegateMus::GetTouchscreenEnabled( + TouchscreenEnabledSource source) const { NOTIMPLEMENTED(); return true; } -void ShellDelegateMus::SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) { - NOTIMPLEMENTED(); -} - -void ShellDelegateMus::UpdateTouchscreenStatusFromPrefs() { +void ShellDelegateMus::SetTouchscreenEnabled(bool enabled, + TouchscreenEnabledSource source) { NOTIMPLEMENTED(); }
diff --git a/ash/mus/shell_delegate_mus.h b/ash/mus/shell_delegate_mus.h index c5d11a7..793023e 100644 --- a/ash/mus/shell_delegate_mus.h +++ b/ash/mus/shell_delegate_mus.h
@@ -42,10 +42,9 @@ GPUSupport* CreateGPUSupport() override; base::string16 GetProductName() const override; gfx::Image GetDeprecatedAcceleratorImage() const override; - bool IsTouchscreenEnabledInPrefs(bool use_local_state) const override; - void SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) override; - void UpdateTouchscreenStatusFromPrefs() override; + bool GetTouchscreenEnabled(TouchscreenEnabledSource source) const override; + void SetTouchscreenEnabled(bool enabled, + TouchscreenEnabledSource source) override; ui::InputDeviceControllerClient* GetInputDeviceControllerClient() override; private:
diff --git a/ash/mus/standalone/manifest.json b/ash/mus/standalone/manifest.json index 89d5106..2b0f016 100644 --- a/ash/mus/standalone/manifest.json +++ b/ash/mus/standalone/manifest.json
@@ -16,7 +16,7 @@ "ash::mojom::ShelfController", "ash::mojom::ShutdownController", "ash::mojom::SystemTray", - "ash::mojom::TouchViewManager", + "ash::mojom::TabletModeManager", "ash::mojom::VpnList", "ash::mojom::WallpaperController" ],
diff --git a/ash/public/cpp/BUILD.gn b/ash/public/cpp/BUILD.gn index 46aeac6..1a5667c 100644 --- a/ash/public/cpp/BUILD.gn +++ b/ash/public/cpp/BUILD.gn
@@ -43,6 +43,7 @@ "shelf_types.h", "shell_window_ids.cc", "shell_window_ids.h", + "touchscreen_enabled_source.h", "voice_interaction_state.h", "window_pin_type.cc", "window_pin_type.h",
diff --git a/ash/public/cpp/touchscreen_enabled_source.h b/ash/public/cpp/touchscreen_enabled_source.h new file mode 100644 index 0000000..4da79f7 --- /dev/null +++ b/ash/public/cpp/touchscreen_enabled_source.h
@@ -0,0 +1,20 @@ +// 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 ASH_PUBLIC_CPP_TOUCHSCREEN_ENABLED_SOURCE_H_ +#define ASH_PUBLIC_CPP_TOUCHSCREEN_ENABLED_SOURCE_H_ + +namespace ash { + +// Different sources for requested touchscreen enabled/disabled state. +enum class TouchscreenEnabledSource { + // User-requested state set via a debug accelerator and stored in a pref. + USER_PREF, + // Transient global state used to disable touchscreen via power button. + GLOBAL, +}; + +} // namespace ash + +#endif // ASH_PUBLIC_CPP_TOUCHSCREEN_ENABLED_SOURCE_H_
diff --git a/ash/public/interfaces/pref_connector.mojom b/ash/public/interfaces/pref_connector.mojom index a451224..817bf47 100644 --- a/ash/public/interfaces/pref_connector.mojom +++ b/ash/public/interfaces/pref_connector.mojom
@@ -12,6 +12,11 @@ // A connector of PrefStoreConnectors. Provides ash with access to per-profile // prefs. interface PrefConnector { + // Provides a PrefStoreConnector for the signin screen profile prefs. Once + // connected the prefs continue to be available even after the user logs in. + GetPrefStoreConnectorForSigninScreen( + prefs.mojom.PrefStoreConnector& connector); + // Provides, via |connector|, a PrefStoreConnector for |account_id|. If // |account_id| is invalid or unknown, |connector| will be closed. GetPrefStoreConnectorForUser(signin.mojom.AccountId account_id,
diff --git a/ash/resources/vector_icons/BUILD.gn b/ash/resources/vector_icons/BUILD.gn index af5f1c5ca..c9bf5661 100644 --- a/ash/resources/vector_icons/BUILD.gn +++ b/ash/resources/vector_icons/BUILD.gn
@@ -77,6 +77,7 @@ "notification_feedback_button.1x.icon", "notification_feedback_button.icon", "notification_low_power_battery.icon", + "notification_screen.icon", "notification_settings.icon", "notification_timer.icon", "palette_action_capture_region.1x.icon",
diff --git a/ash/resources/vector_icons/notification_screen.icon b/ash/resources/vector_icons/notification_screen.icon new file mode 100644 index 0000000..c94e88e --- /dev/null +++ b/ash/resources/vector_icons/notification_screen.icon
@@ -0,0 +1,26 @@ +// 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. + +CANVAS_DIMENSIONS, 36, +MOVE_TO, 29.45f, 6, +H_LINE_TO, 6.54f, +CUBIC_TO, 5.15f, 6, 4, 7.2f, 4, 8.67f, +R_V_LINE_TO, 14, +CUBIC_TO, 4, 24.13f, 5.15f, 26, 6.55f, 26, +H_LINE_TO, 12, +R_V_LINE_TO, 4, +R_H_LINE_TO, 12, +R_V_LINE_TO, -4, +R_H_LINE_TO, 6, +R_CUBIC_TO, 1.4f, 0, 1.99f, -1.87f, 1.99f, -3.33f, +R_LINE_TO, 0.01f, -14, +CUBIC_TO, 32, 7.2f, 30.85f, 6, 29.45f, 6, +CLOSE, +MOVE_TO, 30, 24, +H_LINE_TO, 6, +V_LINE_TO, 8, +R_H_LINE_TO, 24, +R_V_LINE_TO, 16, +CLOSE, +END
diff --git a/ash/session/session_controller.cc b/ash/session/session_controller.cc index b7a7c98..af5b35b 100644 --- a/ash/session/session_controller.cc +++ b/ash/session/session_controller.cc
@@ -420,6 +420,14 @@ for (auto& observer : observers_) observer.OnLockStateChanged(locked); } + + // Signin profile prefs are needed at OOBE and login screen, but don't request + // them twice. + if (!signin_screen_prefs_requested_ && + (state_ == SessionState::OOBE || state_ == SessionState::LOGIN_PRIMARY)) { + ConnectToSigninScreenPrefService(); + signin_screen_prefs_requested_ = true; + } } void SessionController::AddUserSession(mojom::UserSessionPtr user_session) { @@ -523,6 +531,46 @@ std::move(start_lock_callback_).Run(true /* locked */); } +void SessionController::ConnectToSigninScreenPrefService() { + DCHECK(!signin_screen_prefs_requested_); + + // Null in tests. + if (!connector_) + return; + + // Connect to the PrefService for the signin profile. + auto pref_registry = base::MakeRefCounted<PrefRegistrySimple>(); + Shell::RegisterProfilePrefs(pref_registry.get()); + ash::mojom::PrefConnectorPtr pref_connector_connector; + connector_->BindInterface(mojom::kPrefConnectorServiceName, + &pref_connector_connector); + prefs::mojom::PrefStoreConnectorPtr pref_connector; + pref_connector_connector->GetPrefStoreConnectorForSigninScreen( + mojo::MakeRequest(&pref_connector)); + prefs::ConnectToPrefService( + std::move(pref_connector), std::move(pref_registry), + base::Bind(&SessionController::OnSigninScreenPrefServiceInitialized, + weak_ptr_factory_.GetWeakPtr())); +} + +void SessionController::OnSigninScreenPrefServiceInitialized( + std::unique_ptr<PrefService> pref_service) { + // |pref_service| can be null when running standalone without chrome. + if (!pref_service) + return; + + signin_screen_prefs_ = std::move(pref_service); + + // The signin profile should be initialized before any user profile. + DCHECK(!last_active_user_prefs_); + + // Chrome's ProfileManager::GetActiveUserProfile() can return the signin + // screen profile, so do the same thing here with signin screen profile prefs. + last_active_user_prefs_ = signin_screen_prefs_.get(); + for (auto& observer : observers_) + observer.OnActiveUserPrefServiceChanged(last_active_user_prefs_); +} + void SessionController::OnProfilePrefServiceInitialized( const AccountId& account_id, std::unique_ptr<PrefService> pref_service) {
diff --git a/ash/session/session_controller.h b/ash/session/session_controller.h index 045149d..a80a28ce 100644 --- a/ash/session/session_controller.h +++ b/ash/session/session_controller.h
@@ -143,8 +143,8 @@ PrefService* GetUserPrefServiceForUser(const AccountId& account_id); // Returns the PrefService for the last active user that had one or null if no - // PrefService connection has been successfully established, for example, - // during login before the first user is active. + // PrefService connection has been successfully established. Returns the + // signin screen profile prefs when at the login screen. PrefService* GetLastActiveUserPrefService(); void AddObserver(SessionObserver* observer); @@ -194,6 +194,12 @@ // run |start_lock_callback_| to indicate ash is locked successfully. void OnLockAnimationFinished(); + // Connects over mojo to the PrefService for the signin screen profile. + void ConnectToSigninScreenPrefService(); + + void OnSigninScreenPrefServiceInitialized( + std::unique_ptr<PrefService> pref_service); + void OnProfilePrefServiceInitialized( const AccountId& account_id, std::unique_ptr<PrefService> pref_service); @@ -247,6 +253,11 @@ service_manager::Connector* const connector_; + // Prefs for the incognito profile used by the signin screen. + std::unique_ptr<PrefService> signin_screen_prefs_; + + bool signin_screen_prefs_requested_ = false; + std::map<AccountId, std::unique_ptr<PrefService>> per_user_prefs_; PrefService* last_active_user_prefs_ = nullptr;
diff --git a/ash/session/session_controller_unittest.cc b/ash/session/session_controller_unittest.cc index 4721dd2e..c52a720 100644 --- a/ash/session/session_controller_unittest.cc +++ b/ash/session/session_controller_unittest.cc
@@ -436,7 +436,7 @@ EXPECT_EQ(nullptr, observer.last_user_pref_service()); auto pref_service = base::MakeUnique<TestingPrefServiceSimple>(); - Shell::RegisterProfilePrefs(pref_service->registry()); + Shell::RegisterProfilePrefs(pref_service->registry(), true /* for_test */); controller->ProvideUserPrefServiceForTest(kUserAccount1, std::move(pref_service)); EXPECT_EQ(controller->GetUserPrefServiceForUser(kUserAccount1), @@ -463,7 +463,7 @@ // becoming initialized. observer.clear_last_user_pref_service(); pref_service = base::MakeUnique<TestingPrefServiceSimple>(); - Shell::RegisterProfilePrefs(pref_service->registry()); + Shell::RegisterProfilePrefs(pref_service->registry(), true /* for_test */); controller->ProvideUserPrefServiceForTest(kUserAccount2, std::move(pref_service)); EXPECT_EQ(nullptr, observer.last_user_pref_service());
diff --git a/ash/session/test_session_controller_client.cc b/ash/session/test_session_controller_client.cc index a00739f2..71619eeb 100644 --- a/ash/session/test_session_controller_client.cc +++ b/ash/session/test_session_controller_client.cc
@@ -122,7 +122,7 @@ if (provide_pref_service && !controller_->GetUserPrefServiceForUser(account_id)) { auto pref_service = base::MakeUnique<TestingPrefServiceSimple>(); - Shell::RegisterProfilePrefs(pref_service->registry()); + Shell::RegisterProfilePrefs(pref_service->registry(), true /* for_test */); controller_->ProvideUserPrefServiceForTest(account_id, std::move(pref_service)); }
diff --git a/ash/shelf/app_list_button.cc b/ash/shelf/app_list_button.cc index 48d1e4e..a5f30cf 100644 --- a/ash/shelf/app_list_button.cc +++ b/ash/shelf/app_list_button.cc
@@ -87,6 +87,14 @@ // edge cases with ink drops, events, etc. in tablet mode where we have two // buttons in one. EnableCanvasFlippingForRTLUI(false); + + // Initialize voice interaction overlay and sync the flags if active user + // session has already started. This could happen when an external monitor + // is plugged in. + if (Shell::Get()->session_controller()->IsActiveUserSessionStarted() && + chromeos::switches::IsVoiceInteractionEnabled()) { + InitializeVoiceInteractionOverlay(); + } } AppListButton::~AppListButton() { @@ -385,7 +393,7 @@ if (UseVoiceInteractionStyle()) // active: 100% alpha, inactive: 54% alpha - fg_flags.setAlpha(voice_interaction_state_ == + fg_flags.setAlpha(Shell::Get()->voice_interaction_state() == ash::VoiceInteractionState::RUNNING ? kVoiceInteractionRunningAlpha : kVoiceInteractionNotRunningAlpha); @@ -491,7 +499,6 @@ void AppListButton::OnVoiceInteractionStatusChanged( ash::VoiceInteractionState state) { - voice_interaction_state_ = state; SchedulePaint(); if (!voice_interaction_overlay_) @@ -524,40 +531,20 @@ } void AppListButton::OnVoiceInteractionEnabled(bool enabled) { - voice_interaction_settings_enabled_ = enabled; SchedulePaint(); } void AppListButton::OnVoiceInteractionSetupCompleted() { - voice_interaction_setup_completed_ = true; SchedulePaint(); } void AppListButton::OnActiveUserSessionChanged(const AccountId& account_id) { SchedulePaint(); - - // If the active user is not the primary user, app list button animation will - // be disabled. - const mojom::UserSession* const primary_user_session = - Shell::Get()->session_controller()->GetPrimaryUserSession(); - if (!primary_user_session || - account_id != primary_user_session->user_info->account_id) { - is_primary_user_active_ = false; - return; - } - - is_primary_user_active_ = true; // Initialize voice interaction overlay when primary user session becomes // active. - if (!voice_interaction_overlay_ && + if (IsUserPrimary() && !voice_interaction_overlay_ && chromeos::switches::IsVoiceInteractionEnabled()) { - voice_interaction_overlay_ = new VoiceInteractionOverlay(this); - AddChildView(voice_interaction_overlay_); - voice_interaction_overlay_->SetVisible(false); - voice_interaction_animation_delay_timer_ = - base::MakeUnique<base::OneShotTimer>(); - voice_interaction_animation_hide_delay_timer_ = - base::MakeUnique<base::OneShotTimer>(); + InitializeVoiceInteractionOverlay(); } } @@ -568,8 +555,9 @@ ShelfAlignment alignment = shelf_->alignment(); bool show_icon = (alignment == SHELF_ALIGNMENT_BOTTOM || alignment == SHELF_ALIGNMENT_BOTTOM_LOCKED) && - voice_interaction_state_ == VoiceInteractionState::STOPPED && - voice_interaction_setup_completed_; + Shell::Get()->voice_interaction_state() == + VoiceInteractionState::STOPPED && + Shell::Get()->voice_interaction_setup_completed(); voice_interaction_overlay_->StartAnimation(show_icon); } @@ -612,13 +600,29 @@ bool AppListButton::UseVoiceInteractionStyle() { if (voice_interaction_overlay_ && - chromeos::switches::IsVoiceInteractionEnabled() && - is_primary_user_active_ && - (voice_interaction_settings_enabled_ || - !voice_interaction_setup_completed_)) { + chromeos::switches::IsVoiceInteractionEnabled() && IsUserPrimary() && + (Shell::Get()->voice_interaction_settings_enabled() || + !Shell::Get()->voice_interaction_setup_completed())) { return true; } return false; } +void AppListButton::InitializeVoiceInteractionOverlay() { + voice_interaction_overlay_ = new VoiceInteractionOverlay(this); + AddChildView(voice_interaction_overlay_); + voice_interaction_overlay_->SetVisible(false); + voice_interaction_animation_delay_timer_ = + base::MakeUnique<base::OneShotTimer>(); + voice_interaction_animation_hide_delay_timer_ = + base::MakeUnique<base::OneShotTimer>(); +} + +bool AppListButton::IsUserPrimary() { + // TODO(updowndota) Switch to use SessionController::IsUserPrimary() when + // refactoring voice interaction related shell methods (crbug.com/758650). + return Shell::Get()->session_controller()->GetPrimaryUserSession() == + Shell::Get()->session_controller()->GetUserSession(0); +} + } // namespace ash
diff --git a/ash/shelf/app_list_button.h b/ash/shelf/app_list_button.h index a8c2e5c..008027b8 100644 --- a/ash/shelf/app_list_button.h +++ b/ash/shelf/app_list_button.h
@@ -99,6 +99,12 @@ // Whether the voice interaction style should be used. bool UseVoiceInteractionStyle(); + // Initialize the voice interaction overlay. + void InitializeVoiceInteractionOverlay(); + + // Whether the active user is the primary user. + bool IsUserPrimary(); + // True if the app list is currently showing for this display. // This is useful because other IsApplistVisible functions aren't per-display. bool is_showing_app_list_; @@ -116,23 +122,10 @@ std::unique_ptr<base::OneShotTimer> voice_interaction_animation_hide_delay_timer_; - ash::VoiceInteractionState voice_interaction_state_ = - ash::VoiceInteractionState::STOPPED; - // Flag that gets set each time we receive a mouse or gesture event. It is // then used to render the ink drop in the right location. bool last_event_is_back_event_ = false; - // Whether the primary user session is active. Arc is only supported in - // primary user session. - bool is_primary_user_active_ = false; - - // Whether voice interaction is enabled in system settings. - bool voice_interaction_settings_enabled_ = false; - - // Whether voice intearction setup flow has completed. - bool voice_interaction_setup_completed_ = false; - DISALLOW_COPY_AND_ASSIGN(AppListButton); };
diff --git a/ash/shelf/app_list_button_unittest.cc b/ash/shelf/app_list_button_unittest.cc index 549bbde..087add1 100644 --- a/ash/shelf/app_list_button_unittest.cc +++ b/ash/shelf/app_list_button_unittest.cc
@@ -4,6 +4,7 @@ #include "ash/shelf/app_list_button.h" +#include "ash/root_window_controller.h" #include "ash/session/session_controller.h" #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_view.h" @@ -47,6 +48,17 @@ app_list_button_->OnGestureEvent(event); } + void SendGestureEventToSecondaryDisplay(ui::GestureEvent* event) { + // Add secondary display. + UpdateDisplay("1+1-1000x600,1002+0-600x400"); + // Send the gesture event to the secondary display. + Shell::GetRootWindowControllerWithDisplayId(GetSecondaryDisplay().id()) + ->shelf() + ->GetShelfViewForTesting() + ->GetAppListButton() + ->OnGestureEvent(event); + } + const AppListButton* app_list_button() const { return app_list_button_; } protected: @@ -72,6 +84,11 @@ SendGestureEvent(&long_press); RunAllPendingInMessageLoop(); EXPECT_EQ(0u, test_app_list_presenter.voice_session_count()); + + // Test long press gesture on secondary display. + SendGestureEventToSecondaryDisplay(&long_press); + RunAllPendingInMessageLoop(); + EXPECT_EQ(0u, test_app_list_presenter.voice_session_count()); } class VoiceInteractionAppListButtonTest : public AppListButtonTest { @@ -102,6 +119,11 @@ SendGestureEvent(&long_press); RunAllPendingInMessageLoop(); EXPECT_EQ(1u, test_app_list_presenter.voice_session_count()); + + // Test long press gesture on secondary display. + SendGestureEventToSecondaryDisplay(&long_press); + RunAllPendingInMessageLoop(); + EXPECT_EQ(2u, test_app_list_presenter.voice_session_count()); } TEST_F(VoiceInteractionAppListButtonTest, LongPressGestureWithSecondaryUser) { @@ -122,6 +144,11 @@ // Voice interaction is disabled for secondary user, so the count here should // be 0. EXPECT_EQ(0u, test_app_list_presenter.voice_session_count()); + + // Test long press gesture on secondary display. + SendGestureEventToSecondaryDisplay(&long_press); + RunAllPendingInMessageLoop(); + EXPECT_EQ(0u, test_app_list_presenter.voice_session_count()); } TEST_F(VoiceInteractionAppListButtonTest, @@ -148,6 +175,11 @@ // After value prop has been accepted, if voice interaction is disalbed in // settings we should not handle long press action in app list button. EXPECT_EQ(0u, test_app_list_presenter.voice_session_count()); + + // Test long press gesture on secondary display. + SendGestureEventToSecondaryDisplay(&long_press); + RunAllPendingInMessageLoop(); + EXPECT_EQ(0u, test_app_list_presenter.voice_session_count()); } TEST_F(VoiceInteractionAppListButtonTest, @@ -172,6 +204,11 @@ // Before setup flow completed we should show the animation even if the // settings are disabled. EXPECT_EQ(1u, test_app_list_presenter.voice_session_count()); + + // Test long press gesture on secondary display. + SendGestureEventToSecondaryDisplay(&long_press); + RunAllPendingInMessageLoop(); + EXPECT_EQ(2u, test_app_list_presenter.voice_session_count()); } namespace {
diff --git a/ash/shell.cc b/ash/shell.cc index 0014507d..9140372c1 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -13,6 +13,7 @@ #include "ash/accelerators/ash_focus_manager_factory.h" #include "ash/accelerators/magnifier_key_scroller.h" #include "ash/accelerators/spoken_feedback_toggler.h" +#include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility_delegate.h" #include "ash/app_list/app_list_delegate_impl.h" #include "ash/ash_constants.h" @@ -89,6 +90,7 @@ #include "ash/system/tray/system_tray_controller.h" #include "ash/system/tray/system_tray_notifier.h" #include "ash/system/tray_caps_lock.h" +#include "ash/system/web_notification/message_center_controller.h" #include "ash/touch/ash_touch_transform_controller.h" #include "ash/tray_action/tray_action.h" #include "ash/utility/screenshot_controller.h" @@ -338,13 +340,12 @@ } // static -void Shell::RegisterProfilePrefs(PrefRegistrySimple* registry) { +void Shell::RegisterProfilePrefs(PrefRegistrySimple* registry, bool for_test) { + AccessibilityController::RegisterProfilePrefs(registry, for_test); LogoutButtonTray::RegisterProfilePrefs(registry); NightLightController::RegisterProfilePrefs(registry); ShelfController::RegisterProfilePrefs(registry); - // Request access to prefs used by ash but owned by chrome. - // See //services/preferences/README.md - TrayCapsLock::RegisterForeignPrefs(registry); + TrayCapsLock::RegisterProfilePrefs(registry, for_test); BluetoothPowerController::RegisterProfilePrefs(registry); } @@ -597,11 +598,16 @@ } void Shell::NotifyVoiceInteractionStatusChanged(VoiceInteractionState state) { + voice_interaction_state_ = state; for (auto& observer : shell_observers_) observer.OnVoiceInteractionStatusChanged(state); } void Shell::NotifyVoiceInteractionEnabled(bool enabled) { + // TODO(updowndota) Rename the methods name to be consist with the flag name + // after the methods are refactored into the voice interaction related + // cotroller (crbug.com/758650). + voice_interaction_settings_enabled_ = enabled; for (auto& observer : shell_observers_) observer.OnVoiceInteractionEnabled(enabled); } @@ -612,6 +618,7 @@ } void Shell::NotifyVoiceInteractionSetupCompleted() { + voice_interaction_setup_completed_ = true; for (auto& observer : shell_observers_) observer.OnVoiceInteractionSetupCompleted(); } @@ -647,7 +654,6 @@ window_cycle_controller_(base::MakeUnique<WindowCycleController>()), window_selector_controller_(base::MakeUnique<WindowSelectorController>()), app_list_(base::MakeUnique<app_list::AppList>()), - link_handler_model_factory_(nullptr), tray_bluetooth_helper_(base::MakeUnique<TrayBluetoothHelper>()), display_configurator_(new display::DisplayConfigurator()), native_cursor_manager_(nullptr), @@ -798,6 +804,7 @@ // These members access Shell in their destructors. wallpaper_controller_.reset(); + accessibility_controller_.reset(); accessibility_delegate_.reset(); // Balances the Install() in Initialize(). @@ -895,6 +902,7 @@ // Some delegates access ShellPort during their construction. Create them here // instead of the ShellPort constructor. accessibility_delegate_.reset(shell_delegate_->CreateAccessibilityDelegate()); + accessibility_controller_ = base::MakeUnique<AccessibilityController>(); palette_delegate_ = shell_delegate_->CreatePaletteDelegate(); toast_manager_ = base::MakeUnique<ToastManager>(); @@ -1164,6 +1172,8 @@ // is started. display_manager_->CreateMirrorWindowAsyncIfAny(); + message_center_controller_ = base::MakeUnique<MessageCenterController>(); + for (auto& observer : shell_observers_) observer.OnShellInitialized();
diff --git a/ash/shell.h b/ash/shell.h index 6af5b1b..dd4dbfde 100644 --- a/ash/shell.h +++ b/ash/shell.h
@@ -12,6 +12,7 @@ #include "ash/ash_export.h" #include "ash/metrics/user_metrics_recorder.h" #include "ash/public/cpp/shelf_types.h" +#include "ash/public/cpp/voice_interaction_state.h" #include "ash/session/session_observer.h" #include "ash/wm/system_modal_container_event_filter_delegate.h" #include "base/gtest_prod_util.h" @@ -84,6 +85,7 @@ namespace ash { class AcceleratorController; +class AccessibilityController; class AccessibilityDelegate; class AshDisplayController; class AppListDelegateImpl; @@ -111,7 +113,6 @@ class KeyboardBrightnessControlDelegate; class KeyboardUI; class LaserPointerController; -class LinkHandlerModelFactory; class LocaleNotificationController; class LockStateController; class LogoutConfirmationController; @@ -119,6 +120,7 @@ class MagnificationController; class TabletModeController; class MediaController; +class MessageCenterController; class MouseCursorEventFilter; class MruWindowTracker; class NewWindowController; @@ -259,8 +261,11 @@ static void RegisterLocalStatePrefs(PrefRegistrySimple* registry); // Registers all ash related user profile prefs to the given |registry|. - // Can be called before Shell is initialized. - static void RegisterProfilePrefs(PrefRegistrySimple* registry); + // Can be called before Shell is initialized. When |for_test| is true this + // registers foreign user profile prefs (e.g. chrome prefs) as if they are + // owned by ash. This allows test code to read the pref values. + static void RegisterProfilePrefs(PrefRegistrySimple* registry, + bool for_test = false); // Creates a default views::NonClientFrameView for use by windows in the // Ash environment. @@ -293,6 +298,9 @@ AcceleratorController* accelerator_controller() { return accelerator_controller_.get(); } + AccessibilityController* accessibility_controller() { + return accessibility_controller_.get(); + } AccessibilityDelegate* accessibility_delegate() { return accessibility_delegate_.get(); } @@ -358,13 +366,6 @@ return window_selector_controller_.get(); } OverlayEventFilter* overlay_filter() { return overlay_filter_.get(); } - LinkHandlerModelFactory* link_handler_model_factory() { - return link_handler_model_factory_; - } - void set_link_handler_model_factory( - LinkHandlerModelFactory* link_handler_model_factory) { - link_handler_model_factory_ = link_handler_model_factory; - } PowerButtonController* power_button_controller() { return power_button_controller_.get(); } @@ -612,6 +613,18 @@ void NotifyVoiceInteractionSetupCompleted(); + VoiceInteractionState voice_interaction_state() const { + return voice_interaction_state_; + } + + bool voice_interaction_settings_enabled() const { + return voice_interaction_settings_enabled_; + } + + bool voice_interaction_setup_completed() const { + return voice_interaction_setup_completed_; + } + private: FRIEND_TEST_ALL_PREFIXES(ExtendedDesktopTest, TestCursor); FRIEND_TEST_ALL_PREFIXES(WindowManagerTest, MouseEventCursors); @@ -681,6 +694,7 @@ std::unique_ptr<WindowPositioner> window_positioner_; std::unique_ptr<AcceleratorController> accelerator_controller_; + std::unique_ptr<AccessibilityController> accessibility_controller_; std::unique_ptr<AccessibilityDelegate> accessibility_delegate_; std::unique_ptr<AshDisplayController> ash_display_controller_; std::unique_ptr<BrightnessControlDelegate> brightness_control_delegate_; @@ -722,7 +736,6 @@ std::unique_ptr<app_list::AppList> app_list_; std::unique_ptr<PrefService> local_state_; std::unique_ptr<views::corewm::TooltipController> tooltip_controller_; - LinkHandlerModelFactory* link_handler_model_factory_; std::unique_ptr<PowerButtonController> power_button_controller_; std::unique_ptr<LockStateController> lock_state_controller_; std::unique_ptr<ui::UserActivityDetector> user_activity_detector_; @@ -815,6 +828,21 @@ // hide the cursor on Windows. std::unique_ptr<::wm::CursorManager> cursor_manager_; + // Cached state and flags related to voice interaction. + // TODO(updowndota) Move the cached voice interaction flags into a separate + // controller after the controller is added (crbug.com/758650). + + // Voice interaction state. The intial value should be set to STOPPED to make + // sure the burst animation could be correctly shown. + VoiceInteractionState voice_interaction_state_ = + VoiceInteractionState::STOPPED; + + // Whether voice interaction is enabled in system settings. + bool voice_interaction_settings_enabled_ = false; + + // Whether voice intearction setup flow has completed. + bool voice_interaction_setup_completed_ = false; + // For testing only: simulate that a modal window is open bool simulate_modal_window_open_for_testing_; @@ -831,6 +859,8 @@ std::unique_ptr<AppListDelegateImpl> app_list_delegate_impl_; + std::unique_ptr<MessageCenterController> message_center_controller_; + base::ObserverList<ShellObserver> shell_observers_; base::WeakPtrFactory<Shell> weak_factory_;
diff --git a/ash/shell/shell_delegate_impl.cc b/ash/shell/shell_delegate_impl.cc index f0f9807..7e26474de 100644 --- a/ash/shell/shell_delegate_impl.cc +++ b/ash/shell/shell_delegate_impl.cc
@@ -139,15 +139,14 @@ return gfx::Image(); } -bool ShellDelegateImpl::IsTouchscreenEnabledInPrefs( - bool use_local_state) const { +bool ShellDelegateImpl::GetTouchscreenEnabled( + TouchscreenEnabledSource source) const { return true; } -void ShellDelegateImpl::SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) {} - -void ShellDelegateImpl::UpdateTouchscreenStatusFromPrefs() {} +void ShellDelegateImpl::SetTouchscreenEnabled(bool enabled, + TouchscreenEnabledSource source) { +} ui::InputDeviceControllerClient* ShellDelegateImpl::GetInputDeviceControllerClient() {
diff --git a/ash/shell/shell_delegate_impl.h b/ash/shell/shell_delegate_impl.h index 7b3c2d1..2e6bd071c 100644 --- a/ash/shell/shell_delegate_impl.h +++ b/ash/shell/shell_delegate_impl.h
@@ -44,10 +44,9 @@ GPUSupport* CreateGPUSupport() override; base::string16 GetProductName() const override; gfx::Image GetDeprecatedAcceleratorImage() const override; - bool IsTouchscreenEnabledInPrefs(bool use_local_state) const override; - void SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) override; - void UpdateTouchscreenStatusFromPrefs() override; + bool GetTouchscreenEnabled(TouchscreenEnabledSource source) const override; + void SetTouchscreenEnabled(bool enabled, + TouchscreenEnabledSource source) override; ui::InputDeviceControllerClient* GetInputDeviceControllerClient() override; private:
diff --git a/ash/shell/window_type_launcher.cc b/ash/shell/window_type_launcher.cc index bc8e9f4..0b46e90 100644 --- a/ash/shell/window_type_launcher.cc +++ b/ash/shell/window_type_launcher.cc
@@ -210,8 +210,7 @@ this, base::ASCIIToUTF16("Show a web/app notification"))), show_views_examples_callback_(show_views_examples_callback) { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); SetBorder(views::CreateEmptyBorder(gfx::Insets(5))); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h index 3aae811..035e71e 100644 --- a/ash/shell_delegate.h +++ b/ash/shell_delegate.h
@@ -41,6 +41,7 @@ class NetworkingConfigDelegate; class PaletteDelegate; class WallpaperDelegate; +enum class TouchscreenEnabledSource; // Delegate of the Shell. class ASH_EXPORT ShellDelegate { @@ -113,18 +114,16 @@ virtual gfx::Image GetDeprecatedAcceleratorImage() const = 0; - // If |use_local_state| is true, returns the touchscreen status from local - // state, otherwise from user prefs. - virtual bool IsTouchscreenEnabledInPrefs(bool use_local_state) const = 0; + // Returns the current touchscreen enabled status as specified by |source|. + // Note that the actual state of the touchscreen device is automatically + // determined based on the requests of multiple sources. + virtual bool GetTouchscreenEnabled(TouchscreenEnabledSource source) const = 0; - // Sets the status of touchscreen to |enabled| in prefs. If |use_local_state|, - // pref is set in local state, otherwise in user prefs. - virtual void SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) = 0; - - // Updates the enabled/disabled status of the touchscreen from prefs. Enabled - // if both local state and user prefs are enabled, otherwise disabled. - virtual void UpdateTouchscreenStatusFromPrefs() = 0; + // Sets |source|'s requested touchscreen enabled status to |enabled|. Note + // that the actual state of the touchscreen device is automatically determined + // based on the requests of multiple sources. + virtual void SetTouchscreenEnabled(bool enabled, + TouchscreenEnabledSource source) = 0; // Toggles the status of touchpad between enabled and disabled. virtual void ToggleTouchpad() {}
diff --git a/ash/shell_test_api.cc b/ash/shell_test_api.cc index 8d77a0b..8233124 100644 --- a/ash/shell_test_api.cc +++ b/ash/shell_test_api.cc
@@ -9,6 +9,7 @@ #include "ash/palette_delegate.h" #include "ash/root_window_controller.h" #include "ash/shell.h" +#include "ash/wm/power_button_controller.h" #include "components/prefs/testing_pref_service.h" namespace ash { @@ -47,4 +48,9 @@ shell_->OnLocalStatePrefServiceInitialized(std::move(pref_service)); } +void ShellTestApi::ResetPowerButtonControllerForTest() { + shell_->power_button_controller_ = + std::make_unique<PowerButtonController>(shell_->lock_state_controller()); +} + } // namespace ash
diff --git a/ash/shell_test_api.h b/ash/shell_test_api.h index 30e5d3e..9320875 100644 --- a/ash/shell_test_api.h +++ b/ash/shell_test_api.h
@@ -40,6 +40,10 @@ void OnLocalStatePrefServiceInitialized( std::unique_ptr<PrefService> pref_service); + // Resets |shell_->power_button_controller_| to hold a new object to simulate + // Chrome starting. + void ResetPowerButtonControllerForTest(); + private: Shell* shell_; // not owned
diff --git a/ash/system/date/date_view.cc b/ash/system/date/date_view.cc index 213b25e..434e34a 100644 --- a/ash/system/date/date_view.cc +++ b/ash/system/date/date_view.cc
@@ -262,8 +262,7 @@ AddChildView(horizontal_label_.get()); } else { RemoveChildView(horizontal_label_.get()); - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); const int kColumnId = 0; views::ColumnSet* columns = layout->AddColumnSet(kColumnId); columns->AddPaddingColumn(0, kVerticalClockLeftPadding);
diff --git a/ash/system/power/power_button_display_controller.cc b/ash/system/power/power_button_display_controller.cc index 2e830cbf..5895492 100644 --- a/ash/system/power/power_button_display_controller.cc +++ b/ash/system/power/power_button_display_controller.cc
@@ -5,6 +5,7 @@ #include "ash/system/power/power_button_display_controller.h" #include "ash/accessibility_delegate.h" +#include "ash/public/cpp/touchscreen_enabled_source.h" #include "ash/shell.h" #include "ash/shell_delegate.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" @@ -151,10 +152,8 @@ void PowerButtonDisplayController::UpdateTouchscreenStatus() { const bool enable_touchscreen = !backlights_forced_off_ && (screen_state_ != ScreenState::OFF_AUTO); - ShellDelegate* delegate = Shell::Get()->shell_delegate(); - delegate->SetTouchscreenEnabledInPrefs(enable_touchscreen, - true /* use_local_state */); - delegate->UpdateTouchscreenStatusFromPrefs(); + Shell::Get()->shell_delegate()->SetTouchscreenEnabled( + enable_touchscreen, TouchscreenEnabledSource::GLOBAL); } } // namespace ash
diff --git a/ash/system/power/power_button_display_controller.h b/ash/system/power/power_button_display_controller.h index cecf589..3815c43 100644 --- a/ash/system/power/power_button_display_controller.h +++ b/ash/system/power/power_button_display_controller.h
@@ -66,8 +66,9 @@ // Initializes |backlights_forced_off_|. void OnGotInitialBacklightsForcedOff(bool is_forced_off); - // Enables or disables the touchscreen, also writing its state to a pref in - // local state. The touchscreen is disabled when backlights are forced off. + // Enables or disables the touchscreen by updating the global touchscreen + // enabled status. The touchscreen is disabled when backlights are forced off + // or |screen_state_| is OFF_AUTO. void UpdateTouchscreenStatus(); // Current screen state.
diff --git a/ash/system/power/power_event_observer_unittest.cc b/ash/system/power/power_event_observer_unittest.cc index 4068232..efb37e7 100644 --- a/ash/system/power/power_event_observer_unittest.cc +++ b/ash/system/power/power_event_observer_unittest.cc
@@ -171,30 +171,49 @@ EXPECT_EQ(0, GetNumVisibleCompositors()); } -// Tests that for suspend imminent induced locking screen, the animation type -// for hiding non lock screen containers are immediate (crbug.com/751908). -TEST_F(PowerEventObserverTest, NonLockScreenContainersHideAnimation) { +// Tests that for suspend imminent induced locking screen, locking animations +// are immediate. +TEST_F(PowerEventObserverTest, ImmediateLockAnimations) { TestSessionStateAnimator* test_animator = new TestSessionStateAnimator; LockStateController* lock_state_controller = Shell::Get()->lock_state_controller(); lock_state_controller->set_animator_for_test(test_animator); - std::unique_ptr<LockStateControllerTestApi> lock_state_test_api = - base::MakeUnique<LockStateControllerTestApi>(lock_state_controller); + LockStateControllerTestApi lock_state_test_api(lock_state_controller); SetCanLockScreen(true); SetShouldLockScreenAutomatically(true); ASSERT_FALSE(GetLockedState()); observer_->SuspendImminent(); - EXPECT_TRUE(test_animator->AreContainersAnimated( - SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, - SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY)); - EXPECT_TRUE(lock_state_test_api->is_animating_lock()); + // Tests that locking animation starts. + EXPECT_TRUE(lock_state_test_api.is_animating_lock()); - EXPECT_TRUE(GetLockedState()); - // Advance post lock animation to check animating lock gets reset. + // Tests that we have two active animation containers for pre-lock animation, + // which are non lock screen containers and shelf container. + EXPECT_EQ(2u, test_animator->GetAnimationCount()); + test_animator->AreContainersAnimated( + LockStateController::kPreLockContainersMask, + SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY); + // Tests that after finishing immediate animation, we have no active + // animations left. test_animator->Advance(test_animator->GetDuration( - SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS)); - EXPECT_FALSE(lock_state_test_api->is_animating_lock()); + SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE)); + EXPECT_EQ(0u, test_animator->GetAnimationCount()); + + // Flushes locking screen async request to start post-lock animation. + EXPECT_TRUE(GetLockedState()); + EXPECT_TRUE(lock_state_test_api.is_animating_lock()); + // Tests that we have one active animation container for post-lock animation, + // which is lock screen containers. + EXPECT_EQ(1u, test_animator->GetAnimationCount()); + test_animator->AreContainersAnimated( + SessionStateAnimator::LOCK_SCREEN_CONTAINERS, + SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN); + // Tests that after finishing immediate animation, we have no active + // animations left. Also checks that animation ends. + test_animator->Advance(test_animator->GetDuration( + SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE)); + EXPECT_EQ(0u, test_animator->GetAnimationCount()); + EXPECT_FALSE(lock_state_test_api.is_animating_lock()); } } // namespace ash
diff --git a/ash/system/power/tablet_power_button_controller.cc b/ash/system/power/tablet_power_button_controller.cc index 9331a82..7a44d7f 100644 --- a/ash/system/power/tablet_power_button_controller.cc +++ b/ash/system/power/tablet_power_button_controller.cc
@@ -122,10 +122,11 @@ } TabletPowerButtonController::TabletPowerButtonController( - LockStateController* controller) - : display_controller_(base::MakeUnique<PowerButtonDisplayController>()), - tick_clock_(new base::DefaultTickClock()), + LockStateController* controller, + PowerButtonDisplayController* display_controller) + : tick_clock_(new base::DefaultTickClock()), controller_(controller), + display_controller_(display_controller), accelerometer_scoped_observer_(this) { chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( this);
diff --git a/ash/system/power/tablet_power_button_controller.h b/ash/system/power/tablet_power_button_controller.h index 366cdc3..8bd1a5b1bb 100644 --- a/ash/system/power/tablet_power_button_controller.h +++ b/ash/system/power/tablet_power_button_controller.h
@@ -73,7 +73,8 @@ // Public for tests. static constexpr float kGravity = 9.80665f; - explicit TabletPowerButtonController(LockStateController* controller); + TabletPowerButtonController(LockStateController* controller, + PowerButtonDisplayController* display_controller); ~TabletPowerButtonController() override; // Returns true if power button events should be handled by this class instead @@ -118,9 +119,6 @@ // and locking is possible. void LockScreenIfRequired(); - // Used to interact with the display. - std::unique_ptr<PowerButtonDisplayController> display_controller_; - // True if the screen was off when the power button was pressed. bool screen_off_when_power_button_down_ = false; @@ -148,6 +146,9 @@ LockStateController* controller_; // Not owned. + // Used to interact with the display. + PowerButtonDisplayController* display_controller_; // Not owned. + ScopedObserver<chromeos::AccelerometerReader, TabletPowerButtonController> accelerometer_scoped_observer_;
diff --git a/ash/system/power/tablet_power_button_controller_unittest.cc b/ash/system/power/tablet_power_button_controller_unittest.cc index 9d34486..d385174ac 100644 --- a/ash/system/power/tablet_power_button_controller_unittest.cc +++ b/ash/system/power/tablet_power_button_controller_unittest.cc
@@ -8,9 +8,11 @@ #include "ash/ash_switches.h" #include "ash/public/cpp/config.h" +#include "ash/public/cpp/touchscreen_enabled_source.h" #include "ash/session/session_controller.h" #include "ash/session/test_session_controller_client.h" #include "ash/shell.h" +#include "ash/shell_test_api.h" #include "ash/test/ash_test_base.h" #include "ash/test_shell_delegate.h" #include "ash/wm/lock_state_controller.h" @@ -99,13 +101,12 @@ } protected: - // Resets the TabletPowerButtonController and associated members. - void ResetTabletPowerButtonController() { + // Resets the PowerButtonController and associated members. + void ResetPowerButtonController() { test_api_ = nullptr; tablet_controller_ = nullptr; - Shell::Get() - ->power_button_controller() - ->ResetTabletPowerButtonControllerForTest(); + ShellTestApi shell_test_api; + shell_test_api.ResetPowerButtonControllerForTest(); } // Sends an update with screen and keyboard accelerometer readings to @@ -169,6 +170,11 @@ return forced_off; } + bool GetGlobalTouchscreenEnabled() const { + return shell_delegate_->GetTouchscreenEnabled( + TouchscreenEnabledSource::GLOBAL); + } + // Ownership is passed on to chromeos::DBusThreadManager. chromeos::FakePowerManagerClient* power_manager_client_ = nullptr; @@ -410,19 +416,19 @@ // Tests that under (1) tablet power button pressed/released, (2) keyboard/mouse // events on laptop mode when screen is off, requesting/stopping backlights -// forced off should also set corresponding touchscreen state in local pref. +// forced off should update the global touchscreen enabled status. TEST_F(TabletPowerButtonControllerTest, DisableTouchscreenWhileForcedOff) { // Tests tablet power button. - ASSERT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + ASSERT_TRUE(GetGlobalTouchscreenEnabled()); PressPowerButton(); ReleasePowerButton(); power_manager_client_->SendBrightnessChanged(0, false); - EXPECT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_FALSE(GetGlobalTouchscreenEnabled()); PressPowerButton(); power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); ReleasePowerButton(); - EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_TRUE(GetGlobalTouchscreenEnabled()); EnableTabletMode(false); // KeyEvent on laptop mode when screen is off. @@ -430,37 +436,37 @@ ReleasePowerButton(); power_manager_client_->SendBrightnessChanged(0, false); ASSERT_TRUE(GetBacklightsForcedOff()); - ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + ASSERT_FALSE(GetGlobalTouchscreenEnabled()); generator_->PressKey(ui::VKEY_L, ui::EF_NONE); power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); - EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_TRUE(GetGlobalTouchscreenEnabled()); // MouseEvent on laptop mode when screen is off. PressPowerButton(); ReleasePowerButton(); power_manager_client_->SendBrightnessChanged(0, false); ASSERT_TRUE(GetBacklightsForcedOff()); - ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + ASSERT_FALSE(GetGlobalTouchscreenEnabled()); generator_->MoveMouseBy(1, 1); power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, false); - EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_TRUE(GetGlobalTouchscreenEnabled()); } // When the screen is turned off automatically, the touchscreen should also be // disabled. TEST_F(TabletPowerButtonControllerTest, DisableTouchscreenForInactivity) { - ASSERT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + ASSERT_TRUE(GetGlobalTouchscreenEnabled()); // Turn screen off for automated change (e.g. user is inactive). power_manager_client_->SendBrightnessChanged(0, false); - EXPECT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_FALSE(GetGlobalTouchscreenEnabled()); power_manager_client_->SendBrightnessChanged(kNonZeroBrightness, true); - EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_TRUE(GetGlobalTouchscreenEnabled()); // After decreasing the brightness to zero for a user request, the touchscreen // should remain enabled. power_manager_client_->SendBrightnessChanged(0, true); - EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_TRUE(GetGlobalTouchscreenEnabled()); } // When user switches convertible device between laptop mode and tablet mode, @@ -570,30 +576,30 @@ EXPECT_FALSE(GetBacklightsForcedOff()); } -// Tests that with system reboot, the local state of touchscreen enabled state -// should be synced with new backlights forced off state from powerd. -TEST_F(TabletPowerButtonControllerTest, SyncTouchscreenStatus) { - shell_delegate_->SetTouchscreenEnabledInPrefs(false, - true /* use_local_state */); - ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); +// Tests that with system reboot, the global touchscreen enabled status should +// be synced with new backlights forced off state from powerd. +TEST_F(TabletPowerButtonControllerTest, SyncTouchscreenEnabled) { + shell_delegate_->SetTouchscreenEnabled(false, + TouchscreenEnabledSource::GLOBAL); + ASSERT_FALSE(GetGlobalTouchscreenEnabled()); // Simulate system reboot by resetting backlights forced off state in powerd - // and TabletPowerButtonController. + // and PowerButtonController. power_manager_client_->SetBacklightsForcedOff(false); - ResetTabletPowerButtonController(); + ResetPowerButtonController(); SendAccelerometerUpdate(kSidewaysVector, kSidewaysVector); - // Check that the local state of touchscreen enabled state is in line with - // backlights forced off state. + // Check that the global touchscreen status is in line with backlights forced + // off state. EXPECT_FALSE(GetBacklightsForcedOff()); - EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_TRUE(GetGlobalTouchscreenEnabled()); } // Tests that tablet power button behavior is enabled on having seen // accelerometer update, otherwise it is disabled. TEST_F(TabletPowerButtonControllerTest, EnableOnAccelerometerUpdate) { ASSERT_TRUE(tablet_controller_); - ResetTabletPowerButtonController(); + ResetPowerButtonController(); EXPECT_FALSE(Shell::Get() ->power_button_controller() ->tablet_power_button_controller_for_test()); @@ -608,7 +614,7 @@ // accelerometer events. base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kForceClamshellPowerButton); - ResetTabletPowerButtonController(); + ResetPowerButtonController(); SendAccelerometerUpdate(kSidewaysVector, kSidewaysVector); EXPECT_FALSE(Shell::Get() ->power_button_controller() @@ -719,9 +725,9 @@ EXPECT_FALSE(GetBacklightsForcedOff()); } -// Tests that for tablet power button, the animation type for hiding non lock -// screen containers are immediate (crbug.com/746657). -TEST_F(TabletPowerButtonControllerTest, NonLockScreenContainersHideAnimation) { +// Tests that for tablet power button induced locking screen, locking animations +// are immediate. +TEST_F(TabletPowerButtonControllerTest, ImmediateLockAnimations) { TestSessionStateAnimator* test_animator = new TestSessionStateAnimator; lock_state_controller_->set_animator_for_test(test_animator); Initialize(LoginStatus::USER); @@ -730,30 +736,58 @@ PressPowerButton(); ReleasePowerButton(); - EXPECT_TRUE(test_animator->AreContainersAnimated( - SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, - SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY)); + // Tests that locking animation starts. EXPECT_TRUE(lock_state_test_api_->is_animating_lock()); - EXPECT_TRUE(GetLockedState()); - // Advance post lock animation to check animating lock gets reset. + // Tests that we have two active animation containers for pre-lock animation, + // which are non lock screen containers and shelf container. + EXPECT_EQ(2u, test_animator->GetAnimationCount()); + test_animator->AreContainersAnimated( + LockStateController::kPreLockContainersMask, + SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY); + // Tests that after finishing immediate animation, we have no active + // animations left. test_animator->Advance(test_animator->GetDuration( - SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS)); + SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE)); + EXPECT_EQ(0u, test_animator->GetAnimationCount()); + + // Flushes locking screen async request to start post-lock animation. + EXPECT_TRUE(GetLockedState()); + EXPECT_TRUE(lock_state_test_api_->is_animating_lock()); + // Tests that we have one active animation container for post-lock animation, + // which is lock screen containers. + EXPECT_EQ(1u, test_animator->GetAnimationCount()); + test_animator->AreContainersAnimated( + SessionStateAnimator::LOCK_SCREEN_CONTAINERS, + SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN); + // Tests that after finishing immediate animation, we have no active + // animations left. Also checks that animation ends. + test_animator->Advance(test_animator->GetDuration( + SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE)); + EXPECT_EQ(0u, test_animator->GetAnimationCount()); EXPECT_FALSE(lock_state_test_api_->is_animating_lock()); } // Tests that updating power button behavior from tablet behavior to clamshell -// behavior will initially enable the local state of touchscreen. -TEST_F(TabletPowerButtonControllerTest, TouchscreenStatusClamshell) { - shell_delegate_->SetTouchscreenEnabledInPrefs(false, - true /* use_local_state */); - ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); +// behavior will initially enable touchscreen on global touchscreen enabled +// status (b/64972736). +TEST_F(TabletPowerButtonControllerTest, TouchscreenEnabledClamshell) { + PressPowerButton(); + ReleasePowerButton(); + ASSERT_TRUE(GetBacklightsForcedOff()); + ASSERT_FALSE(GetGlobalTouchscreenEnabled()); + // Simulates a system reboot with |kForceClamshellPowerButton| requested by + // flag, resetting backlights forced off state in powerd and + // PowerButtonController. + power_manager_client_->SetBacklightsForcedOff(false); base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kForceClamshellPowerButton); - ResetTabletPowerButtonController(); + ResetPowerButtonController(); + // Spins a run loop for async GetBacklightsForcedOff call. + base::RunLoop().RunUntilIdle(); SendAccelerometerUpdate(kSidewaysVector, kSidewaysVector); - EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + EXPECT_TRUE(GetGlobalTouchscreenEnabled()); } } // namespace ash
diff --git a/ash/system/screen_layout_observer.cc b/ash/system/screen_layout_observer.cc index 10e43753..f25b2c445 100644 --- a/ash/system/screen_layout_observer.cc +++ b/ash/system/screen_layout_observer.cc
@@ -12,6 +12,7 @@ #include "ash/metrics/user_metrics_action.h" #include "ash/metrics/user_metrics_recorder.h" #include "ash/resources/grit/ash_resources.h" +#include "ash/resources/vector_icons/vector_icons.h" #include "ash/session/session_controller.h" #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" @@ -334,16 +335,21 @@ } ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); - std::unique_ptr<Notification> notification(new Notification( - message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId, message, - additional_message, bundle.GetImageNamed(IDR_AURA_NOTIFICATION_DISPLAY), - base::string16(), // display_source - GURL(), - message_center::NotifierId(message_center::NotifierId::SYSTEM_COMPONENT, - system_notifier::kNotifierDisplay), - message_center::RichNotificationData(), - new message_center::HandleNotificationClickedDelegate( - base::Bind(&OpenSettingsFromNotification)))); + std::unique_ptr<Notification> notification = + system_notifier::CreateSystemNotification( + message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId, message, + additional_message, + bundle.GetImageNamed(IDR_AURA_NOTIFICATION_DISPLAY), + base::string16(), // display_source + GURL(), + message_center::NotifierId( + message_center::NotifierId::SYSTEM_COMPONENT, + system_notifier::kNotifierDisplay), + message_center::RichNotificationData(), + new message_center::HandleNotificationClickedDelegate( + base::Bind(&OpenSettingsFromNotification)), + kNotificationScreenIcon, + message_center::SystemNotificationWarningLevel::NORMAL); Shell::Get()->metrics()->RecordUserMetricsAction( UMA_STATUS_AREA_DISPLAY_NOTIFICATION_CREATED);
diff --git a/ash/system/screen_layout_observer_unittest.cc b/ash/system/screen_layout_observer_unittest.cc index 769ec11..dbda893 100644 --- a/ash/system/screen_layout_observer_unittest.cc +++ b/ash/system/screen_layout_observer_unittest.cc
@@ -7,6 +7,7 @@ #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" #include "ash/system/tray/system_tray.h" +#include "ash/system/web_notification/web_notification_tray.h" #include "ash/test/ash_test_base.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "base/strings/string16.h" @@ -31,6 +32,16 @@ ~ScreenLayoutObserverTest() override; protected: + void SetUp() override { + AshTestBase::SetUp(); + WebNotificationTray::DisableAnimationsForTest(true); + } + + void TearDown() override { + WebNotificationTray::DisableAnimationsForTest(false); + AshTestBase::TearDown(); + } + ScreenLayoutObserver* GetScreenLayoutObserver(); void CheckUpdate();
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc index 3c44e5f..ab5e6056f 100644 --- a/ash/system/status_area_widget_delegate.cc +++ b/ash/system/status_area_widget_delegate.cc
@@ -139,8 +139,7 @@ void StatusAreaWidgetDelegate::UpdateLayout() { // Use a grid layout so that the trays can be centered in each cell, and // so that the widget gets laid out correctly when tray sizes change. - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // Update tray border based on layout. bool is_child_on_edge = true;
diff --git a/ash/system/tray_accessibility.cc b/ash/system/tray_accessibility.cc index 613b73d3..1740a3a 100644 --- a/ash/system/tray_accessibility.cc +++ b/ash/system/tray_accessibility.cc
@@ -7,6 +7,7 @@ #include <memory> #include <utility> +#include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility_delegate.h" #include "ash/accessibility_types.h" #include "ash/ash_view_ids.h" @@ -57,6 +58,8 @@ uint32_t GetAccessibilityState() { AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); + AccessibilityController* controller = + Shell::Get()->accessibility_controller(); uint32_t state = A11Y_NONE; if (delegate->IsSpokenFeedbackEnabled()) state |= A11Y_SPOKEN_FEEDBACK; @@ -64,7 +67,7 @@ state |= A11Y_HIGH_CONTRAST; if (delegate->IsMagnifierEnabled()) state |= A11Y_SCREEN_MAGNIFIER; - if (delegate->IsLargeCursorEnabled()) + if (controller->IsLargeCursorEnabled()) state |= A11Y_LARGE_CURSOR; if (delegate->IsAutoclickEnabled()) state |= A11Y_AUTOCLICK; @@ -151,6 +154,8 @@ CreateScrollableList(); AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); + AccessibilityController* controller = + Shell::Get()->accessibility_controller(); spoken_feedback_enabled_ = delegate->IsSpokenFeedbackEnabled(); spoken_feedback_view_ = AddScrollListCheckableItem( @@ -191,7 +196,7 @@ AddScrollListSubHeader(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_ADDITIONAL_SETTINGS); - large_cursor_enabled_ = delegate->IsLargeCursorEnabled(); + large_cursor_enabled_ = controller->IsLargeCursorEnabled(); large_cursor_view_ = AddScrollListCheckableItem( l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_LARGE_CURSOR), large_cursor_enabled_); @@ -236,6 +241,8 @@ void AccessibilityDetailedView::HandleViewClicked(views::View* view) { AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); + AccessibilityController* controller = + Shell::Get()->accessibility_controller(); using base::RecordAction; using base::UserMetricsAction; if (view == spoken_feedback_view_) { @@ -254,10 +261,11 @@ : UserMetricsAction("StatusArea_MagnifierEnabled")); delegate->SetMagnifierEnabled(!delegate->IsMagnifierEnabled()); } else if (large_cursor_view_ && view == large_cursor_view_) { - RecordAction(delegate->IsLargeCursorEnabled() - ? UserMetricsAction("StatusArea_LargeCursorDisabled") - : UserMetricsAction("StatusArea_LargeCursorEnabled")); - delegate->SetLargeCursorEnabled(!delegate->IsLargeCursorEnabled()); + bool new_state = !controller->IsLargeCursorEnabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_LargeCursorEnabled") + : UserMetricsAction("StatusArea_LargeCursorDisabled")); + controller->SetLargeCursorEnabled(new_state); } else if (autoclick_view_ && view == autoclick_view_) { RecordAction(delegate->IsAutoclickEnabled() ? UserMetricsAction("StatusArea_AutoClickDisabled")
diff --git a/ash/system/tray_accessibility.h b/ash/system/tray_accessibility.h index cb493644..9ab7164 100644 --- a/ash/system/tray_accessibility.h +++ b/ash/system/tray_accessibility.h
@@ -38,6 +38,8 @@ ~AccessibilityDetailedView() override {} private: + friend class chromeos::TrayAccessibilityTest; + // TrayDetailsView: void HandleViewClicked(views::View* view) override; void HandleButtonPressed(views::Button* sender, @@ -68,6 +70,7 @@ views::View* sticky_keys_view_ = nullptr; views::View* tap_dragging_view_ = nullptr; + // These exist for tests. The canonical state is stored in prefs. bool spoken_feedback_enabled_ = false; bool high_contrast_enabled_ = false; bool screen_magnifier_enabled_ = false; @@ -80,9 +83,9 @@ bool highlight_keyboard_focus_enabled_ = false; bool sticky_keys_enabled_ = false; bool tap_dragging_enabled_ = false; + LoginStatus login_; - friend class chromeos::TrayAccessibilityTest; DISALLOW_COPY_AND_ASSIGN(AccessibilityDetailedView); }; @@ -94,6 +97,8 @@ ~TrayAccessibility() override; private: + friend class chromeos::TrayAccessibilityTest; + void SetTrayIconVisible(bool visible); tray::AccessibilityDetailedView* CreateDetailedMenu(); @@ -121,7 +126,6 @@ // A11y feature status on just entering the lock screen. bool show_a11y_menu_on_lock_screen_; - friend class chromeos::TrayAccessibilityTest; DISALLOW_COPY_AND_ASSIGN(TrayAccessibility); };
diff --git a/ash/system/tray_accessibility_unittest.cc b/ash/system/tray_accessibility_unittest.cc new file mode 100644 index 0000000..26f1347 --- /dev/null +++ b/ash/system/tray_accessibility_unittest.cc
@@ -0,0 +1,70 @@ +// 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 "ash/system/tray_accessibility.h" + +#include "ash/accessibility/accessibility_controller.h" +#include "ash/public/cpp/ash_pref_names.h" +#include "ash/session/session_controller.h" +#include "ash/shell.h" +#include "ash/system/tray/system_tray.h" +#include "ash/system/tray/system_tray_notifier.h" +#include "ash/system/tray/system_tray_test_api.h" +#include "ash/test/ash_test_base.h" +#include "components/prefs/pref_service.h" + +namespace ash { +namespace { + +// Simulates changing the large cursor setting via menu. +void SetLargeCursorEnabledFromMenu(bool enabled) { + Shell::Get()->accessibility_controller()->SetLargeCursorEnabled(enabled); +} + +// Simulates changing the large cursor setting via webui settings. +void SetLargeCursorEnabledFromSettings(bool enabled) { + Shell::Get() + ->session_controller() + ->GetLastActiveUserPrefService() + ->SetBoolean(prefs::kAccessibilityLargeCursorEnabled, enabled); +} + +using TrayAccessibilityTest = AshTestBase; + +// Tests that the icon becomes visible when the tray menu toggles a feature. +TEST_F(TrayAccessibilityTest, VisibilityFromMenu) { + SystemTray* tray = GetPrimarySystemTray(); + TrayAccessibility* tray_item = SystemTrayTestApi(tray).tray_accessibility(); + + // By default the icon isn't visible. + EXPECT_FALSE(tray_item->tray_view()->visible()); + + // Turning on an accessibility feature shows the icon. + SetLargeCursorEnabledFromMenu(true); + EXPECT_TRUE(tray_item->tray_view()->visible()); + + // Turning off all accessibility features hides the icon. + SetLargeCursorEnabledFromMenu(false); + EXPECT_FALSE(tray_item->tray_view()->visible()); +} + +// Tests that the icon becomes visible when webui settings toggles a feature. +TEST_F(TrayAccessibilityTest, VisibilityFromSettings) { + SystemTray* tray = GetPrimarySystemTray(); + TrayAccessibility* tray_item = SystemTrayTestApi(tray).tray_accessibility(); + + // By default the icon isn't visible. + EXPECT_FALSE(tray_item->tray_view()->visible()); + + // Turning on an accessibility pref shows the icon. + SetLargeCursorEnabledFromSettings(true); + EXPECT_TRUE(tray_item->tray_view()->visible()); + + // Turning off all accessibility prefs hides the icon. + SetLargeCursorEnabledFromSettings(false); + EXPECT_FALSE(tray_item->tray_view()->visible()); +} + +} // namespace +} // namespace ash
diff --git a/ash/system/tray_caps_lock.cc b/ash/system/tray_caps_lock.cc index c696a7d..9ff6865 100644 --- a/ash/system/tray_caps_lock.cc +++ b/ash/system/tray_caps_lock.cc
@@ -58,11 +58,6 @@ if (!prefs) return false; - // This pref value is not registered in tests. - // TODO(crbug/760406): register this pref in tests and remove this check. - if (!prefs->FindPreference(prefs::kLanguageRemapSearchKeyTo)) - return false; - // Don't bother to observe for the pref changing because the system tray // menu is rebuilt every time it is opened and the user has to close the // menu to open settings to change the pref. It's not worth the complexity @@ -207,7 +202,14 @@ } // static -void TrayCapsLock::RegisterForeignPrefs(PrefRegistrySimple* registry) { +void TrayCapsLock::RegisterProfilePrefs(PrefRegistrySimple* registry, + bool for_test) { + if (for_test) { + // There is no remote pref service, so pretend that ash owns the pref. + registry->RegisterIntegerPref(prefs::kLanguageRemapSearchKeyTo, + chromeos::input_method::kSearchKey); + return; + } // Pref is owned by chrome and flagged as PUBLIC. registry->RegisterForeignPref(prefs::kLanguageRemapSearchKeyTo); }
diff --git a/ash/system/tray_caps_lock.h b/ash/system/tray_caps_lock.h index 939039652..4e06675 100644 --- a/ash/system/tray_caps_lock.h +++ b/ash/system/tray_caps_lock.h
@@ -24,7 +24,8 @@ explicit TrayCapsLock(SystemTray* system_tray); ~TrayCapsLock() override; - static void RegisterForeignPrefs(PrefRegistrySimple* registry); + // See Shell::RegisterProfilePrefs(). + static void RegisterProfilePrefs(PrefRegistrySimple* registry, bool for_test); // Overridden from ImeController::Observer: void OnCapsLockChanged(bool enabled) override;
diff --git a/ash/system/tray_caps_lock_unittest.cc b/ash/system/tray_caps_lock_unittest.cc index 8e91510..7c998ac 100644 --- a/ash/system/tray_caps_lock_unittest.cc +++ b/ash/system/tray_caps_lock_unittest.cc
@@ -4,15 +4,9 @@ #include "ash/system/tray_caps_lock.h" -#include "ash/session/session_controller.h" -#include "ash/shell.h" #include "ash/system/tray/system_tray.h" #include "ash/system/tray/system_tray_test_api.h" #include "ash/test/ash_test_base.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/pref_service.h" -#include "ui/base/ime/chromeos/ime_keyboard.h" -#include "ui/chromeos/events/pref_names.h" namespace ash { namespace { @@ -21,17 +15,6 @@ // Tests that the icon becomes visible when the tray controller toggles it. TEST_F(TrayCapsLockTest, Visibility) { - // prefs::kLanguageRemapSearchKeyTo is owned by chrome and shared with ash - // when it connects. In unit tests, a TestingPrefServiceSimple is used - // instead so only ash-owned prefs are registered by default. Manually - // register prefs::kLanguageRemapSearchKeyTo so TrayCapsLock can be tested. - static_cast<PrefRegistrySimple*>(Shell::Get() - ->session_controller() - ->GetLastActiveUserPrefService() - ->DeprecatedGetPrefRegistry()) - ->RegisterIntegerPref(prefs::kLanguageRemapSearchKeyTo, - chromeos::input_method::kSearchKey); - SystemTray* tray = GetPrimarySystemTray(); TrayCapsLock* caps_lock = SystemTrayTestApi(tray).tray_caps_lock();
diff --git a/chrome/browser/notifications/login_state_notification_blocker_chromeos.cc b/ash/system/web_notification/login_state_notification_blocker.cc similarity index 71% rename from chrome/browser/notifications/login_state_notification_blocker_chromeos.cc rename to ash/system/web_notification/login_state_notification_blocker.cc index fa5aaa6..a3e607c 100644 --- a/chrome/browser/notifications/login_state_notification_blocker_chromeos.cc +++ b/ash/system/web_notification/login_state_notification_blocker.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/notifications/login_state_notification_blocker_chromeos.h" +#include "ash/system/web_notification/login_state_notification_blocker.h" #include "ash/system/system_notifier.h" #include "components/session_manager/core/session_manager.h" @@ -11,7 +11,9 @@ using session_manager::SessionManager; using session_manager::SessionState; -LoginStateNotificationBlockerChromeOS::LoginStateNotificationBlockerChromeOS( +namespace ash { + +LoginStateNotificationBlocker::LoginStateNotificationBlocker( message_center::MessageCenter* message_center) : NotificationBlocker(message_center) { // SessionManager may not exist in some tests. @@ -19,13 +21,12 @@ SessionManager::Get()->AddObserver(this); } -LoginStateNotificationBlockerChromeOS:: - ~LoginStateNotificationBlockerChromeOS() { +LoginStateNotificationBlocker::~LoginStateNotificationBlocker() { if (SessionManager::Get()) SessionManager::Get()->RemoveObserver(this); } -bool LoginStateNotificationBlockerChromeOS::ShouldShowNotificationAsPopup( +bool LoginStateNotificationBlocker::ShouldShowNotificationAsPopup( const message_center::Notification& notification) const { if (ash::system_notifier::ShouldAlwaysShowPopups(notification.notifier_id())) return true; @@ -36,6 +37,8 @@ return true; } -void LoginStateNotificationBlockerChromeOS::OnSessionStateChanged() { +void LoginStateNotificationBlocker::OnSessionStateChanged() { NotifyBlockingStateChanged(); } + +} // namespace ash
diff --git a/ash/system/web_notification/login_state_notification_blocker.h b/ash/system/web_notification/login_state_notification_blocker.h new file mode 100644 index 0000000..b837e68f --- /dev/null +++ b/ash/system/web_notification/login_state_notification_blocker.h
@@ -0,0 +1,39 @@ +// Copyright 2013 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_SYSTEM_WEB_NOTIFICATION_LOGIN_STATE_NOTIFICATION_BLOCKER_H_ +#define ASH_SYSTEM_WEB_NOTIFICATION_LOGIN_STATE_NOTIFICATION_BLOCKER_H_ + +#include "ash/ash_export.h" +#include "base/macros.h" +#include "components/session_manager/core/session_manager_observer.h" +#include "ui/message_center/notification_blocker.h" + +namespace ash { + +// A notification blocker which suppresses notifications popups based on the +// login state reported by the SessionManager. Only active (logged in, unlocked) +// sessions will show popups. +class ASH_EXPORT LoginStateNotificationBlocker + : public message_center::NotificationBlocker, + public session_manager::SessionManagerObserver { + public: + explicit LoginStateNotificationBlocker( + message_center::MessageCenter* message_center); + ~LoginStateNotificationBlocker() override; + + private: + // message_center::NotificationBlocker overrides: + bool ShouldShowNotificationAsPopup( + const message_center::Notification& notification) const override; + + // session_manager::SessionManagerObserver overrides: + void OnSessionStateChanged() override; + + DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlocker); +}; + +} // namespace ash + +#endif // ASH_SYSTEM_WEB_NOTIFICATION_LOGIN_STATE_NOTIFICATION_BLOCKER_H_
diff --git a/chrome/browser/notifications/login_state_notification_blocker_chromeos_unittest.cc b/ash/system/web_notification/login_state_notification_blocker_unittest.cc similarity index 80% rename from chrome/browser/notifications/login_state_notification_blocker_chromeos_unittest.cc rename to ash/system/web_notification/login_state_notification_blocker_unittest.cc index 0ec35a5a..4f6cc5d1 100644 --- a/chrome/browser/notifications/login_state_notification_blocker_chromeos_unittest.cc +++ b/ash/system/web_notification/login_state_notification_blocker_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 "chrome/browser/notifications/login_state_notification_blocker_chromeos.h" +#include "ash/system/web_notification/login_state_notification_blocker.h" #include <memory> @@ -20,21 +20,24 @@ using session_manager::SessionManager; using session_manager::SessionState; -class LoginStateNotificationBlockerChromeOSTest - : public ash::AshTestBase, +namespace ash { + +namespace { + +class LoginStateNotificationBlockerTest + : public AshTestBase, public message_center::NotificationBlocker::Observer { public: - LoginStateNotificationBlockerChromeOSTest() - : state_changed_count_(0) {} - ~LoginStateNotificationBlockerChromeOSTest() override {} + LoginStateNotificationBlockerTest() {} + ~LoginStateNotificationBlockerTest() override {} - // ash::tests::AshTestBase overrides: + // tests::AshTestBase overrides: void SetUp() override { session_manager_ = base::MakeUnique<SessionManager>(); session_manager_->SetSessionState(SessionState::LOGIN_PRIMARY); - ash::AshTestBase::SetUp(); - blocker_.reset(new LoginStateNotificationBlockerChromeOS( + AshTestBase::SetUp(); + blocker_.reset(new LoginStateNotificationBlocker( message_center::MessageCenter::Get())); blocker_->AddObserver(this); } @@ -42,7 +45,7 @@ void TearDown() override { blocker_->RemoveObserver(this); blocker_.reset(); - ash::AshTestBase::TearDown(); + AshTestBase::TearDown(); } // message_center::NotificationBlocker::Observer overrides: @@ -62,8 +65,8 @@ message_center::Notification notification( message_center::NOTIFICATION_TYPE_SIMPLE, "chromeos-id", UTF8ToUTF16("chromeos-title"), UTF8ToUTF16("chromeos-message"), - gfx::Image(), UTF8ToUTF16("chromeos-source"), GURL(), - notifier_id, message_center::RichNotificationData(), NULL); + gfx::Image(), UTF8ToUTF16("chromeos-source"), GURL(), notifier_id, + message_center::RichNotificationData(), NULL); return blocker_->ShouldShowNotificationAsPopup(notification); } @@ -73,14 +76,14 @@ } private: - int state_changed_count_; + int state_changed_count_ = 0; std::unique_ptr<message_center::NotificationBlocker> blocker_; std::unique_ptr<session_manager::SessionManager> session_manager_; - DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerChromeOSTest); + DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerTest); }; -TEST_F(LoginStateNotificationBlockerChromeOSTest, BaseTest) { +TEST_F(LoginStateNotificationBlockerTest, BaseTest) { // Default status: OOBE. message_center::NotifierId notifier_id( message_center::NotifierId::APPLICATION, "test-notifier"); @@ -107,11 +110,11 @@ EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id)); } -TEST_F(LoginStateNotificationBlockerChromeOSTest, AlwaysAllowedNotifier) { +TEST_F(LoginStateNotificationBlockerTest, AlwaysAllowedNotifier) { // NOTIFIER_DISPLAY is allowed to shown in the login screen. message_center::NotifierId notifier_id( message_center::NotifierId::SYSTEM_COMPONENT, - ash::system_notifier::kNotifierDisplay); + system_notifier::kNotifierDisplay); // Default status: OOBE. EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id)); @@ -136,3 +139,6 @@ EXPECT_EQ(1, GetStateChangedCountAndReset()); EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id)); } + +} // namespace +} // namespace ash
diff --git a/ash/system/web_notification/message_center_controller.cc b/ash/system/web_notification/message_center_controller.cc new file mode 100644 index 0000000..fa11a0a --- /dev/null +++ b/ash/system/web_notification/message_center_controller.cc
@@ -0,0 +1,16 @@ +// 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 "ash/system/web_notification/message_center_controller.h" + +#include "ui/message_center/message_center.h" + +namespace ash { + +MessageCenterController::MessageCenterController() + : login_notification_blocker_(message_center::MessageCenter::Get()) {} + +MessageCenterController::~MessageCenterController() {} + +} // namespace ash
diff --git a/ash/system/web_notification/message_center_controller.h b/ash/system/web_notification/message_center_controller.h new file mode 100644 index 0000000..7b82854 --- /dev/null +++ b/ash/system/web_notification/message_center_controller.h
@@ -0,0 +1,30 @@ +// 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 ASH_SYSTEM_WEB_NOTIFICATION_MESSAGE_CENTER_CONTROLLER_H_ +#define ASH_SYSTEM_WEB_NOTIFICATION_MESSAGE_CENTER_CONTROLLER_H_ + +#include "ash/system/web_notification/login_state_notification_blocker.h" +#include "base/macros.h" + +namespace ash { + +// This class manages the ash message center. For now it just houses +// Ash-specific notification blockers. In the future, when the MessageCenter +// lives in the Ash process, it will also manage adding and removing +// notifications sent from clients (like Chrome). +class MessageCenterController { + public: + MessageCenterController(); + ~MessageCenterController(); + + private: + LoginStateNotificationBlocker login_notification_blocker_; + + DISALLOW_COPY_AND_ASSIGN(MessageCenterController); +}; + +} // namespace ash + +#endif // ASH_SYSTEM_WEB_NOTIFICATION_MESSAGE_CENTER_CONTROLLER_H_
diff --git a/ash/system/web_notification/web_notification_tray.cc b/ash/system/web_notification/web_notification_tray.cc index deaa572..0853799 100644 --- a/ash/system/web_notification/web_notification_tray.cc +++ b/ash/system/web_notification/web_notification_tray.cc
@@ -513,7 +513,7 @@ should_update_tray_content_ = false; std::unordered_set<std::string> notification_ids; - for (auto pair : visible_small_icons_) + for (auto& pair : visible_small_icons_) notification_ids.insert(pair.first); // Add small icons (up to kMaximumSmallIconCount = 3). @@ -533,17 +533,17 @@ if (visible_small_icons_.count(notification->id()) != 0) continue; - auto* item = new WebNotificationImage(image.AsImageSkia(), - animation_container_.get(), this); - visible_small_icons_.insert(std::make_pair(notification->id(), item)); - - tray_container()->AddChildViewAt(item, 0); + auto item = base::MakeUnique<WebNotificationImage>( + image.AsImageSkia(), animation_container_.get(), this); + tray_container()->AddChildViewAt(item.get(), 0); item->SetVisible(true); + visible_small_icons_.insert( + std::make_pair(notification->id(), std::move(item))); } // Remove unnecessary icons. for (const std::string& id : notification_ids) { - WebNotificationImage* item = visible_small_icons_[id]; + WebNotificationImage* item = visible_small_icons_[id].release(); visible_small_icons_.erase(id); item->HideAndDelete(); }
diff --git a/ash/system/web_notification/web_notification_tray.h b/ash/system/web_notification/web_notification_tray.h index d255928..e55cdfc 100644 --- a/ash/system/web_notification/web_notification_tray.h +++ b/ash/system/web_notification/web_notification_tray.h
@@ -124,6 +124,7 @@ FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, PopupShownOnBothDisplays); FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, PopupAndSystemTray); FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, PopupAndAutoHideShelf); + FRIEND_TEST_ALL_PREFIXES(WebNotificationTrayTest, VisibleSmallIcon); void UpdateTrayContent(); @@ -164,7 +165,8 @@ scoped_refptr<gfx::AnimationContainer> animation_container_ = new gfx::AnimationContainer(); - std::unordered_map<std::string, WebNotificationImage*> visible_small_icons_; + std::unordered_map<std::string, std::unique_ptr<WebNotificationImage>> + visible_small_icons_; bool show_message_center_on_unlock_;
diff --git a/ash/system/web_notification/web_notification_tray_unittest.cc b/ash/system/web_notification/web_notification_tray_unittest.cc index 47dcf2b..f11b4ba 100644 --- a/ash/system/web_notification/web_notification_tray_unittest.cc +++ b/ash/system/web_notification/web_notification_tray_unittest.cc
@@ -17,6 +17,7 @@ #include "ash/system/status_area_widget_test_helper.h" #include "ash/system/tray/system_tray.h" #include "ash/system/tray/system_tray_item.h" +#include "ash/system/tray/tray_container.h" #include "ash/system/web_notification/ash_popup_alignment_delegate.h" #include "ash/system/web_notification/message_center_bubble.h" #include "ash/test/ash_test_base.h" @@ -30,6 +31,7 @@ #include "ui/events/test/event_generator.h" #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/rect.h" +#include "ui/gfx/image/image_unittest_util.h" #include "ui/message_center/message_center.h" #include "ui/message_center/message_center_style.h" #include "ui/message_center/message_center_tray.h" @@ -89,12 +91,6 @@ WebNotificationTrayTest() {} ~WebNotificationTrayTest() override {} - void TearDown() override { - GetMessageCenter()->RemoveAllNotifications( - false /* by_user */, message_center::MessageCenter::RemoveType::ALL); - AshTestBase::TearDown(); - } - protected: void AddNotification(const std::string& id) { std::unique_ptr<message_center::Notification> notification; @@ -391,4 +387,24 @@ EXPECT_EQ(bottom_second, GetPopupWorkAreaBottomForTray(GetSecondaryTray())); } +TEST_F(WebNotificationTrayTest, VisibleSmallIcon) { + EXPECT_EQ(0u, GetTray()->visible_small_icons_.size()); + EXPECT_EQ(2, GetTray()->tray_container()->child_count()); + std::unique_ptr<message_center::Notification> notification = + std::make_unique<message_center::Notification>( + message_center::NOTIFICATION_TYPE_SIMPLE, "test", + base::ASCIIToUTF16("Test System Notification"), + base::ASCIIToUTF16("Notification message body."), gfx::Image(), + base::ASCIIToUTF16("system"), GURL(), + message_center::NotifierId( + message_center::NotifierId::NotifierType::SYSTEM_COMPONENT, + "test"), + message_center::RichNotificationData(), nullptr /* delegate */); + notification->set_small_image(gfx::test::CreateImage(18, 18)); + GetMessageCenter()->AddNotification(std::move(notification)); + RunAllPendingInMessageLoop(); + EXPECT_EQ(1u, GetTray()->visible_small_icons_.size()); + EXPECT_EQ(3, GetTray()->tray_container()->child_count()); +} + } // namespace ash
diff --git a/ash/test_shell_delegate.cc b/ash/test_shell_delegate.cc index 93483b5..47da1529 100644 --- a/ash/test_shell_delegate.cc +++ b/ash/test_shell_delegate.cc
@@ -10,6 +10,7 @@ #include "ash/keyboard/test_keyboard_ui.h" #include "ash/palette_delegate.h" #include "ash/public/cpp/shell_window_ids.h" +#include "ash/public/cpp/touchscreen_enabled_source.h" #include "ash/root_window_controller.h" #include "ash/shelf/shelf.h" #include "ash/shell.h" @@ -129,19 +130,19 @@ return gfx::Image(); } -bool TestShellDelegate::IsTouchscreenEnabledInPrefs( - bool use_local_state) const { - return use_local_state ? touchscreen_enabled_in_local_pref_ : true; +bool TestShellDelegate::GetTouchscreenEnabled( + TouchscreenEnabledSource source) const { + return source == TouchscreenEnabledSource::GLOBAL + ? global_touchscreen_enabled_ + : true; } -void TestShellDelegate::SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) { - if (use_local_state) - touchscreen_enabled_in_local_pref_ = enabled; +void TestShellDelegate::SetTouchscreenEnabled(bool enabled, + TouchscreenEnabledSource source) { + DCHECK_EQ(TouchscreenEnabledSource::GLOBAL, source); + global_touchscreen_enabled_ = enabled; } -void TestShellDelegate::UpdateTouchscreenStatusFromPrefs() {} - void TestShellDelegate::SuspendMediaSessions() { media_sessions_suspended_ = true; }
diff --git a/ash/test_shell_delegate.h b/ash/test_shell_delegate.h index 9688ea34..8387ffe 100644 --- a/ash/test_shell_delegate.h +++ b/ash/test_shell_delegate.h
@@ -49,10 +49,9 @@ GPUSupport* CreateGPUSupport() override; base::string16 GetProductName() const override; gfx::Image GetDeprecatedAcceleratorImage() const override; - bool IsTouchscreenEnabledInPrefs(bool use_local_state) const override; - void SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) override; - void UpdateTouchscreenStatusFromPrefs() override; + bool GetTouchscreenEnabled(TouchscreenEnabledSource source) const override; + void SetTouchscreenEnabled(bool enabled, + TouchscreenEnabledSource source) override; void SuspendMediaSessions() override; ui::InputDeviceControllerClient* GetInputDeviceControllerClient() override; @@ -68,7 +67,7 @@ int num_exit_requests_ = 0; bool multi_profiles_enabled_ = false; bool force_maximize_on_first_run_ = false; - bool touchscreen_enabled_in_local_pref_ = true; + bool global_touchscreen_enabled_ = true; bool media_sessions_suspended_ = false; std::unique_ptr<ShelfInitializer> shelf_initializer_;
diff --git a/ash/wm/lock_state_controller.cc b/ash/wm/lock_state_controller.cc index dcb4722..286a136 100644 --- a/ash/wm/lock_state_controller.cc +++ b/ash/wm/lock_state_controller.cc
@@ -75,6 +75,11 @@ } // namespace +// static +const int LockStateController::kPreLockContainersMask = + SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS | + SessionStateAnimator::SHELF; + LockStateController::LockStateController( ShutdownController* shutdown_controller) : animator_(new SessionStateAnimatorImpl()), @@ -119,12 +124,12 @@ if (animating_lock_) return; animating_lock_ = true; - // Before sending locking screen request, hide non lock screen containers - // immediately. TODO(warx): consider incorporating immediate post lock - // animation (crbug.com/746657). - animator_->StartAnimation(SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, + post_lock_immediate_animation_ = true; + animator_->StartAnimation(kPreLockContainersMask, SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); + ShellPort::Get()->OnLockStateEvent( + LockStateObserver::EVENT_LOCK_ANIMATION_STARTED); Shell::Get()->session_controller()->LockScreen(); } @@ -356,7 +361,7 @@ SessionStateAnimator::ANIMATION_LIFT, SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); animation_sequence->StartAnimation( - SessionStateAnimator::LAUNCHER, SessionStateAnimator::ANIMATION_FADE_OUT, + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_OUT, SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); // Hide the screen locker containers so we can raise them later. animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, @@ -387,7 +392,7 @@ SessionStateAnimator::ANIMATION_LIFT, SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); animation_sequence->StartAnimation( - SessionStateAnimator::LAUNCHER, SessionStateAnimator::ANIMATION_FADE_OUT, + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_OUT, SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); // Hide the screen locker containers so we can raise them later. animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, @@ -415,7 +420,7 @@ SessionStateAnimator::ANIMATION_UNDO_LIFT, SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS); animation_sequence->StartAnimation( - SessionStateAnimator::LAUNCHER, SessionStateAnimator::ANIMATION_FADE_IN, + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_IN, SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS); AnimateWallpaperHidingIfNecessary( SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, @@ -435,7 +440,9 @@ animation_sequence->StartAnimation( SessionStateAnimator::LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN, - SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); + post_lock_immediate_animation_ + ? SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE + : SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); animation_sequence->EndSequence(); } @@ -461,7 +468,7 @@ SessionStateAnimator::ANIMATION_DROP, SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); animation_sequence->StartAnimation( - SessionStateAnimator::LAUNCHER, SessionStateAnimator::ANIMATION_FADE_IN, + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_IN, SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); AnimateWallpaperHidingIfNecessary( SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, animation_sequence); @@ -512,6 +519,7 @@ void LockStateController::PostLockAnimationFinished() { animating_lock_ = false; + post_lock_immediate_animation_ = false; VLOG(1) << "PostLockAnimationFinished"; ShellPort::Get()->OnLockStateEvent( LockStateObserver::EVENT_LOCK_ANIMATION_FINISHED);
diff --git a/ash/wm/lock_state_controller.h b/ash/wm/lock_state_controller.h index 564ece3..098bb5e 100644 --- a/ash/wm/lock_state_controller.h +++ b/ash/wm/lock_state_controller.h
@@ -49,6 +49,10 @@ class ASH_EXPORT LockStateController : public aura::WindowTreeHostObserver, public SessionObserver { public: + // A bitfield mask including NON_LOCK_SCREEN_CONTAINERS and LAUNCHER, used for + // pre-lock hiding animation. + static const int kPreLockContainersMask; + explicit LockStateController(ShutdownController* shutdown_controller); ~LockStateController() override; @@ -203,6 +207,9 @@ // Indicates that lock animation can be undone. bool can_cancel_lock_animation_ = false; + // Indicates whether post lock animation should be immediate. + bool post_lock_immediate_animation_ = false; + std::unique_ptr<UnlockedStateProperties> unlocked_properties_; // How long has it been since the request to lock the screen?
diff --git a/ash/wm/lock_state_controller_unittest.cc b/ash/wm/lock_state_controller_unittest.cc index 9228b2eb..c9972466 100644 --- a/ash/wm/lock_state_controller_unittest.cc +++ b/ash/wm/lock_state_controller_unittest.cc
@@ -128,8 +128,7 @@ SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_LIFT)); EXPECT_TRUE(test_animator_->AreContainersAnimated( - SessionStateAnimator::LAUNCHER, - SessionStateAnimator::ANIMATION_FADE_OUT)); + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_OUT)); EXPECT_TRUE(test_animator_->AreContainersAnimated( SessionStateAnimator::LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY)); @@ -143,8 +142,7 @@ SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_LIFT)); EXPECT_TRUE(test_animator_->AreContainersAnimated( - SessionStateAnimator::LAUNCHER, - SessionStateAnimator::ANIMATION_FADE_OUT)); + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_OUT)); EXPECT_TRUE(test_api_->is_animating_lock()); } @@ -155,8 +153,7 @@ SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_UNDO_LIFT)); EXPECT_TRUE(test_animator_->AreContainersAnimated( - SessionStateAnimator::LAUNCHER, - SessionStateAnimator::ANIMATION_FADE_IN)); + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_IN)); } void ExpectPreLockAnimationFinished() { @@ -165,8 +162,7 @@ SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_LIFT)); EXPECT_FALSE(test_animator_->AreContainersAnimated( - SessionStateAnimator::LAUNCHER, - SessionStateAnimator::ANIMATION_FADE_OUT)); + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_OUT)); EXPECT_FALSE(test_animator_->AreContainersAnimated( SessionStateAnimator::LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY)); @@ -209,8 +205,7 @@ SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_DROP)); EXPECT_TRUE(test_animator_->AreContainersAnimated( - SessionStateAnimator::LAUNCHER, - SessionStateAnimator::ANIMATION_FADE_IN)); + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_IN)); } void ExpectUnlockAfterUIDestroyedAnimationFinished() { @@ -220,8 +215,7 @@ SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, SessionStateAnimator::ANIMATION_DROP)); EXPECT_FALSE(test_animator_->AreContainersAnimated( - SessionStateAnimator::LAUNCHER, - SessionStateAnimator::ANIMATION_FADE_IN)); + SessionStateAnimator::SHELF, SessionStateAnimator::ANIMATION_FADE_IN)); } void ExpectShutdownAnimationStarted() {
diff --git a/ash/wm/power_button_controller.cc b/ash/wm/power_button_controller.cc index d7fe905b..2193a4f 100644 --- a/ash/wm/power_button_controller.cc +++ b/ash/wm/power_button_controller.cc
@@ -9,9 +9,9 @@ #include "ash/public/cpp/shell_window_ids.h" #include "ash/session/session_controller.h" #include "ash/shell.h" -#include "ash/shell_delegate.h" #include "ash/shutdown_reason.h" #include "ash/system/audio/tray_audio.h" +#include "ash/system/power/power_button_display_controller.h" #include "ash/system/power/tablet_power_button_controller.h" #include "ash/system/tray/system_tray.h" #include "ash/wm/lock_state_controller.h" @@ -29,6 +29,7 @@ PowerButtonController::PowerButtonController(LockStateController* controller) : lock_state_controller_(controller) { ProcessCommandLine(); + display_controller_ = base::MakeUnique<PowerButtonDisplayController>(); chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( this); chromeos::AccelerometerReader::GetInstance()->AddObserver(this); @@ -192,13 +193,8 @@ scoped_refptr<const chromeos::AccelerometerUpdate> update) { if (force_clamshell_power_button_ || tablet_controller_) return; - tablet_controller_.reset( - new TabletPowerButtonController(lock_state_controller_)); -} - -void PowerButtonController::ResetTabletPowerButtonControllerForTest() { - tablet_controller_.reset(); - ProcessCommandLine(); + tablet_controller_.reset(new TabletPowerButtonController( + lock_state_controller_, display_controller_.get())); } void PowerButtonController::ProcessCommandLine() { @@ -206,14 +202,6 @@ has_legacy_power_button_ = cl->HasSwitch(switches::kAuraLegacyPowerButton); force_clamshell_power_button_ = cl->HasSwitch(switches::kForceClamshellPowerButton); - if (force_clamshell_power_button_) { - // We may update power button behavior from tablet behavior to clamshell - // behavior with touchscreen local state disabled. Enabling touchscreen - // local state to ensure touchscreen is initially enabled for clamshell. - ShellDelegate* delegate = Shell::Get()->shell_delegate(); - delegate->SetTouchscreenEnabledInPrefs(true, true /* use_local_state */); - delegate->UpdateTouchscreenStatusFromPrefs(); - } } } // namespace ash
diff --git a/ash/wm/power_button_controller.h b/ash/wm/power_button_controller.h index 938542d..95629325 100644 --- a/ash/wm/power_button_controller.h +++ b/ash/wm/power_button_controller.h
@@ -18,6 +18,7 @@ namespace ash { class LockStateController; +class PowerButtonDisplayController; class TabletPowerButtonController; // Handles power & lock button events which may result in the locking or @@ -58,10 +59,6 @@ void OnAccelerometerUpdated( scoped_refptr<const chromeos::AccelerometerUpdate> update) override; - // Resets |tablet_controller_| to hold a new object to simulate Chrome - // starting. Also calls ProcessCommandLine(). - void ResetTabletPowerButtonControllerForTest(); - TabletPowerButtonController* tablet_power_button_controller_for_test() { return tablet_controller_.get(); } @@ -100,6 +97,9 @@ LockStateController* lock_state_controller_; // Not owned. + // Used to interact with the display. + std::unique_ptr<PowerButtonDisplayController> display_controller_; + // Handles events for convertible/tablet devices. std::unique_ptr<TabletPowerButtonController> tablet_controller_;
diff --git a/ash/wm/session_state_animator.cc b/ash/wm/session_state_animator.cc index 0d1c694..a682109 100644 --- a/ash/wm/session_state_animator.cc +++ b/ash/wm/session_state_animator.cc
@@ -36,7 +36,7 @@ const int SessionStateAnimator::kAllNonRootContainersMask = SessionStateAnimator::kAllLockScreenContainersMask | - SessionStateAnimator::WALLPAPER | SessionStateAnimator::LAUNCHER | + SessionStateAnimator::WALLPAPER | SessionStateAnimator::SHELF | SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS; SessionStateAnimator::AnimationSequence::AnimationSequence(
diff --git a/ash/wm/session_state_animator.h b/ash/wm/session_state_animator.h index 764a400..7b230551 100644 --- a/ash/wm/session_state_animator.h +++ b/ash/wm/session_state_animator.h
@@ -69,7 +69,7 @@ // Specific containers or groups of containers that can be animated. enum Container { WALLPAPER = 1 << 0, - LAUNCHER = 1 << 1, + SHELF = 1 << 1, // All user session related containers including the system wallpaper but // not including the user's wallpaper.
diff --git a/ash/wm/session_state_animator_impl.cc b/ash/wm/session_state_animator_impl.cc index 1085bc7..b93756a 100644 --- a/ash/wm/session_state_animator_impl.cc +++ b/ash/wm/session_state_animator_impl.cc
@@ -395,12 +395,12 @@ containers->push_back( Shell::GetContainer(root_window, kShellWindowId_WallpaperContainer)); } - if (container_mask & SessionStateAnimator::LAUNCHER) { + if (container_mask & SessionStateAnimator::SHELF) { containers->push_back( Shell::GetContainer(root_window, kShellWindowId_ShelfContainer)); } if (container_mask & SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS) { - // TODO(antrim): Figure out a way to eliminate a need to exclude launcher + // TODO(antrim): Figure out a way to eliminate a need to exclude shelf // in such way. aura::Window* non_lock_screen_containers = Shell::GetContainer( root_window, kShellWindowId_NonLockScreenContainersContainer);
diff --git a/ash/wm/session_state_animator_impl_unittest.cc b/ash/wm/session_state_animator_impl_unittest.cc index 49c3535..fa7ebc1 100644 --- a/ash/wm/session_state_animator_impl_unittest.cc +++ b/ash/wm/session_state_animator_impl_unittest.cc
@@ -49,8 +49,8 @@ containers.clear(); - // Check for shelf in launcher. - SessionStateAnimatorImpl::GetContainers(SessionStateAnimator::LAUNCHER, + // Check for shelf. + SessionStateAnimatorImpl::GetContainers(SessionStateAnimator::SHELF, &containers); EXPECT_TRUE( ContainersHaveWindowWithId(containers, kShellWindowId_ShelfContainer));
diff --git a/ash/wm/test_session_state_animator.cc b/ash/wm/test_session_state_animator.cc index 9a28d45..e0bf4404 100644 --- a/ash/wm/test_session_state_animator.cc +++ b/ash/wm/test_session_state_animator.cc
@@ -21,7 +21,7 @@ const SessionStateAnimator::Container TestSessionStateAnimator::kAllContainers[] = { SessionStateAnimator::WALLPAPER, - SessionStateAnimator::LAUNCHER, + SessionStateAnimator::SHELF, SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, SessionStateAnimator::LOCK_SCREEN_WALLPAPER, SessionStateAnimator::LOCK_SCREEN_CONTAINERS,
diff --git a/base/android/java/src/org/chromium/base/SysUtils.java b/base/android/java/src/org/chromium/base/SysUtils.java index 5979ca4..253e17e6 100644 --- a/base/android/java/src/org/chromium/base/SysUtils.java +++ b/base/android/java/src/org/chromium/base/SysUtils.java
@@ -12,6 +12,7 @@ import android.util.Log; import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.annotations.JNINamespace; import java.io.BufferedReader; import java.io.FileReader; @@ -21,6 +22,7 @@ /** * Exposes system related information about the current device. */ +@JNINamespace("base::android") public class SysUtils { // A device reporting strictly more total memory in megabytes cannot be considered 'low-end'. private static final int ANDROID_LOW_MEMORY_DEVICE_THRESHOLD_MB = 512; @@ -152,4 +154,14 @@ } return ramSizeKB / 1024 <= ANDROID_LOW_MEMORY_DEVICE_THRESHOLD_MB; } + + /** + * Creates a new trace event to log the number of minor / major page faults, if tracing is + * enabled. + */ + public static void logPageFaultCountToTracing() { + nativeLogPageFaultCountToTracing(); + } + + private static native void nativeLogPageFaultCountToTracing(); }
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java index 8898a79c..42bf4ff 100644 --- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java +++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -13,6 +13,7 @@ import org.chromium.base.CommandLine; import org.chromium.base.ContextUtils; import org.chromium.base.Log; +import org.chromium.base.SysUtils; import org.chromium.base.TraceEvent; import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.CalledByNative; @@ -238,6 +239,7 @@ * detrimental to the startup time. */ public void asyncPrefetchLibrariesToMemory() { + SysUtils.logPageFaultCountToTracing(); if (isNotPrefetchingLibraries()) return; final boolean coldStart = mPrefetchLibraryHasBeenCalled.compareAndSet(false, true);
diff --git a/base/android/java/src/org/chromium/base/metrics/CachedMetrics.java b/base/android/java/src/org/chromium/base/metrics/CachedMetrics.java index ab66bfee..7ff8555c 100644 --- a/base/android/java/src/org/chromium/base/metrics/CachedMetrics.java +++ b/base/android/java/src/org/chromium/base/metrics/CachedMetrics.java
@@ -17,30 +17,48 @@ */ public class CachedMetrics { /** - * Creating an instance of a subclass of this class automatically adds it to a list of objects - * that are committed when the native library is available. + * Base class for cached metric objects. Subclasses are expected to call + * addToCache() when some metric state gets recorded that requires a later + * commit operation when the native library is loaded. */ - private abstract static class CachedHistogram { - private static final List<CachedHistogram> sEvents = new ArrayList<CachedHistogram>(); + private abstract static class CachedMetric { + private static final List<CachedMetric> sMetrics = new ArrayList<CachedMetric>(); - protected final String mHistogramName; + protected final String mName; + protected boolean mCached; /** - * @param histogramName Name of the histogram to record. + * @param name Name of the metric to record. */ - protected CachedHistogram(String histogramName) { - mHistogramName = histogramName; - sEvents.add(this); + protected CachedMetric(String name) { + mName = name; } - /** Commits the histogram. Expects the native library to be loaded. */ + /** + * Adds this object to the sMetrics cache, if it hasn't been added already. + * Must be called while holding the synchronized(sMetrics) lock. + * Note: The synchronization is not done inside this function because subclasses + * need to increment their held values under lock to ensure thread-safety. + */ + protected final void addToCache() { + assert Thread.holdsLock(sMetrics); + + if (mCached) return; + sMetrics.add(this); + mCached = true; + } + + /** + * Commits the metric. Expects the native library to be loaded. + * Must be called while holding the synchronized(sMetrics) lock. + */ protected abstract void commitAndClear(); } /** * Caches an action that will be recorded after native side is loaded. */ - public static class ActionEvent extends CachedHistogram { + public static class ActionEvent extends CachedMetric { private int mCount; public ActionEvent(String actionName) { @@ -48,15 +66,18 @@ } public void record() { - if (LibraryLoader.isInitialized()) { - recordWithNative(); - } else { - mCount++; + synchronized (CachedMetric.sMetrics) { + if (LibraryLoader.isInitialized()) { + recordWithNative(); + } else { + mCount++; + addToCache(); + } } } private void recordWithNative() { - RecordUserAction.record(mHistogramName); + RecordUserAction.record(mName); } @Override @@ -69,7 +90,7 @@ } /** Caches a set of integer histogram samples. */ - public static class SparseHistogramSample extends CachedHistogram { + public static class SparseHistogramSample extends CachedMetric { private final List<Integer> mSamples = new ArrayList<Integer>(); public SparseHistogramSample(String histogramName) { @@ -77,15 +98,18 @@ } public void record(int sample) { - if (LibraryLoader.isInitialized()) { - recordWithNative(sample); - } else { - mSamples.add(sample); + synchronized (CachedMetric.sMetrics) { + if (LibraryLoader.isInitialized()) { + recordWithNative(sample); + } else { + mSamples.add(sample); + addToCache(); + } } } private void recordWithNative(int sample) { - RecordHistogram.recordSparseSlowlyHistogram(mHistogramName, sample); + RecordHistogram.recordSparseSlowlyHistogram(mName, sample); } @Override @@ -98,7 +122,7 @@ } /** Caches a set of enumerated histogram samples. */ - public static class EnumeratedHistogramSample extends CachedHistogram { + public static class EnumeratedHistogramSample extends CachedMetric { private final List<Integer> mSamples = new ArrayList<Integer>(); private final int mMaxValue; @@ -108,15 +132,18 @@ } public void record(int sample) { - if (LibraryLoader.isInitialized()) { - recordWithNative(sample); - } else { - mSamples.add(sample); + synchronized (CachedMetric.sMetrics) { + if (LibraryLoader.isInitialized()) { + recordWithNative(sample); + } else { + mSamples.add(sample); + addToCache(); + } } } private void recordWithNative(int sample) { - RecordHistogram.recordEnumeratedHistogram(mHistogramName, sample, mMaxValue); + RecordHistogram.recordEnumeratedHistogram(mName, sample, mMaxValue); } @Override @@ -129,7 +156,7 @@ } /** Caches a set of times histogram samples. */ - public static class TimesHistogramSample extends CachedHistogram { + public static class TimesHistogramSample extends CachedMetric { private final List<Long> mSamples = new ArrayList<Long>(); private final TimeUnit mTimeUnit; @@ -139,15 +166,18 @@ } public void record(long sample) { - if (LibraryLoader.isInitialized()) { - recordWithNative(sample); - } else { - mSamples.add(sample); + synchronized (CachedMetric.sMetrics) { + if (LibraryLoader.isInitialized()) { + recordWithNative(sample); + } else { + mSamples.add(sample); + addToCache(); + } } } private void recordWithNative(long sample) { - RecordHistogram.recordTimesHistogram(mHistogramName, sample, mTimeUnit); + RecordHistogram.recordTimesHistogram(mName, sample, mTimeUnit); } @Override @@ -160,7 +190,7 @@ } /** Caches a set of boolean histogram samples. */ - public static class BooleanHistogramSample extends CachedHistogram { + public static class BooleanHistogramSample extends CachedMetric { private final List<Boolean> mSamples = new ArrayList<Boolean>(); public BooleanHistogramSample(String histogramName) { @@ -168,15 +198,18 @@ } public void record(boolean sample) { - if (LibraryLoader.isInitialized()) { - recordWithNative(sample); - } else { - mSamples.add(sample); + synchronized (CachedMetric.sMetrics) { + if (LibraryLoader.isInitialized()) { + recordWithNative(sample); + } else { + mSamples.add(sample); + addToCache(); + } } } private void recordWithNative(boolean sample) { - RecordHistogram.recordBooleanHistogram(mHistogramName, sample); + RecordHistogram.recordBooleanHistogram(mName, sample); } @Override @@ -193,6 +226,10 @@ * Should be called once the native library has been loaded. */ public static void commitCachedMetrics() { - for (CachedHistogram event : CachedHistogram.sEvents) event.commitAndClear(); + synchronized (CachedMetric.sMetrics) { + for (CachedMetric metric : CachedMetric.sMetrics) { + metric.commitAndClear(); + } + } } }
diff --git a/base/android/sys_utils.cc b/base/android/sys_utils.cc index 6201f8c4..29f1ca11 100644 --- a/base/android/sys_utils.cc +++ b/base/android/sys_utils.cc
@@ -4,8 +4,12 @@ #include "base/android/sys_utils.h" +#include <memory> + #include "base/android/build_info.h" +#include "base/process/process_metrics.h" #include "base/sys_info.h" +#include "base/trace_event/trace_event.h" #include "jni/SysUtils_jni.h" namespace base { @@ -21,6 +25,27 @@ return Java_SysUtils_isCurrentlyLowMemory(env); } +// Logs the number of minor / major page faults to tracing (and also the time to +// collect) the metrics. Does nothing if tracing is not enabled. +static void LogPageFaultCountToTracing( + JNIEnv* env, + const base::android::JavaParamRef<jclass>& jcaller) { + // This is racy, but we are OK losing data, and collecting it is potentially + // expensive (reading and parsing a file). + bool enabled; + TRACE_EVENT_CATEGORY_GROUP_ENABLED("startup", &enabled); + if (!enabled) + return; + TRACE_EVENT_BEGIN2("memory", "CollectPageFaultCount", "minor", 0, "major", 0); + std::unique_ptr<base::ProcessMetrics> process_metrics( + base::ProcessMetrics::CreateProcessMetrics( + base::GetCurrentProcessHandle())); + base::PageFaultCounts counts; + process_metrics->GetPageFaultCounts(&counts); + TRACE_EVENT_END2("memory", "CollectPageFaults", "minor", counts.minor, + "major", counts.major); +} + } // namespace android } // namespace base
diff --git a/base/containers/circular_deque.h b/base/containers/circular_deque.h index 8dda699..87d4bba 100644 --- a/base/containers/circular_deque.h +++ b/base/containers/circular_deque.h
@@ -772,8 +772,14 @@ ValidateIterator(first); ValidateIterator(last); + IncrementGeneration(); + // First, call the destructor on the deleted items. - if (first.index_ < last.index_) { + if (first.index_ == last.index_) { + // Nothing deleted. Need to return early to avoid falling through to + // moving items on top of themselves. + return iterator(this, first.index_); + } else if (first.index_ < last.index_) { // Contiguous range. buffer_.DestructRange(&buffer_[first.index_], &buffer_[last.index_]); } else { @@ -783,8 +789,6 @@ buffer_.DestructRange(&buffer_[0], &buffer_[last.index_]); } - IncrementGeneration(); - if (last.index_ == begin_) { // This deletion is from the beginning. Nothing needs to be copied, only // begin_ needs to be updated.
diff --git a/base/containers/circular_deque_unittest.cc b/base/containers/circular_deque_unittest.cc index 1b5ecd21..5c192e9 100644 --- a/base/containers/circular_deque_unittest.cc +++ b/base/containers/circular_deque_unittest.cc
@@ -728,6 +728,9 @@ TEST(CircularDeque, InsertEraseRange) { circular_deque<int> q; + // Erase nothing from an empty deque should work. + q.erase(q.begin(), q.end()); + // Loop index used below to shift the used items in the buffer. for (int i = 0; i < 10; i++) { circular_deque<int> source; @@ -768,11 +771,20 @@ EXPECT_EQ(1, q[6]); EXPECT_EQ(2, q[7]); - // Now erase the inserted ranges. - auto result = q.erase(q.begin(), q.begin() + 2); + // Now erase the inserted ranges. Try each subsection also with no items + // being erased, which should be a no-op. + auto result = q.erase(q.begin(), q.begin()); // No-op. EXPECT_EQ(q.begin(), result); + result = q.erase(q.begin(), q.begin() + 2); + EXPECT_EQ(q.begin(), result); + + result = q.erase(q.begin() + 1, q.begin() + 1); // No-op. + EXPECT_EQ(q.begin() + 1, result); result = q.erase(q.begin() + 1, q.begin() + 3); EXPECT_EQ(q.begin() + 1, result); + + result = q.erase(q.end() - 2, q.end() - 2); // No-op. + EXPECT_EQ(q.end() - 2, result); result = q.erase(q.end() - 2, q.end()); EXPECT_EQ(q.end(), result);
diff --git a/base/files/file.h b/base/files/file.h index de5fe0d1..8b0581576 100644 --- a/base/files/file.h +++ b/base/files/file.h
@@ -220,7 +220,7 @@ // Writes the given buffer into the file at the given offset, overwritting any // data that was previously there. Returns the number of bytes written, or -1 // on error. Note that this function makes a best effort to write all data on - // all platforms. + // all platforms. |data| can be nullptr when |size| is 0. // Ignores the offset and writes to the end of the file if the file was opened // with FLAG_APPEND. int Write(int64_t offset, const char* data, int size);
diff --git a/base/files/file_unittest.cc b/base/files/file_unittest.cc index e179bbb..4449543 100644 --- a/base/files/file_unittest.cc +++ b/base/files/file_unittest.cc
@@ -177,6 +177,10 @@ int bytes_written = file.Write(0, data_to_write, 0); EXPECT_EQ(0, bytes_written); + // Write 0 bytes, with buf=nullptr. + bytes_written = file.Write(0, nullptr, 0); + EXPECT_EQ(0, bytes_written); + // Write "test" to the file. bytes_written = file.Write(0, data_to_write, kTestDataSize); EXPECT_EQ(kTestDataSize, bytes_written); @@ -247,6 +251,10 @@ int bytes_written = file.Write(0, data_to_write, 0); EXPECT_EQ(0, bytes_written); + // Write 0 bytes, with buf=nullptr. + bytes_written = file.Write(0, nullptr, 0); + EXPECT_EQ(0, bytes_written); + // Write "test" to the file. bytes_written = file.Write(0, data_to_write, kTestDataSize); EXPECT_EQ(kTestDataSize, bytes_written);
diff --git a/base/metrics/histogram_macros.h b/base/metrics/histogram_macros.h index 504cd3fc..9abbb79 100644 --- a/base/metrics/histogram_macros.h +++ b/base/metrics/histogram_macros.h
@@ -167,7 +167,7 @@ // as the number of buckets recorded. // Sample usage: -// UMA_HISTOGRAM_CUSTOM_TIMES("Very.Long.Timing.Histogram", duration_in_ms, +// UMA_HISTOGRAM_CUSTOM_TIMES("Very.Long.Timing.Histogram", time_delta, // base::TimeDelta::FromSeconds(1), base::TimeDelta::FromDays(1), 100); #define UMA_HISTOGRAM_CUSTOM_TIMES(name, sample, min, max, bucket_count) \ STATIC_HISTOGRAM_POINTER_BLOCK(name, AddTime(sample), \
diff --git a/base/process/internal_linux.h b/base/process/internal_linux.h index 99d0fd5a..d8904fd 100644 --- a/base/process/internal_linux.h +++ b/base/process/internal_linux.h
@@ -50,16 +50,18 @@ // If the ordering ever changes, carefully review functions that use these // values. enum ProcStatsFields { - VM_COMM = 1, // Filename of executable, without parentheses. - VM_STATE = 2, // Letter indicating the state of the process. - VM_PPID = 3, // PID of the parent. - VM_PGRP = 4, // Process group id. - VM_UTIME = 13, // Time scheduled in user mode in clock ticks. - VM_STIME = 14, // Time scheduled in kernel mode in clock ticks. - VM_NUMTHREADS = 19, // Number of threads. - VM_STARTTIME = 21, // The time the process started in clock ticks. - VM_VSIZE = 22, // Virtual memory size in bytes. - VM_RSS = 23, // Resident Set Size in pages. + VM_COMM = 1, // Filename of executable, without parentheses. + VM_STATE = 2, // Letter indicating the state of the process. + VM_PPID = 3, // PID of the parent. + VM_PGRP = 4, // Process group id. + VM_MINFLT = 9, // Minor page fault count excluding children. + VM_MAJFLT = 11, // Major page fault count excluding children. + VM_UTIME = 13, // Time scheduled in user mode in clock ticks. + VM_STIME = 14, // Time scheduled in kernel mode in clock ticks. + VM_NUMTHREADS = 19, // Number of threads. + VM_STARTTIME = 21, // The time the process started in clock ticks. + VM_VSIZE = 22, // Virtual memory size in bytes. + VM_RSS = 23, // Resident Set Size in pages. }; // Reads the |field_num|th field from |proc_stats|. Returns 0 on failure.
diff --git a/base/process/process_metrics.h b/base/process/process_metrics.h index 1639df1..644b4632 100644 --- a/base/process/process_metrics.h +++ b/base/process/process_metrics.h
@@ -103,6 +103,18 @@ size_t image; }; +#if defined(OS_LINUX) || defined(OS_ANDROID) +// Minor and major page fault counts since the process creation. +// Both counts are process-wide, and exclude child processes. +// +// minor: Number of page faults that didn't require disk IO. +// major: Number of page faults that required disk IO. +struct PageFaultCounts { + int64_t minor; + int64_t major; +}; +#endif // defined(OS_LINUX) || defined(OS_ANDROID) + // Convert a POSIX timeval to microseconds. BASE_EXPORT int64_t TimeValToMicroseconds(const struct timeval& tv); @@ -228,6 +240,10 @@ #if defined(OS_LINUX) || defined(OS_ANDROID) // Bytes of swap as reported by /proc/[pid]/status. uint64_t GetVmSwapBytes() const; + + // Minor and major page fault count as reported by /proc/[pid]/stat. + // Returns true for success. + bool GetPageFaultCounts(PageFaultCounts* counts) const; #endif // defined(OS_LINUX) || defined(OS_ANDROID) // Returns total memory usage of malloc.
diff --git a/base/process/process_metrics_linux.cc b/base/process/process_metrics_linux.cc index ce83366..d6b28bd4 100644 --- a/base/process/process_metrics_linux.cc +++ b/base/process/process_metrics_linux.cc
@@ -334,6 +334,25 @@ } #endif // defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_ANDROID) +bool ProcessMetrics::GetPageFaultCounts(PageFaultCounts* counts) const { + // We are not using internal::ReadStatsFileAndGetFieldAsInt64(), since it + // would read the file twice, and return inconsistent numbers. + std::string stats_data; + if (!internal::ReadProcStats(process_, &stats_data)) + return false; + std::vector<std::string> proc_stats; + if (!internal::ParseProcStats(stats_data, &proc_stats)) + return false; + + counts->minor = + internal::GetProcStatsFieldAsInt64(proc_stats, internal::VM_MINFLT); + counts->major = + internal::GetProcStatsFieldAsInt64(proc_stats, internal::VM_MAJFLT); + return true; +} +#endif // defined(OS_LINUX) || defined(OS_ANDROID) + #if defined(OS_LINUX) || defined(OS_AIX) int ProcessMetrics::GetOpenFdCount() const { // Use /proc/<pid>/fd to count the number of entries there.
diff --git a/base/process/process_metrics_unittest.cc b/base/process/process_metrics_unittest.cc index 23bd216d..a09b664 100644 --- a/base/process/process_metrics_unittest.cc +++ b/base/process/process_metrics_unittest.cc
@@ -9,6 +9,7 @@ #include <sstream> #include <string> +#include <vector> #include "base/bind.h" #include "base/command_line.h" @@ -16,6 +17,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/memory/shared_memory.h" #include "base/strings/string_number_conversions.h" #include "base/sys_info.h" #include "base/test/multiprocess_test.h" @@ -612,5 +614,33 @@ } #endif // defined(OS_LINUX) +#if defined(OS_ANDROID) || defined(OS_LINUX) +TEST(ProcessMetricsTestLinux, GetPageFaultCounts) { + std::unique_ptr<base::ProcessMetrics> process_metrics( + base::ProcessMetrics::CreateProcessMetrics( + base::GetCurrentProcessHandle())); + + PageFaultCounts counts; + ASSERT_TRUE(process_metrics->GetPageFaultCounts(&counts)); + ASSERT_GT(counts.minor, 0); + ASSERT_GE(counts.major, 0); + + { + // Allocate and touch memory. Touching it is required to make sure that the + // page fault count goes up, as memory is typically mapped lazily. + const size_t kMappedSize = 4 * (1 << 20); + SharedMemory memory; + ASSERT_TRUE(memory.CreateAndMapAnonymous(kMappedSize)); + memset(memory.memory(), 42, kMappedSize); + memory.Unmap(); + } + + PageFaultCounts counts_after; + ASSERT_TRUE(process_metrics->GetPageFaultCounts(&counts_after)); + ASSERT_GT(counts_after.minor, counts.minor); + ASSERT_GE(counts_after.major, counts.major); +} +#endif // defined(OS_ANDROID) || defined(OS_LINUX) + } // namespace debug } // namespace base
diff --git a/base/trace_event/memory_allocator_dump.cc b/base/trace_event/memory_allocator_dump.cc index 7d91119..df4d73f 100644 --- a/base/trace_event/memory_allocator_dump.cc +++ b/base/trace_event/memory_allocator_dump.cc
@@ -5,6 +5,7 @@ #include "base/trace_event/memory_allocator_dump.h" #include "base/format_macros.h" +#include "base/memory/ptr_util.h" #include "base/strings/stringprintf.h" #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/memory_dump_provider.h" @@ -34,7 +35,6 @@ const MemoryAllocatorDumpGuid& guid) : absolute_name_(absolute_name), process_memory_dump_(process_memory_dump), - attributes_(new TracedValue), guid_(guid), flags_(Flags::DEFAULT), size_(0) { @@ -55,7 +55,6 @@ : MemoryAllocatorDump(absolute_name, process_memory_dump, GetDumpIdFromName(absolute_name)) { - string_conversion_buffer_.reserve(16); } MemoryAllocatorDump::~MemoryAllocatorDump() { @@ -66,12 +65,7 @@ uint64_t value) { if (strcmp(kNameSize, name) == 0) size_ = value; - SStringPrintf(&string_conversion_buffer_, "%" PRIx64, value); - attributes_->BeginDictionary(name); - attributes_->SetString("type", kTypeScalar); - attributes_->SetString("units", units); - attributes_->SetString("value", string_conversion_buffer_); - attributes_->EndDictionary(); + entries_.emplace_back(name, units, value); } void MemoryAllocatorDump::AddString(const char* name, @@ -83,22 +77,73 @@ NOTREACHED(); return; } + entries_.emplace_back(name, units, value); +} - attributes_->BeginDictionary(name); - attributes_->SetString("type", kTypeString); - attributes_->SetString("units", units); - attributes_->SetString("value", value); - attributes_->EndDictionary(); +void MemoryAllocatorDump::DumpAttributes(TracedValue* value) const { + std::string string_conversion_buffer; + + for (const Entry& entry : entries_) { + value->BeginDictionaryWithCopiedName(entry.name); + switch (entry.entry_type) { + case Entry::kUint64: + SStringPrintf(&string_conversion_buffer, "%" PRIx64, + entry.value_uint64); + value->SetString("type", kTypeScalar); + value->SetString("units", entry.units); + value->SetString("value", string_conversion_buffer); + break; + case Entry::kString: + value->SetString("type", kTypeString); + value->SetString("units", entry.units); + value->SetString("value", entry.value_string); + break; + } + value->EndDictionary(); + } } void MemoryAllocatorDump::AsValueInto(TracedValue* value) const { value->BeginDictionaryWithCopiedName(absolute_name_); value->SetString("guid", guid_.ToString()); - value->SetValue("attrs", *attributes_); + value->BeginDictionary("attrs"); + DumpAttributes(value); + value->EndDictionary(); // "attrs": { ... } if (flags_) value->SetInteger("flags", flags_); value->EndDictionary(); // "allocator_name/heap_subheap": { ... } } +std::unique_ptr<TracedValue> MemoryAllocatorDump::attributes_for_testing() + const { + std::unique_ptr<TracedValue> attributes = base::MakeUnique<TracedValue>(); + DumpAttributes(attributes.get()); + return attributes; +} + +MemoryAllocatorDump::Entry::Entry(Entry&& other) = default; + +MemoryAllocatorDump::Entry::Entry(std::string name, + std::string units, + uint64_t value) + : name(name), units(units), entry_type(kUint64), value_uint64(value) {} +MemoryAllocatorDump::Entry::Entry(std::string name, + std::string units, + std::string value) + : name(name), units(units), entry_type(kString), value_string(value) {} + +bool MemoryAllocatorDump::Entry::operator==(const Entry& rhs) const { + if (!(name == rhs.name && units == rhs.units && entry_type == rhs.entry_type)) + return false; + switch (entry_type) { + case EntryType::kUint64: + return value_uint64 == rhs.value_uint64; + case EntryType::kString: + return value_string == rhs.value_string; + } + NOTREACHED(); + return false; +} + } // namespace trace_event } // namespace base
diff --git a/base/trace_event/memory_allocator_dump.h b/base/trace_event/memory_allocator_dump.h index f7d94e5fb..f170457 100644 --- a/base/trace_event/memory_allocator_dump.h +++ b/base/trace_event/memory_allocator_dump.h
@@ -15,6 +15,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/trace_event/memory_allocator_dump_guid.h" +#include "base/trace_event/trace_event_argument.h" #include "base/values.h" namespace base { @@ -33,6 +34,35 @@ WEAK = 1 << 0, }; + // In the TraceViewer UI table each MemoryAllocatorDump becomes + // a row and each Entry generates a column (if it doesn't already + // exist). + struct BASE_EXPORT Entry { + enum EntryType { + kUint64, + kString, + }; + + // By design name, units and value_string are always coming from + // indefinitely lived const char* strings, the only reason we copy + // them into a std::string is to handle Mojo (de)serialization. + // TODO(hjd): Investigate optimization (e.g. using StringPiece). + Entry(std::string name, std::string units, uint64_t value); + Entry(std::string name, std::string units, std::string value); + Entry(Entry&& other); + bool operator==(const Entry& rhs) const; + + std::string name; + std::string units; + + EntryType entry_type; + + uint64_t value_uint64; + std::string value_string; + + DISALLOW_COPY_AND_ASSIGN(Entry); + }; + // Returns the Guid of the dump for the given |absolute_name| for the // current process. static MemoryAllocatorDumpGuid GetDumpIdFromName( @@ -62,7 +92,7 @@ // - "size" column (all dumps are expected to have at least this one): // AddScalar(kNameSize, kUnitsBytes, 1234); // - Some extra-column reporting internal details of the subsystem: - // AddScalar("number_of_freelist_entires", kUnitsObjects, 42) + // AddScalar("number_of_freelist_entries", kUnitsObjects, 42) // - Other informational column: // AddString("kitten", "name", "shadow"); void AddScalar(const char* name, const char* units, uint64_t value); @@ -92,19 +122,23 @@ // expected to have the same guid. const MemoryAllocatorDumpGuid& guid() const { return guid_; } - TracedValue* attributes_for_testing() const { return attributes_.get(); } + const std::vector<Entry>& entries_for_testing() const { return entries_; } + + // Decprecated testing method. Use entries_for_testing instead. + // TODO(hjd): Remove this and refactor callers to use entries_for_testing then + // inline DumpAttributes. + std::unique_ptr<TracedValue> attributes_for_testing() const; private: + void DumpAttributes(TracedValue* value) const; + const std::string absolute_name_; ProcessMemoryDump* const process_memory_dump_; // Not owned (PMD owns this). - std::unique_ptr<TracedValue> attributes_; MemoryAllocatorDumpGuid guid_; int flags_; // See enum Flags. uint64_t size_; - // A local buffer for Sprintf conversion on fastpath. Avoids allocating - // temporary strings on each AddScalar() call. - std::string string_conversion_buffer_; + std::vector<Entry> entries_; DISALLOW_COPY_AND_ASSIGN(MemoryAllocatorDump); };
diff --git a/base/trace_event/memory_allocator_dump_unittest.cc b/base/trace_event/memory_allocator_dump_unittest.cc index 03805162..91917f6f 100644 --- a/base/trace_event/memory_allocator_dump_unittest.cc +++ b/base/trace_event/memory_allocator_dump_unittest.cc
@@ -15,8 +15,13 @@ #include "base/trace_event/trace_event_argument.h" #include "base/values.h" #include "build/build_config.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +using testing::ElementsAre; +using testing::Eq; +using testing::ByRef; + namespace base { namespace trace_event { @@ -149,6 +154,7 @@ pmd.GetAllocatorDump("foobar_allocator/sub_heap/empty"); ASSERT_NE(nullptr, empty_sub_heap); EXPECT_EQ("foobar_allocator/sub_heap/empty", empty_sub_heap->absolute_name()); + auto raw_attrs = empty_sub_heap->attributes_for_testing()->ToBaseValue(); DictionaryValue* attrs = nullptr; ASSERT_TRUE(raw_attrs->GetAsDictionary(&attrs)); @@ -170,6 +176,27 @@ EXPECT_EQ(1u, dump->GetSizeInternal()); } +TEST(MemoryAllocatorDumpTest, ReadValues) { + MemoryDumpArgs dump_args = {MemoryDumpLevelOfDetail::DETAILED}; + ProcessMemoryDump pmd(new HeapProfilerSerializationState, dump_args); + MemoryAllocatorDump* dump = pmd.CreateAllocatorDump("allocator_for_size"); + dump->AddScalar("one", "byte", 1); + dump->AddString("one", "object", "one"); + + MemoryAllocatorDump::Entry expected_scalar("one", "byte", 1); + MemoryAllocatorDump::Entry expected_string("one", "object", "one"); + EXPECT_THAT( + dump->entries_for_testing(), + ElementsAre(Eq(ByRef(expected_scalar)), Eq(ByRef(expected_string)))); +} + +TEST(MemoryAllocatorDumpTest, MovingAnEntry) { + MemoryAllocatorDump::Entry expected_entry("one", "byte", 1); + MemoryAllocatorDump::Entry from_entry("one", "byte", 1); + MemoryAllocatorDump::Entry to_entry = std::move(from_entry); + EXPECT_EQ(expected_entry, to_entry); +} + // DEATH tests are not supported in Android/iOS/Fuchsia. #if !defined(NDEBUG) && !defined(OS_ANDROID) && !defined(OS_IOS) && \ !defined(OS_FUCHSIA) @@ -183,6 +210,14 @@ ASSERT_DEATH(pmd.CreateAllocatorDump("bar_allocator/heap"), ""); ASSERT_DEATH(pmd.CreateAllocatorDump(""), ""); } + +TEST(MemoryAllocatorDumpTest, ForbidStringsInBackgroundModeDeathTest) { + MemoryDumpArgs dump_args = {MemoryDumpLevelOfDetail::BACKGROUND}; + ProcessMemoryDump pmd(new HeapProfilerSerializationState, dump_args); + MemoryAllocatorDump* dump = pmd.CreateAllocatorDump("malloc"); + ASSERT_DEATH(dump->AddString("foo", "bar", "baz"), ""); +} + #endif } // namespace trace_event
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn index 2bae737d..b07bf34 100644 --- a/build/android/BUILD.gn +++ b/build/android/BUILD.gn
@@ -99,7 +99,6 @@ _rebased_output_so = rebase_path(_output_so, root_build_dir) args = [ _rebased_strip_bin, - "--strip-unneeded", "-o", _rebased_output_so, _rebased_input_so,
diff --git a/build/android/lint/suppressions.xml b/build/android/lint/suppressions.xml index 5640000..1ff2da8 100644 --- a/build/android/lint/suppressions.xml +++ b/build/android/lint/suppressions.xml
@@ -300,7 +300,7 @@ </issue> <!-- Our generated enums are allowed to have the same values. --> <issue id="UniqueConstants" severity="ignore"/> - <!-- Please add specific rationale to each unused resources suppression. --> + <!-- Do not add new suppressions without very good rationale. --> <issue id="UnusedResources"> <!-- 3 raw resources are accessed by URL in various places --> <ignore regexp="PRODUCT_DIR/gen/remoting/android/.*/res/raw/credits.html"/> @@ -309,19 +309,17 @@ <!-- 2 dimens override support library's res, will be changing soon --> <ignore regexp="R.dimen.design_bottom_navigation_text_size"/> <ignore regexp="R.dimen.design_bottom_navigation_active_text_size"/> - <!-- 1 string is used in CronetSmokeTestCase dynamically --> + <!-- 1 string test only, used in CronetSmokeTestCase dynamically --> <ignore regexp="R.string.TestSupportImplClass"/> <!-- 1 string used by Android's policies system, pulled from app directly --> <ignore regexp="restriction_values.xml"/> - <!-- 3 resources used by android webview tests, doesn't affect binary size --> + <!-- 3 resources test only, used in webview tests dynamically --> <ignore regexp="android_webview/tools/automated_ui_tests/java/res/layout/"/> <ignore regexp="android_webview/test/shell/res/raw/resource_file.html"/> <ignore regexp="android_webview/test/shell/res/raw/resource_icon.png"/> <!-- 2 resources used by android webview glue layer, could be refactored --> <ignore regexp="android_webview/java/res/drawable-hdpi/ic_play_circle_outline_black_48dp.png"/> <ignore regexp="R.string.private_browsing_warning"/> - <!-- 1 set of strings used dynamically by remoting apk --> - <ignore regexp="R.string.offline_reason_*"/> </issue> <issue id="UseCompoundDrawables"> <!-- Upscaling 24dp to 48dp doesn't work as expected with a TextView compound drawable. -->
diff --git a/build/fuchsia/runner_common.py b/build/fuchsia/runner_common.py index 21c5c67..4e29876 100755 --- a/build/fuchsia/runner_common.py +++ b/build/fuchsia/runner_common.py
@@ -347,6 +347,9 @@ '-machine', 'q35', '-kernel', kernel_path, '-initrd', bootfs, + '-smp', '4', + '-enable-kvm', + '-cpu', 'host,migratable=no', # Configure virtual network. It is used in the tests to connect to # testserver running on the host. @@ -364,12 +367,6 @@ '-append', 'TERM=dumb kernel.halt_on_panic=true', ] - if _IsRunningOnBot(): - qemu_command += ['-smp', '1', '-cpu', 'Haswell,+smap,-check'] - else: - # Bot executions can't (currently) enable KVM. - qemu_command += ['-smp', '4', '-enable-kvm', '-cpu', 'host,migratable=no'] - if dry_run: print 'Run:', ' '.join(qemu_command) return 0
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index 24f3808..dfccaf7a 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -103,7 +103,12 @@ parser.add_argument('--gtest_filter', help='GTest filter to use in place of any default.') parser.add_argument('--gtest_repeat', - help='GTest repeat value to use.') + help='GTest repeat value to use. This also disables the ' + 'test launcher timeout.') + parser.add_argument('--gtest_break_on_failure', action='store_true', + default=False, + help='Should GTest break on failure; useful with ' + '--gtest_repeat.') parser.add_argument('--single-process-tests', action='store_true', default=False, help='Runs the tests and the launcher in the same ' @@ -129,12 +134,6 @@ child_args = ['--test-launcher-retry-limit=0'] - if int(os.environ.get('CHROME_HEADLESS', 0)) != 0: - # When running on bots (without KVM) execution is quite slow. The test - # launcher times out a subprocess after 45s which can be too short. Make the - # timeout twice as long. - child_args.append('--test-launcher-timeout=90000') - if args.single_process_tests: child_args.append('--single-process-tests') @@ -150,6 +149,9 @@ child_args.append('--gtest_filter=' + args.gtest_filter) if args.gtest_repeat: child_args.append('--gtest_repeat=' + args.gtest_repeat) + child_args.append('--test-launcher-timeout=-1') + if args.gtest_break_on_failure: + child_args.append('--gtest_break_on_failure') if args.child_args: child_args.extend(args.child_args)
diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py index 54ae29d..16c9c37 100755 --- a/build/mac_toolchain.py +++ b/build/mac_toolchain.py
@@ -51,13 +51,6 @@ TOOLCHAIN_URL = 'gs://chrome-mac-sdk/' -# This logic is duplicated from build/mac/should_use_hermetic_xcode.py. It is a -# temporary hack while waiting for a more comprehensive solution in -# https://crbug.com/742527. -def _IsCorpMachine(): - return os.path.isdir('/Library/GoogleCorpSupport/') - - def PlatformMeetsHermeticXcodeRequirements(target_os): if target_os == 'ios': return True @@ -65,14 +58,14 @@ def GetPlatforms(): - default_target_os = ["mac"] + target_os = set(['mac']) try: env = {} execfile(GCLIENT_CONFIG, env, env) - return env.get('target_os', default_target_os) + target_os |= set(env.get('target_os', target_os)) except: pass - return default_target_os + return target_os def ReadStampFile(target_os): @@ -267,7 +260,7 @@ print 'OS version does not support toolchain.' continue - if target_os == 'ios' and not _IsCorpMachine(): + if target_os == 'ios': default_version = IOS_TOOLCHAIN_VERSION toolchain_filename = 'ios-toolchain-%s.tgz' else:
diff --git a/build/toolchain/android/BUILD.gn b/build/toolchain/android/BUILD.gn index 9beaef9..69a5467 100644 --- a/build/toolchain/android/BUILD.gn +++ b/build/toolchain/android/BUILD.gn
@@ -64,7 +64,7 @@ ld = cxx readelf = _tool_prefix + "readelf" nm = _tool_prefix + "nm" - strip = "${_tool_prefix}strip" + strip = rebase_path("//third_party/eu-strip/bin/eu-strip", root_build_dir) use_unstripped_as_runtime_outputs = true # Don't use .cr.so for loadable_modules since they are always loaded via
diff --git a/build/toolchain/gcc_link_wrapper.py b/build/toolchain/gcc_link_wrapper.py index 0e256fa..8892f14b 100755 --- a/build/toolchain/gcc_link_wrapper.py +++ b/build/toolchain/gcc_link_wrapper.py
@@ -64,7 +64,7 @@ # Finally, strip the linked executable (if desired). if args.strip: result = subprocess.call(CommandToRun([ - args.strip, '--strip-unneeded', '-o', args.output, args.unstripped_file + args.strip, '-o', args.output, args.unstripped_file ])) return result
diff --git a/build/toolchain/gcc_solink_wrapper.py b/build/toolchain/gcc_solink_wrapper.py index 7efc490..5159fce 100755 --- a/build/toolchain/gcc_solink_wrapper.py +++ b/build/toolchain/gcc_solink_wrapper.py
@@ -122,7 +122,7 @@ # Finally, strip the linked shared object file (if desired). if args.strip: result = subprocess.call(wrapper_utils.CommandToRun( - [args.strip, '--strip-unneeded', '-o', args.output, args.sofile])) + [args.strip, '-o', args.output, args.sofile])) return result
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni index e80d4d9..4dba9e7 100644 --- a/build/toolchain/gcc_toolchain.gni +++ b/build/toolchain/gcc_toolchain.gni
@@ -453,7 +453,7 @@ command = "$ld -shared {{ldflags}}${extra_ldflags} -o \"$unstripped_sofile\" -Wl,-soname=\"$soname\" @\"$rspfile\"" if (defined(invoker.strip)) { - strip_command = "${invoker.strip} --strip-unneeded -o \"$sofile\" \"$unstripped_sofile\"" + strip_command = "${invoker.strip} -o \"$sofile\" \"$unstripped_sofile\"" command += " && " + strip_command } rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix"
diff --git a/build/toolchain/goma.gni b/build/toolchain/goma.gni index aeabfa91..d7c2036f 100644 --- a/build/toolchain/goma.gni +++ b/build/toolchain/goma.gni
@@ -9,7 +9,7 @@ use_goma = false # Set the default value based on the platform. - if (is_win) { + if (host_os == "win") { # Absolute directory containing the gomacc.exe binary. goma_dir = "C:\goma\goma-win64" } else {
diff --git a/build/toolchain/win/BUILD.gn b/build/toolchain/win/BUILD.gn index bace798..a113979 100644 --- a/build/toolchain/win/BUILD.gn +++ b/build/toolchain/win/BUILD.gn
@@ -23,7 +23,11 @@ tool_wrapper_path = rebase_path("tool_wrapper.py", root_build_dir) if (use_goma) { - goma_prefix = "$goma_dir/gomacc.exe " + if (host_os == "win") { + goma_prefix = "$goma_dir/gomacc.exe " + } else { + goma_prefix = "$goma_dir/gomacc " + } } else { goma_prefix = "" }
diff --git a/build/toolchain/win/midl.gni b/build/toolchain/win/midl.gni index 08b5586..90f9810b 100644 --- a/build/toolchain/win/midl.gni +++ b/build/toolchain/win/midl.gni
@@ -40,12 +40,7 @@ action_foreach(action_name) { visibility = [ ":$source_set_name" ] - - # This functionality is handled by the win-tool because the GYP build has - # MIDL support built-in. - # TODO(brettw) move this to a separate MIDL wrapper script for better - # clarity. - script = "//build/toolchain/win/tool_wrapper.py" + script = "//build/toolchain/win/midl.py" sources = invoker.sources @@ -69,7 +64,6 @@ } args = [ - "midl-wrapper", win_tool_arch, rebase_path(out_dir, root_build_dir), type_library_file,
diff --git a/build/toolchain/win/midl.py b/build/toolchain/win/midl.py new file mode 100644 index 0000000..b7fdc5c --- /dev/null +++ b/build/toolchain/win/midl.py
@@ -0,0 +1,43 @@ +# 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 os +import subprocess +import sys + + +def main(arch, outdir, tlb, h, dlldata, iid, proxy, idl, *flags): + # Read the environment block from the file. This is stored in the format used + # by CreateProcess. Drop last 2 NULs, one for list terminator, one for + # trailing vs. separator. + env_pairs = open(arch).read()[:-2].split('\0') + env_dict = dict([item.split('=', 1) for item in env_pairs]) + + args = ['midl', '/nologo'] + list(flags) + [ + '/out', outdir, + '/tlb', tlb, + '/h', h, + '/dlldata', dlldata, + '/iid', iid, + '/proxy', proxy, + idl] + popen = subprocess.Popen(args, shell=True, env=env_dict, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + out, _ = popen.communicate() + # Filter junk out of stdout, and write filtered versions. Output we want + # to filter is pairs of lines that look like this: + # Processing C:\Program Files (x86)\Microsoft SDKs\...\include\objidl.idl + # objidl.idl + lines = out.splitlines() + prefixes = ('Processing ', '64 bit Processing ') + processing = set(os.path.basename(x) + for x in lines if x.startswith(prefixes)) + for line in lines: + if not line.startswith(prefixes) and line not in processing: + print line + return popen.returncode + + +if __name__ == '__main__': + sys.exit(main(*sys.argv[1:]))
diff --git a/build/toolchain/win/tool_wrapper.py b/build/toolchain/win/tool_wrapper.py index 4d749ef..ce29cbc6 100644 --- a/build/toolchain/win/tool_wrapper.py +++ b/build/toolchain/win/tool_wrapper.py
@@ -145,36 +145,6 @@ print line, return link.wait() - def ExecMidlWrapper(self, arch, outdir, tlb, h, dlldata, iid, proxy, idl, - *flags): - """Filter noisy filenames output from MIDL compile step that isn't - quietable via command line flags. - """ - args = ['midl', '/nologo'] + list(flags) + [ - '/out', outdir, - '/tlb', tlb, - '/h', h, - '/dlldata', dlldata, - '/iid', iid, - '/proxy', proxy, - idl] - env = self._GetEnv(arch) - popen = subprocess.Popen(args, shell=True, env=env, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - out, _ = popen.communicate() - # Filter junk out of stdout, and write filtered versions. Output we want - # to filter is pairs of lines that look like this: - # Processing C:\Program Files (x86)\Microsoft SDKs\...\include\objidl.idl - # objidl.idl - lines = out.splitlines() - prefixes = ('Processing ', '64 bit Processing ') - processing = set(os.path.basename(x) - for x in lines if x.startswith(prefixes)) - for line in lines: - if not line.startswith(prefixes) and line not in processing: - print line - return popen.returncode - def ExecAsmWrapper(self, arch, *args): """Filter logo banner from invocations of asm.exe.""" env = self._GetEnv(arch)
diff --git a/build/win/copy_cdb_to_output.py b/build/win/copy_cdb_to_output.py index 33bcac7..1744f77ff 100755 --- a/build/win/copy_cdb_to_output.py +++ b/build/win/copy_cdb_to_output.py
@@ -78,7 +78,7 @@ dst_winext_dir = os.path.join(output_dir, 'winext') src_winxp_dir = os.path.join(src_dir, 'winxp') dst_winxp_dir = os.path.join(output_dir, 'winxp') - src_crt_dir = os.path.join(win_sdk_dir, r'Redist\ucrt\DLLs', src_arch) + src_crt_dir = os.path.join(win_sdk_dir, 'Redist', 'ucrt', 'DLLs', src_arch) _ConditionalMkdir(dst_winext_dir) _ConditionalMkdir(dst_winxp_dir) # Note that the outputs from the "copy_cdb_to_output" target need to
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index aadcb0a..c53c861 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -37,6 +37,7 @@ "input/main_thread_scrolling_reason.h", "input/page_scale_animation.cc", "input/page_scale_animation.h", + "input/scroll_boundary_behavior.h", "input/scroll_elasticity_helper.cc", "input/scroll_elasticity_helper.h", "input/scroll_state.cc",
diff --git a/cc/input/input_handler.h b/cc/input/input_handler.h index 8ba5b1e..c977924 100644 --- a/cc/input/input_handler.h +++ b/cc/input/input_handler.h
@@ -12,6 +12,7 @@ #include "cc/cc_export.h" #include "cc/input/event_listener_properties.h" #include "cc/input/main_thread_scrolling_reason.h" +#include "cc/input/scroll_boundary_behavior.h" #include "cc/input/scroll_state.h" #include "cc/input/scrollbar.h" #include "cc/input/touch_action.h" @@ -45,6 +46,9 @@ // The amount of the scroll delta argument to this ScrollBy call that was not // used for scrolling. gfx::Vector2dF unused_scroll_delta; + // How the browser should handle the overscroll navigation based on the css + // property scroll-boundary-behavior. + ScrollBoundaryBehavior scroll_boundary_behavior; }; class CC_EXPORT InputHandlerClient {
diff --git a/cc/input/scroll_boundary_behavior.h b/cc/input/scroll_boundary_behavior.h index 878a5a4..94a958b 100644 --- a/cc/input/scroll_boundary_behavior.h +++ b/cc/input/scroll_boundary_behavior.h
@@ -18,7 +18,8 @@ kScrollBoundaryBehaviorTypeAuto, // Hint to disable scroll chaining. The user agent may show an appropriate // overscroll affordance. - kScrollBoundaryBehaviorTypeContain + kScrollBoundaryBehaviorTypeContain, + kScrollBoundaryBehaviorTypeMax = kScrollBoundaryBehaviorTypeContain }; ScrollBoundaryBehavior()
diff --git a/cc/input/scroll_state.h b/cc/input/scroll_state.h index eb0c7fa..cd67190 100644 --- a/cc/input/scroll_state.h +++ b/cc/input/scroll_state.h
@@ -97,6 +97,10 @@ bool caused_scroll_x() const { return data_.caused_scroll_x; } bool caused_scroll_y() const { return data_.caused_scroll_y; } + void set_is_scroll_chain_cut(bool cut) { data_.is_scroll_chain_cut = cut; } + + bool is_scroll_chain_cut() const { return data_.is_scroll_chain_cut; } + LayerTreeImpl* layer_tree_impl() { return layer_tree_impl_; } ScrollStateData* data() { return &data_; }
diff --git a/cc/input/scroll_state_data.cc b/cc/input/scroll_state_data.cc index ff2c628..f5bad71 100644 --- a/cc/input/scroll_state_data.cc +++ b/cc/input/scroll_state_data.cc
@@ -26,6 +26,7 @@ delta_granularity(0), caused_scroll_x(false), caused_scroll_y(false), + is_scroll_chain_cut(false), current_native_scrolling_node_(nullptr) {} ScrollStateData::ScrollStateData(const ScrollStateData& other) = default;
diff --git a/cc/input/scroll_state_data.h b/cc/input/scroll_state_data.h index ba33e46..cb5ec62 100644 --- a/cc/input/scroll_state_data.h +++ b/cc/input/scroll_state_data.h
@@ -59,6 +59,13 @@ bool caused_scroll_x; bool caused_scroll_y; + // Track if the scroll_chain has been cut by scroll_boundary_behavior, in + // order to properly handle overscroll-effects. + // TODO(sunyunjia): overscroll should be handled at the top of scroll_chain, + // as implemented at blink side. This field should be removed after it's + // resolved. crbug.com/755164. + bool is_scroll_chain_cut; + ScrollNode* current_native_scrolling_node() const; void set_current_native_scrolling_node( ScrollNode* current_native_scrolling_node);
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc index 9d41242..9718cc70 100644 --- a/cc/output/overlay_unittest.cc +++ b/cc/output/overlay_unittest.cc
@@ -2354,7 +2354,8 @@ renderer_->SwapBuffersComplete(); } void ReturnResourceInUseQuery(viz::ResourceId id) { - ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), + id); gpu::TextureInUseResponse response; response.texture = lock.texture_id(); response.in_use = false;
diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc index b907126..37ccbf1 100644 --- a/cc/output/software_renderer.cc +++ b/cc/output/software_renderer.cc
@@ -456,8 +456,8 @@ DCHECK(content_texture->id()); DCHECK(IsSoftwareResource(content_texture->id())); - ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, - content_texture->id()); + DisplayResourceProvider::ScopedReadLockSoftware lock(resource_provider_, + content_texture->id()); if (!lock.valid()) return; @@ -509,11 +509,12 @@ SkShader::kClamp_TileMode, &content_mat); } - std::unique_ptr<ResourceProvider::ScopedReadLockSoftware> mask_lock; + std::unique_ptr<DisplayResourceProvider::ScopedReadLockSoftware> mask_lock; if (quad->mask_resource_id()) { - mask_lock = std::unique_ptr<ResourceProvider::ScopedReadLockSoftware>( - new ResourceProvider::ScopedReadLockSoftware(resource_provider_, - quad->mask_resource_id())); + mask_lock = + std::unique_ptr<DisplayResourceProvider::ScopedReadLockSoftware>( + new DisplayResourceProvider::ScopedReadLockSoftware( + resource_provider_, quad->mask_resource_id())); if (!mask_lock->valid()) return;
diff --git a/cc/resources/display_resource_provider.cc b/cc/resources/display_resource_provider.cc index a6af4d4..2e9e70b 100644 --- a/cc/resources/display_resource_provider.cc +++ b/cc/resources/display_resource_provider.cc
@@ -209,6 +209,21 @@ return it->second.child_to_parent_map; } +DisplayResourceProvider::ScopedReadLockGL::ScopedReadLockGL( + DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id) + : resource_provider_(resource_provider), resource_id_(resource_id) { + const Resource* resource = resource_provider->LockForRead(resource_id); + texture_id_ = resource->gl_id; + target_ = resource->target; + size_ = resource->size; + color_space_ = resource->color_space; +} + +DisplayResourceProvider::ScopedReadLockGL::~ScopedReadLockGL() { + resource_provider_->UnlockForRead(resource_id_); +} + DisplayResourceProvider::ScopedSamplerGL::ScopedSamplerGL( DisplayResourceProvider* resource_provider, viz::ResourceId resource_id, @@ -269,4 +284,16 @@ resource_provider_->UnlockForRead(resource_id_); } +DisplayResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware( + DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id) + : resource_provider_(resource_provider), resource_id_(resource_id) { + const Resource* resource = resource_provider->LockForRead(resource_id); + resource_provider->PopulateSkBitmapWithResource(&sk_bitmap_, resource); +} + +DisplayResourceProvider::ScopedReadLockSoftware::~ScopedReadLockSoftware() { + resource_provider_->UnlockForRead(resource_id_); +} + } // namespace cc
diff --git a/cc/resources/display_resource_provider.h b/cc/resources/display_resource_provider.h index 549d006..3358663 100644 --- a/cc/resources/display_resource_provider.h +++ b/cc/resources/display_resource_provider.h
@@ -39,6 +39,32 @@ const OverlayCandidateList::PromotionHintInfoMap& promotion_hints); #endif + // The following lock classes are part of the DisplayResourceProvider API and + // are needed to read the resource contents. The user must ensure that they + // only use GL locks on GL resources, etc, and this is enforced by assertions. + class CC_EXPORT ScopedReadLockGL { + public: + ScopedReadLockGL(DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id); + ~ScopedReadLockGL(); + + GLuint texture_id() const { return texture_id_; } + GLenum target() const { return target_; } + const gfx::Size& size() const { return size_; } + const gfx::ColorSpace& color_space() const { return color_space_; } + + private: + DisplayResourceProvider* const resource_provider_; + const viz::ResourceId resource_id_; + + GLuint texture_id_; + GLenum target_; + gfx::Size size_; + gfx::ColorSpace color_space_; + + DISALLOW_COPY_AND_ASSIGN(ScopedReadLockGL); + }; + class CC_EXPORT ScopedSamplerGL { public: ScopedSamplerGL(DisplayResourceProvider* resource_provider, @@ -82,6 +108,27 @@ DISALLOW_COPY_AND_ASSIGN(ScopedReadLockSkImage); }; + class CC_EXPORT ScopedReadLockSoftware { + public: + ScopedReadLockSoftware(DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id); + ~ScopedReadLockSoftware(); + + const SkBitmap* sk_bitmap() const { + DCHECK(valid()); + return &sk_bitmap_; + } + + bool valid() const { return !!sk_bitmap_.getPixels(); } + + private: + DisplayResourceProvider* const resource_provider_; + const viz::ResourceId resource_id_; + SkBitmap sk_bitmap_; + + DISALLOW_COPY_AND_ASSIGN(ScopedReadLockSoftware); + }; + // All resources that are returned to children while an instance of this // class exists will be stored and returned when the instance is destroyed. class CC_EXPORT ScopedBatchReturnResources {
diff --git a/cc/resources/layer_tree_resource_provider.h b/cc/resources/layer_tree_resource_provider.h index cfae403..95c1f39 100644 --- a/cc/resources/layer_tree_resource_provider.h +++ b/cc/resources/layer_tree_resource_provider.h
@@ -46,6 +46,10 @@ void ReceiveReturnsFromParent( const std::vector<viz::ReturnedResource>& transferable_resources); + // The following lock classes are part of the LayerTreeResourceProvider API + // and are needed to write the resource contents. The user must ensure that + // they only use GL locks on GL resources, etc, and this is enforced by + // assertions. class CC_EXPORT ScopedWriteLockGpuMemoryBuffer { public: ScopedWriteLockGpuMemoryBuffer(LayerTreeResourceProvider* resource_provider,
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index c1ca287..c1c28b5f 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc
@@ -1015,21 +1015,6 @@ resource->read_lock_fences_enabled = true; } -ResourceProvider::ScopedReadLockGL::ScopedReadLockGL( - ResourceProvider* resource_provider, - viz::ResourceId resource_id) - : resource_provider_(resource_provider), resource_id_(resource_id) { - const Resource* resource = resource_provider->LockForRead(resource_id); - texture_id_ = resource->gl_id; - target_ = resource->target; - size_ = resource->size; - color_space_ = resource->color_space; -} - -ResourceProvider::ScopedReadLockGL::~ScopedReadLockGL() { - resource_provider_->UnlockForRead(resource_id_); -} - ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL( ResourceProvider* resource_provider, viz::ResourceId resource_id) @@ -1211,18 +1196,6 @@ sk_bitmap->installPixels(info, resource->pixels, info.minRowBytes()); } -ResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware( - ResourceProvider* resource_provider, - viz::ResourceId resource_id) - : resource_provider_(resource_provider), resource_id_(resource_id) { - const Resource* resource = resource_provider->LockForRead(resource_id); - resource_provider->PopulateSkBitmapWithResource(&sk_bitmap_, resource); -} - -ResourceProvider::ScopedReadLockSoftware::~ScopedReadLockSoftware() { - resource_provider_->UnlockForRead(resource_id_); -} - ResourceProvider::ScopedWriteLockSoftware::ScopedWriteLockSoftware( ResourceProvider* resource_provider, viz::ResourceId resource_id)
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index 1f9ce94b..1b0b67b0 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h
@@ -187,29 +187,6 @@ // needed to read and write the resource contents. The user must ensure // that they only use GL locks on GL resources, etc, and this is enforced // by assertions. - class CC_EXPORT ScopedReadLockGL { - public: - ScopedReadLockGL(ResourceProvider* resource_provider, - viz::ResourceId resource_id); - ~ScopedReadLockGL(); - - GLuint texture_id() const { return texture_id_; } - GLenum target() const { return target_; } - const gfx::Size& size() const { return size_; } - const gfx::ColorSpace& color_space() const { return color_space_; } - - private: - ResourceProvider* const resource_provider_; - const viz::ResourceId resource_id_; - - GLuint texture_id_; - GLenum target_; - gfx::Size size_; - gfx::ColorSpace color_space_; - - DISALLOW_COPY_AND_ASSIGN(ScopedReadLockGL); - }; - class CC_EXPORT ScopedWriteLockGL { public: ScopedWriteLockGL(ResourceProvider* resource_provider, @@ -299,27 +276,6 @@ DISALLOW_COPY_AND_ASSIGN(ScopedSkSurface); }; - class CC_EXPORT ScopedReadLockSoftware { - public: - ScopedReadLockSoftware(ResourceProvider* resource_provider, - viz::ResourceId resource_id); - ~ScopedReadLockSoftware(); - - const SkBitmap* sk_bitmap() const { - DCHECK(valid()); - return &sk_bitmap_; - } - - bool valid() const { return !!sk_bitmap_.getPixels(); } - - private: - ResourceProvider* const resource_provider_; - const viz::ResourceId resource_id_; - SkBitmap sk_bitmap_; - - DISALLOW_COPY_AND_ASSIGN(ScopedReadLockSoftware); - }; - class CC_EXPORT ScopedWriteLockSoftware { public: ScopedWriteLockSoftware(ResourceProvider* resource_provider,
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc index 87f86a7..f360486 100644 --- a/cc/resources/resource_provider_unittest.cc +++ b/cc/resources/resource_provider_unittest.cc
@@ -413,15 +413,15 @@ switch (resource_provider->default_resource_type()) { case ResourceProvider::RESOURCE_TYPE_GPU_MEMORY_BUFFER: case ResourceProvider::RESOURCE_TYPE_GL_TEXTURE: { - ResourceProvider::ScopedReadLockGL lock_gl(resource_provider, id); + DisplayResourceProvider::ScopedReadLockGL lock_gl(resource_provider, id); ASSERT_NE(0U, lock_gl.texture_id()); context->bindTexture(GL_TEXTURE_2D, lock_gl.texture_id()); context->GetPixels(size, format, pixels); break; } case ResourceProvider::RESOURCE_TYPE_BITMAP: { - ResourceProvider::ScopedReadLockSoftware lock_software(resource_provider, - id); + DisplayResourceProvider::ScopedReadLockSoftware lock_software( + resource_provider, id); memcpy(pixels, lock_software.sk_bitmap()->getPixels(), lock_software.sk_bitmap()->getSize()); @@ -712,8 +712,8 @@ context3d_->last_waited_sync_token()); { resource_provider_->WaitSyncToken(list[0].id); - ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), - list[0].id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), + list[0].id); } EXPECT_EQ(list[0].mailbox_holder.sync_token, context3d_->last_waited_sync_token()); @@ -758,13 +758,13 @@ { resource_provider_->WaitSyncToken(mapped_id1); - ResourceProvider::ScopedReadLockGL lock1(resource_provider_.get(), - mapped_id1); + DisplayResourceProvider::ScopedReadLockGL lock1(resource_provider_.get(), + mapped_id1); EXPECT_TRUE(lock1.color_space() == color_space1); resource_provider_->WaitSyncToken(mapped_id4); - ResourceProvider::ScopedReadLockGL lock4(resource_provider_.get(), - mapped_id4); + DisplayResourceProvider::ScopedReadLockGL lock4(resource_provider_.get(), + mapped_id4); EXPECT_TRUE(lock4.color_space() == color_space4); } @@ -824,21 +824,17 @@ { child_resource_provider_->WaitSyncToken(id1); - ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(), - id1); - ASSERT_NE(0U, lock.texture_id()); - child_context_->bindTexture(GL_TEXTURE_2D, lock.texture_id()); - child_context_->GetPixels(size, format, result); - EXPECT_EQ(0, memcmp(data1, result, pixel_size)); + ResourceProvider::ScopedWriteLockGL lock(child_resource_provider_.get(), + id1); + ASSERT_NE(0U, lock.GetTexture()); } // Ensure copying to resource doesn't fail. child_resource_provider_->CopyToResource(id2, data2, size); { child_resource_provider_->WaitSyncToken(id3); - ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(), - id3); - ASSERT_NE(0U, lock.texture_id()); - child_context_->bindTexture(GL_TEXTURE_2D, lock.texture_id()); + ResourceProvider::ScopedWriteLockGL lock(child_resource_provider_.get(), + id3); + ASSERT_NE(0U, lock.GetTexture()); } { // Transfer resources to the parent again. @@ -951,8 +947,8 @@ resource_provider_->ReceiveFromChild(child_id, list); { resource_provider_->WaitSyncToken(list[0].id); - ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), - list[0].id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), + list[0].id); } EXPECT_EQ(list[0].mailbox_holder.sync_token, @@ -1141,11 +1137,13 @@ resource_provider_->ReceiveFromChild(child_id, list); - std::vector<std::unique_ptr<ResourceProvider::ScopedReadLockGL>> read_locks; + std::vector<std::unique_ptr<DisplayResourceProvider::ScopedReadLockGL>> + read_locks; for (auto& parent_resource : list) { resource_provider_->WaitSyncToken(parent_resource.id); - read_locks.push_back(std::make_unique<ResourceProvider::ScopedReadLockGL>( - resource_provider_.get(), parent_resource.id)); + read_locks.push_back( + std::make_unique<DisplayResourceProvider::ScopedReadLockGL>( + resource_provider_.get(), parent_resource.id)); } resource_provider_->DeclareUsedResourcesFromChild(child_id, @@ -1199,8 +1197,8 @@ resource_provider_->ReceiveFromChild(child_id, list); resource_provider_->WaitSyncToken(list[0].id); - ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), - list[0].id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), + list[0].id); resource_provider_->DeclareUsedResourcesFromChild(child_id, viz::ResourceIdSet()); @@ -1210,16 +1208,11 @@ EXPECT_EQ(1u, returned_to_child.size()); child_resource_provider_->ReceiveReturnsFromParent(returned_to_child); - { - child_resource_provider_->WaitSyncToken(id1); - ResourceProvider::ScopedReadLockGL lock(child_resource_provider_.get(), - id1); - child_resource_provider_->DeleteResource(id1); - EXPECT_EQ(1u, child_resource_provider_->num_resources()); - EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); - } - + child_resource_provider_->WaitSyncToken(id1); + EXPECT_EQ(1u, child_resource_provider_->num_resources()); + child_resource_provider_->DeleteResource(id1); EXPECT_EQ(0u, child_resource_provider_->num_resources()); + resource_provider_->DestroyChild(child_id); } @@ -1271,8 +1264,8 @@ { unsigned parent_id = list.front().id; resource_provider_->WaitSyncToken(parent_id); - ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), - parent_id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), + parent_id); } resource_provider_->DeclareUsedResourcesFromChild(child_id, viz::ResourceIdSet()); @@ -1334,8 +1327,8 @@ for (size_t i = 0; i < list.size(); i++) { unsigned parent_id = list[i].id; resource_provider_->WaitSyncToken(parent_id); - ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), - parent_id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), + parent_id); } } EXPECT_EQ(0u, returned_to_child.size()); @@ -1399,8 +1392,8 @@ for (size_t i = 0; i < list.size(); i++) { unsigned parent_id = list[i].id; resource_provider_->WaitSyncToken(parent_id); - ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), - parent_id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), + parent_id); } } EXPECT_EQ(0u, returned_to_child.size()); @@ -1548,20 +1541,20 @@ EXPECT_FALSE(child_resource_provider_->InUseByConsumer(id3)); { - ResourceProvider::ScopedReadLockSoftware lock( + ResourceProvider::ScopedWriteLockSoftware lock( child_resource_provider_.get(), id1); - const SkBitmap* sk_bitmap = lock.sk_bitmap(); - EXPECT_EQ(sk_bitmap->width(), size.width()); - EXPECT_EQ(sk_bitmap->height(), size.height()); - EXPECT_EQ(0, memcmp(data1, sk_bitmap->getPixels(), pixel_size)); + const SkBitmap sk_bitmap = lock.sk_bitmap(); + EXPECT_EQ(sk_bitmap.width(), size.width()); + EXPECT_EQ(sk_bitmap.height(), size.height()); + EXPECT_EQ(0, memcmp(data1, sk_bitmap.getPixels(), pixel_size)); } { - ResourceProvider::ScopedReadLockSoftware lock( + ResourceProvider::ScopedWriteLockSoftware lock( child_resource_provider_.get(), id2); - const SkBitmap* sk_bitmap = lock.sk_bitmap(); - EXPECT_EQ(sk_bitmap->width(), size.width()); - EXPECT_EQ(sk_bitmap->height(), size.height()); - EXPECT_EQ(0, memcmp(data2, sk_bitmap->getPixels(), pixel_size)); + const SkBitmap sk_bitmap = lock.sk_bitmap(); + EXPECT_EQ(sk_bitmap.width(), size.width()); + EXPECT_EQ(sk_bitmap.height(), size.height()); + EXPECT_EQ(0, memcmp(data2, sk_bitmap.getPixels(), pixel_size)); } { // Transfer resources to the parent again. @@ -1712,8 +1705,8 @@ viz::ResourceId mapped_id1 = resource_map[id1]; EXPECT_NE(0u, mapped_id1); { - ResourceProvider::ScopedReadLockSoftware lock(resource_provider_.get(), - mapped_id1); + DisplayResourceProvider::ScopedReadLockSoftware lock( + resource_provider_.get(), mapped_id1); EXPECT_FALSE(lock.valid()); } @@ -1982,8 +1975,8 @@ parent_resource_provider->ReceiveFromChild(child_id, list); { parent_resource_provider->WaitSyncToken(list[0].id); - ResourceProvider::ScopedReadLockGL lock(parent_resource_provider.get(), - list[0].id); + DisplayResourceProvider::ScopedReadLockGL lock( + parent_resource_provider.get(), list[0].id); } Mock::VerifyAndClearExpectations(parent_context); @@ -2600,8 +2593,8 @@ std::unique_ptr<viz::SharedBitmap> shared_bitmap( CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, kBadBeef)); - std::unique_ptr<ResourceProvider> resource_provider( - std::make_unique<ResourceProvider>( + std::unique_ptr<DisplayResourceProvider> resource_provider( + std::make_unique<DisplayResourceProvider>( nullptr, shared_bitmap_manager_.get(), gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(), kDelegatedSyncPointsRequired, kEnableColorCorrectRendering, @@ -2621,7 +2614,8 @@ EXPECT_NE(0u, id); { - ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), id); + DisplayResourceProvider::ScopedReadLockSoftware lock( + resource_provider.get(), id); const SkBitmap* sk_bitmap = lock.sk_bitmap(); EXPECT_EQ(sk_bitmap->width(), size.width()); EXPECT_EQ(sk_bitmap->height(), size.height()); @@ -2794,8 +2788,8 @@ auto context_provider = TestContextProvider::Create(std::move(context_owned)); context_provider->BindToCurrentThread(); - std::unique_ptr<ResourceProvider> resource_provider( - std::make_unique<ResourceProvider>( + std::unique_ptr<DisplayResourceProvider> resource_provider( + std::make_unique<DisplayResourceProvider>( context_provider.get(), shared_bitmap_manager_.get(), gpu_memory_buffer_manager_.get(), nullptr, kDelegatedSyncPointsRequired, kEnableColorCorrectRendering, @@ -2838,7 +2832,7 @@ EXPECT_CALL(*context, produceTextureDirectCHROMIUM(_, _, _)).Times(0); - ResourceProvider::ScopedReadLockGL lock(resource_provider.get(), id); + DisplayResourceProvider::ScopedReadLockGL lock(resource_provider.get(), id); Mock::VerifyAndClearExpectations(context); // When done with it, a sync point should be inserted, but no produce is
diff --git a/cc/tiles/tile_manager_unittest.cc b/cc/tiles/tile_manager_unittest.cc index 3c5a79c..3834ba3e 100644 --- a/cc/tiles/tile_manager_unittest.cc +++ b/cc/tiles/tile_manager_unittest.cc
@@ -1726,9 +1726,9 @@ EXPECT_EQ(TileDrawInfo::RESOURCE_MODE, tile->draw_info().mode()); EXPECT_TRUE(tile->draw_info().IsReadyToDraw()); - ResourceProvider::ScopedReadLockSoftware lock( + ResourceProvider::ScopedWriteLockSoftware lock( host_impl()->resource_provider(), tile->draw_info().resource_id()); - const SkBitmap* bitmap = lock.sk_bitmap(); + const SkBitmap bitmap = lock.sk_bitmap(); for (int x = 0; x < size.width(); ++x) { for (int y = 0; y < size.height(); ++y) { SCOPED_TRACE(y); @@ -1736,12 +1736,12 @@ if (resolutions[i] == LOW_RESOLUTION) { // Since it's low res, the bitmap was not drawn, and the background // (green) is visible instead. - ASSERT_EQ(SK_ColorGREEN, bitmap->getColor(x, y)); + ASSERT_EQ(SK_ColorGREEN, bitmap.getColor(x, y)); } else { EXPECT_EQ(HIGH_RESOLUTION, resolutions[i]); // Since it's high res, the bitmap (blue) was drawn, and the // background is not visible. - ASSERT_EQ(SK_ColorBLUE, bitmap->getColor(x, y)); + ASSERT_EQ(SK_ColorBLUE, bitmap.getColor(x, y)); } } }
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index 797e669..e1faf99 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc
@@ -35,6 +35,7 @@ #include "cc/debug/rendering_stats_instrumentation.h" #include "cc/input/layer_selection_bound.h" #include "cc/input/page_scale_animation.h" +#include "cc/input/scroll_boundary_behavior.h" #include "cc/layers/heads_up_display_layer.h" #include "cc/layers/heads_up_display_layer_impl.h" #include "cc/layers/layer.h" @@ -1015,6 +1016,14 @@ SetNeedsCommit(); } +void LayerTreeHost::SetScrollBoundaryBehavior( + const ScrollBoundaryBehavior& behavior) { + if (scroll_boundary_behavior_ == behavior) + return; + scroll_boundary_behavior_ = behavior; + SetNeedsCommit(); +} + void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor, float min_page_scale_factor, float max_page_scale_factor) { @@ -1267,6 +1276,7 @@ browser_controls_shrink_blink_size_); tree_impl->set_top_controls_height(top_controls_height_); tree_impl->set_bottom_controls_height(bottom_controls_height_); + tree_impl->set_scroll_boundary_behavior(scroll_boundary_behavior_); tree_impl->PushBrowserControlsFromMainThread(top_controls_shown_ratio_); tree_impl->elastic_overscroll()->PushMainToPending(elastic_overscroll_); if (tree_impl->IsActiveTree())
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h index f63d4588..61839e6 100644 --- a/cc/trees/layer_tree_host.h +++ b/cc/trees/layer_tree_host.h
@@ -60,6 +60,7 @@ class MutatorHost; struct PendingPageScaleAnimation; class RenderingStatsInstrumentation; +struct ScrollBoundaryBehavior; class TaskGraphRunner; class UIResourceManager; struct RenderingStats; @@ -293,6 +294,8 @@ float bottom_height, bool shrink); void SetBrowserControlsShownRatio(float ratio); + void SetScrollBoundaryBehavior( + const ScrollBoundaryBehavior& scroll_boundary_behavior); void SetPageScaleFactorAndLimits(float page_scale_factor, float min_page_scale_factor, @@ -606,6 +609,7 @@ float top_controls_height_ = 0.f; float top_controls_shown_ratio_ = 0.f; bool browser_controls_shrink_blink_size_ = false; + ScrollBoundaryBehavior scroll_boundary_behavior_; float bottom_controls_height_ = 0.f;
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 094e63e..8feb8a2 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -2833,16 +2833,6 @@ MainThreadScrollingReason::kNoScrollingLayer; return scroll_status; } - - if (touchpad_and_wheel_scroll_latching_enabled_) { - // TODO(chaopeng) ScrollBegin and ScrollEnd will apply to same layer after - // TouchpadAndWheelScrollLatching land. - ScrollbarAnimationController* animation_controller = - ScrollbarAnimationControllerForElementId(scrolling_node->element_id); - if (animation_controller) - animation_controller->DidScrollBegin(); - } - scroll_status.thread = SCROLL_ON_IMPL_THREAD; mutator_host_->ScrollAnimationAbort(); @@ -2958,22 +2948,10 @@ RecordCompositorSlowScrollMetric(type, MAIN_THREAD); scroll_status.thread = SCROLL_ON_MAIN_THREAD; - - // TODO(chaopeng) ScrollBegin and ScrollEnd will apply to same layer after - // TouchpadAndWheelScrollLatching land. impl scroll will call scroll begin - // in ScrollBeginImpl. - if (touchpad_and_wheel_scroll_latching_enabled_ && scrolling_node) { - ScrollbarAnimationController* animation_controller = - ScrollbarAnimationControllerForElementId(scrolling_node->element_id); - if (animation_controller) - animation_controller->DidScrollBegin(); - } - return scroll_status; - } - - if (scrolling_node) + } else if (scrolling_node) { scroll_affects_scroll_handler_ = active_tree_->have_scroll_event_handlers(); + } return ScrollBeginImpl(scroll_state, scrolling_node, type); } @@ -3213,8 +3191,10 @@ pending_delta -= scroll_delta; - if (!CanPropagate(scroll_node, pending_delta.x(), pending_delta.y())) + if (!CanPropagate(scroll_node, pending_delta.x(), pending_delta.y())) { + scroll_state.set_is_scroll_chain_cut(true); break; + } } } scroll_state.set_is_ending(true); @@ -3477,8 +3457,10 @@ ? scroll_state->delta_y_hint() : scroll_state->delta_y(); - if (!CanPropagate(scroll_node, delta_x, delta_y)) + if (!CanPropagate(scroll_node, delta_x, delta_y)) { + scroll_state->set_is_scroll_chain_cut(true); break; + } } } active_tree_->SetCurrentlyScrollingNode( @@ -3601,6 +3583,12 @@ scroll_result.did_overscroll_root = !unused_root_delta.IsZero(); scroll_result.accumulated_root_overscroll = accumulated_root_overscroll_; scroll_result.unused_scroll_delta = unused_root_delta; + scroll_result.scroll_boundary_behavior = + scroll_state->is_scroll_chain_cut() + ? ScrollBoundaryBehavior( + ScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeNone) + : active_tree()->scroll_boundary_behavior(); if (scroll_result.did_scroll) { // Scrolling can change the root scroll offset, so inform the synchronous @@ -3646,18 +3634,6 @@ DistributeScrollDelta(scroll_state); browser_controls_offset_manager_->ScrollEnd(); - - // TODO(chaopeng) ScrollBegin and ScrollEnd will apply to same layer after - // TouchpadAndWheelScrollLatching land. - if (touchpad_and_wheel_scroll_latching_enabled_) { - if (ScrollNode* scrolling_node = CurrentlyScrollingNode()) { - ScrollbarAnimationController* scrollbar_animation_controller = - ScrollbarAnimationControllerForElementId(scrolling_node->element_id); - if (scrollbar_animation_controller) - scrollbar_animation_controller->DidScrollEnd(); - } - } - ClearCurrentlyScrollingNode(); }
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index e3dc44b..a6ac140b 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -3038,9 +3038,7 @@ base::TimeTicks fake_current_physical_time_; }; -class LayerTreeHostImplTestScrollbarAnimation - : public ::testing::WithParamInterface<bool>, - public LayerTreeHostImplTest { +class LayerTreeHostImplTestScrollbarAnimation : public LayerTreeHostImplTest { protected: void SetupLayers(LayerTreeSettings settings) { host_impl_->ReleaseLayerTreeFrameSink(); @@ -3083,8 +3081,6 @@ } void RunTest(LayerTreeSettings::ScrollbarAnimator animator) { - bool latching = GetParam(); - LayerTreeSettings settings = DefaultSettings(); settings.scrollbar_animator = animator; settings.scrollbar_fade_delay = base::TimeDelta::FromMilliseconds(20); @@ -3095,10 +3091,6 @@ SetupLayers(settings); - // Enable wheel scroll latching flag. - TestInputHandlerClient input_handler_client; - host_impl_->BindToClient(&input_handler_client, latching); - base::TimeTicks fake_now = base::TimeTicks::Now(); // Android Overlay Scrollbar does not have a initial show and fade out. @@ -3130,31 +3122,15 @@ host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), InputHandler::WHEEL); host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2dF(0, 0)).get()); - if (expecting_animations) { - if (latching) { - EXPECT_FALSE(did_request_next_frame_); - EXPECT_FALSE(did_request_redraw_); - EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); - EXPECT_TRUE(animation_task_.Equals(base::Closure())); - } else if (animator == LayerTreeSettings::AURA_OVERLAY) { - EXPECT_FALSE(did_request_redraw_); - EXPECT_EQ(base::TimeDelta::FromMilliseconds(20), - requested_animation_delay_); - EXPECT_FALSE(animation_task_.Equals(base::Closure())); - requested_animation_delay_ = base::TimeDelta(); - animation_task_ = base::Closure(); - } - } host_impl_->ScrollEnd(EndState().get()); EXPECT_FALSE(did_request_next_frame_); EXPECT_FALSE(did_request_redraw_); - if (animator == LayerTreeSettings::AURA_OVERLAY && latching) { + if (animator == LayerTreeSettings::AURA_OVERLAY) { EXPECT_EQ(base::TimeDelta::FromMilliseconds(20), requested_animation_delay_); EXPECT_FALSE(animation_task_.Equals(base::Closure())); requested_animation_delay_ = base::TimeDelta(); animation_task_ = base::Closure(); - did_request_redraw_ = false; } else { EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); EXPECT_TRUE(animation_task_.Equals(base::Closure())); @@ -3173,37 +3149,36 @@ EXPECT_TRUE(animation_task_.Equals(base::Closure())); host_impl_->DidFinishImplFrame(); - // After a scroll, a scrollbar animation should not be scheduled after - // ScrollBegin with latching. + // After a scroll, a scrollbar animation should be scheduled about 20ms from + // now. host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), InputHandler::WHEEL); host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2dF(0, 5)).get()); EXPECT_FALSE(did_request_next_frame_); - if (expecting_animations) { - // With latching, ScrollUpdate after ScrollBegin should not schedule a - // delay fadeout. Without latching, ScrollUpdate should always schedule a - // new delay fadeout. - if (latching) { - EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); - EXPECT_TRUE(animation_task_.Equals(base::Closure())); - } else { - EXPECT_EQ(base::TimeDelta::FromMilliseconds(20), - requested_animation_delay_); - EXPECT_FALSE(animation_task_.Equals(base::Closure())); - requested_animation_delay_ = base::TimeDelta(); - animation_task_ = base::Closure(); - } - } + EXPECT_TRUE(did_request_redraw_); did_request_redraw_ = false; + if (expecting_animations) { + EXPECT_EQ(base::TimeDelta::FromMilliseconds(20), + requested_animation_delay_); + EXPECT_FALSE(animation_task_.Equals(base::Closure())); + } else { + EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); + EXPECT_TRUE(animation_task_.Equals(base::Closure())); + } host_impl_->ScrollEnd(EndState().get()); EXPECT_FALSE(did_request_next_frame_); EXPECT_FALSE(did_request_redraw_); - - if (expecting_animations && latching) { + if (expecting_animations) { EXPECT_EQ(base::TimeDelta::FromMilliseconds(20), requested_animation_delay_); EXPECT_FALSE(animation_task_.Equals(base::Closure())); + } else { + EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); + EXPECT_TRUE(animation_task_.Equals(base::Closure())); + } + + if (expecting_animations) { // Before the scrollbar animation begins, we should not get redraws. begin_frame_args = viz::CreateBeginFrameArgsForTesting( BEGINFRAME_FROM_HERE, 0, 3, fake_now); @@ -3236,10 +3211,8 @@ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); EXPECT_TRUE(animation_task_.Equals(base::Closure())); host_impl_->DidFinishImplFrame(); - } else { - EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); - EXPECT_TRUE(animation_task_.Equals(base::Closure())); } + // Setting the scroll offset outside a scroll should not cause the // scrollbar to appear or schedule a scrollbar animation. if (host_impl_->active_tree() @@ -3269,26 +3242,18 @@ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_); EXPECT_TRUE(animation_task_.Equals(base::Closure())); } - - // Tear down the LayerTreeHostImpl before the InputHandlerClient. - host_impl_->ReleaseLayerTreeFrameSink(); - host_impl_ = nullptr; } }; -INSTANTIATE_TEST_CASE_P(All, - LayerTreeHostImplTestScrollbarAnimation, - ::testing::Bool()); - -TEST_P(LayerTreeHostImplTestScrollbarAnimation, Android) { +TEST_F(LayerTreeHostImplTestScrollbarAnimation, Android) { RunTest(LayerTreeSettings::ANDROID_OVERLAY); } -TEST_P(LayerTreeHostImplTestScrollbarAnimation, AuraOverlay) { +TEST_F(LayerTreeHostImplTestScrollbarAnimation, AuraOverlay) { RunTest(LayerTreeSettings::AURA_OVERLAY); } -TEST_P(LayerTreeHostImplTestScrollbarAnimation, NoAnimator) { +TEST_F(LayerTreeHostImplTestScrollbarAnimation, NoAnimator) { RunTest(LayerTreeSettings::NO_ANIMATOR); }
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index d0d582e..70d89a01 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc
@@ -425,6 +425,8 @@ target_tree->set_bottom_controls_height(bottom_controls_height_); target_tree->PushBrowserControls(nullptr); + target_tree->set_scroll_boundary_behavior(scroll_boundary_behavior_); + // The page scale factor update can affect scrolling which requires that // these ids are set, so this must be before PushPageScaleFactorAndLimits. target_tree->SetViewportLayersFromIds(viewport_layer_ids_); @@ -818,6 +820,11 @@ host_impl_->UpdateViewportContainerSizes(); } +void LayerTreeImpl::set_scroll_boundary_behavior( + const ScrollBoundaryBehavior& behavior) { + scroll_boundary_behavior_ = behavior; +} + bool LayerTreeImpl::ClampBrowserControlsShownRatio() { float ratio = top_controls_shown_ratio_->Current(true); ratio = std::max(ratio, 0.f);
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h index 3977f6d..1be26cd 100644 --- a/cc/trees/layer_tree_impl.h +++ b/cc/trees/layer_tree_impl.h
@@ -17,6 +17,7 @@ #include "cc/base/synced_property.h" #include "cc/input/event_listener_properties.h" #include "cc/input/layer_selection_bound.h" +#include "cc/input/scroll_boundary_behavior.h" #include "cc/layers/layer_impl.h" #include "cc/layers/layer_list_iterator.h" #include "cc/output/swap_promise.h" @@ -494,6 +495,11 @@ void set_bottom_controls_height(float bottom_controls_height); float bottom_controls_height() const { return bottom_controls_height_; } + void set_scroll_boundary_behavior(const ScrollBoundaryBehavior& behavior); + ScrollBoundaryBehavior scroll_boundary_behavior() const { + return scroll_boundary_behavior_; + } + void SetPendingPageScaleAnimation( std::unique_ptr<PendingPageScaleAnimation> pending_animation); std::unique_ptr<PendingPageScaleAnimation> TakePendingPageScaleAnimation(); @@ -659,6 +665,8 @@ float top_controls_height_; float bottom_controls_height_; + ScrollBoundaryBehavior scroll_boundary_behavior_; + // The amount that the browser controls are shown from 0 (hidden) to 1 (fully // shown). scoped_refptr<SyncedBrowserControls> top_controls_shown_ratio_;
diff --git a/chrome/VERSION b/chrome/VERSION index 84ab837..9b5e9cf 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ -MAJOR=62 +MAJOR=63 MINOR=0 -BUILD=3202 +BUILD=3203 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index c3fcd40..b11304d 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -101,7 +101,6 @@ "//third_party/android_data_chart:android_data_chart_java_resources", "//third_party/android_media:android_media_resources", "//third_party/android_tools:android_support_design_java", - "//third_party/android_tools:android_support_transition_java", "//third_party/android_tools:android_support_v7_appcompat_java", "//third_party/android_tools:android_support_v7_recyclerview_java", ] @@ -470,6 +469,7 @@ "//base:base_java_test_support", "//chrome/android:app_hooks_java", "//chrome/android:chrome_java", + "//chrome/android/third_party/widget_bottomsheet_base:widget_bottomsheet_base_java", "//chrome/android/webapk/libs/client:client_java", "//chrome/android/webapk/libs/common:common_java", "//chrome/android/webapk/libs/runtime_library:webapk_service_aidl_java", @@ -584,7 +584,6 @@ "javatests/src/org/chromium/chrome/browser/vr_shell/rules/VrActivityRestrictionRule.java", "javatests/src/org/chromium/chrome/browser/vr_shell/rules/VrTestRule.java", "javatests/src/org/chromium/chrome/browser/vr_shell/rules/WebappActivityVrTestRule.java", - "javatests/src/org/chromium/chrome/browser/vr_shell/util/CardboardUtils.java", "javatests/src/org/chromium/chrome/browser/vr_shell/util/NfcSimUtils.java", "javatests/src/org/chromium/chrome/browser/vr_shell/util/VrInfoBarUtils.java", "javatests/src/org/chromium/chrome/browser/vr_shell/util/VrShellDelegateUtils.java",
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml index a92162e7..536ebb6 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml
@@ -352,7 +352,6 @@ {% if enable_vr == "true" %} <activity android:name="org.chromium.chrome.browser.vr_shell.SeparateTaskCustomTabVrActivity" android:theme="@style/VrSupportTheme" - android:screenOrientation="landscape" android:exported="false" android:enableVrMode="@string/gvr_vr_mode_component" android:taskAffinity=""
diff --git a/chrome/android/java/res/color/bottom_nav_tint.xml b/chrome/android/java/res/color/bottom_nav_tint.xml index b6a20bd4..a7f8d89 100644 --- a/chrome/android/java/res/color/bottom_nav_tint.xml +++ b/chrome/android/java/res/color/bottom_nav_tint.xml
@@ -4,6 +4,6 @@ found in the LICENSE file. --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_checked="true" android:color="@color/google_blue_700" /> - <item android:color="@color/google_grey_600" /> + <item android:state_checked="true" android:color="@color/light_active_color" /> + <item android:color="@color/black_alpha_65" /> </selector> \ No newline at end of file
diff --git a/chrome/android/java/res/color/bottom_nav_tint_incognito.xml b/chrome/android/java/res/color/bottom_nav_tint_incognito.xml index 1acb9df..98eef29 100644 --- a/chrome/android/java/res/color/bottom_nav_tint_incognito.xml +++ b/chrome/android/java/res/color/bottom_nav_tint_incognito.xml
@@ -5,5 +5,5 @@ --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@android:color/white" /> - <item android:color="@color/white_alpha_70" /> + <item android:color="@color/white_alpha_54" /> </selector> \ No newline at end of file
diff --git a/chrome/android/java/res/drawable-hdpi/ic_watch_later_24dp.png b/chrome/android/java/res/drawable-hdpi/ic_watch_later_24dp.png new file mode 100644 index 0000000..37688e7 --- /dev/null +++ b/chrome/android/java/res/drawable-hdpi/ic_watch_later_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-hdpi/ic_watch_later_black_24dp.png b/chrome/android/java/res/drawable-hdpi/ic_watch_later_black_24dp.png deleted file mode 100644 index d7d0500..0000000 --- a/chrome/android/java/res/drawable-hdpi/ic_watch_later_black_24dp.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-hdpi/ntp_all_dismissed.webp b/chrome/android/java/res/drawable-hdpi/ntp_all_dismissed_gray.webp similarity index 100% rename from chrome/android/java/res/drawable-hdpi/ntp_all_dismissed.webp rename to chrome/android/java/res/drawable-hdpi/ntp_all_dismissed_gray.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-hdpi/ntp_all_dismissed_white.webp b/chrome/android/java/res/drawable-hdpi/ntp_all_dismissed_white.webp new file mode 100644 index 0000000..c6440f9 --- /dev/null +++ b/chrome/android/java/res/drawable-hdpi/ntp_all_dismissed_white.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/ic_watch_later_24dp.png b/chrome/android/java/res/drawable-mdpi/ic_watch_later_24dp.png new file mode 100644 index 0000000..e019827 --- /dev/null +++ b/chrome/android/java/res/drawable-mdpi/ic_watch_later_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/ic_watch_later_black_24dp.png b/chrome/android/java/res/drawable-mdpi/ic_watch_later_black_24dp.png deleted file mode 100644 index 7472f10..0000000 --- a/chrome/android/java/res/drawable-mdpi/ic_watch_later_black_24dp.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/ntp_all_dismissed.webp b/chrome/android/java/res/drawable-mdpi/ntp_all_dismissed_gray.webp similarity index 100% rename from chrome/android/java/res/drawable-mdpi/ntp_all_dismissed.webp rename to chrome/android/java/res/drawable-mdpi/ntp_all_dismissed_gray.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/ntp_all_dismissed_white.webp b/chrome/android/java/res/drawable-mdpi/ntp_all_dismissed_white.webp new file mode 100644 index 0000000..609246bd --- /dev/null +++ b/chrome/android/java/res/drawable-mdpi/ntp_all_dismissed_white.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/ic_watch_later_24dp.png b/chrome/android/java/res/drawable-xhdpi/ic_watch_later_24dp.png new file mode 100644 index 0000000..bd7a461 --- /dev/null +++ b/chrome/android/java/res/drawable-xhdpi/ic_watch_later_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/ic_watch_later_black_24dp.png b/chrome/android/java/res/drawable-xhdpi/ic_watch_later_black_24dp.png deleted file mode 100644 index 42bcc574..0000000 --- a/chrome/android/java/res/drawable-xhdpi/ic_watch_later_black_24dp.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/ntp_all_dismissed.webp b/chrome/android/java/res/drawable-xhdpi/ntp_all_dismissed_gray.webp similarity index 100% rename from chrome/android/java/res/drawable-xhdpi/ntp_all_dismissed.webp rename to chrome/android/java/res/drawable-xhdpi/ntp_all_dismissed_gray.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/ntp_all_dismissed_white.webp b/chrome/android/java/res/drawable-xhdpi/ntp_all_dismissed_white.webp new file mode 100644 index 0000000..c8e987c --- /dev/null +++ b/chrome/android/java/res/drawable-xhdpi/ntp_all_dismissed_white.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/ic_watch_later_24dp.png b/chrome/android/java/res/drawable-xxhdpi/ic_watch_later_24dp.png new file mode 100644 index 0000000..f8e872c --- /dev/null +++ b/chrome/android/java/res/drawable-xxhdpi/ic_watch_later_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/ic_watch_later_black_24dp.png b/chrome/android/java/res/drawable-xxhdpi/ic_watch_later_black_24dp.png deleted file mode 100644 index 78cd180..0000000 --- a/chrome/android/java/res/drawable-xxhdpi/ic_watch_later_black_24dp.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/ntp_all_dismissed.webp b/chrome/android/java/res/drawable-xxhdpi/ntp_all_dismissed_gray.webp similarity index 100% rename from chrome/android/java/res/drawable-xxhdpi/ntp_all_dismissed.webp rename to chrome/android/java/res/drawable-xxhdpi/ntp_all_dismissed_gray.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/ntp_all_dismissed_white.webp b/chrome/android/java/res/drawable-xxhdpi/ntp_all_dismissed_white.webp new file mode 100644 index 0000000..fdc3b9d --- /dev/null +++ b/chrome/android/java/res/drawable-xxhdpi/ntp_all_dismissed_white.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/ic_watch_later_24dp.png b/chrome/android/java/res/drawable-xxxhdpi/ic_watch_later_24dp.png new file mode 100644 index 0000000..f578f42 --- /dev/null +++ b/chrome/android/java/res/drawable-xxxhdpi/ic_watch_later_24dp.png Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/ic_watch_later_black_24dp.png b/chrome/android/java/res/drawable-xxxhdpi/ic_watch_later_black_24dp.png deleted file mode 100644 index 89a88a9..0000000 --- a/chrome/android/java/res/drawable-xxxhdpi/ic_watch_later_black_24dp.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/ntp_all_dismissed.webp b/chrome/android/java/res/drawable-xxxhdpi/ntp_all_dismissed_gray.webp similarity index 100% rename from chrome/android/java/res/drawable-xxxhdpi/ntp_all_dismissed.webp rename to chrome/android/java/res/drawable-xxxhdpi/ntp_all_dismissed_gray.webp Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/ntp_all_dismissed_white.webp b/chrome/android/java/res/drawable-xxxhdpi/ntp_all_dismissed_white.webp new file mode 100644 index 0000000..2022017 --- /dev/null +++ b/chrome/android/java/res/drawable-xxxhdpi/ntp_all_dismissed_white.webp Binary files differ
diff --git a/chrome/android/java/res/drawable/ic_offline_pin_white.xml b/chrome/android/java/res/drawable/ic_offline_pin_white.xml new file mode 100644 index 0000000..58b1dbe --- /dev/null +++ b/chrome/android/java/res/drawable/ic_offline_pin_white.xml
@@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. --> + +<!-- Note: hand-tweaked for foreground and background colors, not canonical icon. --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + tools:targetApi="21" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + <path + android:fillColor="@color/light_normal_color" + android:pathData="M4 6H20v12H4z" /> + + <path + android:fillColor="@android:color/white" + android:pathData="M12,2 C6.5,2,2,6.5,2,12 S6.5,22,12,22 S22,17.5,22,12 S17.5,2,12,2 Z M17,18 L7,18 + L7,16 L17,16 L17,18 Z M10.3,14 L7,10.7 L8.4,9.3 L10.3,11.2 L15.6,5.9 L17,7.3 + L10.3,14 Z" /> +</vector> \ No newline at end of file
diff --git a/chrome/android/java/res/drawable/tile_suggestion_default_icon.xml b/chrome/android/java/res/drawable/tile_suggestion_default_icon.xml deleted file mode 100644 index be2fea1..0000000 --- a/chrome/android/java/res/drawable/tile_suggestion_default_icon.xml +++ /dev/null
@@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- 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. --> -<vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - tools:targetApi="21" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24" - android:viewportHeight="24"> - <path - android:fillColor="@color/light_normal_color" - android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 -17.93c-3.95-.49-7-3.85-7-7.93 0-.62 .08 -1.21 .21 -1.79L9 15v1c0 1.1 .9 2 2 -2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 -1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 -5.39z" /> -</vector>
diff --git a/chrome/android/java/res/layout/content_suggestions_action_card_modern.xml b/chrome/android/java/res/layout/content_suggestions_action_card_modern.xml index 36da5fc8..8766b2c 100644 --- a/chrome/android/java/res/layout/content_suggestions_action_card_modern.xml +++ b/chrome/android/java/res/layout/content_suggestions_action_card_modern.xml
@@ -5,6 +5,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/SuggestionCardModern" + android:background="@null" + android:foreground="@null" android:padding="8dp"> <Button @@ -12,7 +14,7 @@ android:id="@+id/action_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center_vertical" + android:layout_gravity="center" android:layout_margin="0dp" android:text="@string/more" tools:text="Action" />
diff --git a/chrome/android/java/res/layout/content_suggestions_card_modern.xml b/chrome/android/java/res/layout/content_suggestions_card_modern.xml index 177c730d..59347b72b 100644 --- a/chrome/android/java/res/layout/content_suggestions_card_modern.xml +++ b/chrome/android/java/res/layout/content_suggestions_card_modern.xml
@@ -24,15 +24,16 @@ tools:src="@drawable/ic_snippet_thumbnail_placeholder" /> <ImageView - android:id="@+id/article_thumbnail_video_overlay" - android:layout_width="@dimen/content_suggestions_card_video_overlay_size" - android:layout_height="@dimen/content_suggestions_card_video_overlay_size" + android:id="@+id/offline_icon" + android:layout_width="@dimen/content_suggestions_card_modern_offline_badge_overlay_size" + android:layout_height="@dimen/content_suggestions_card_modern_offline_badge_overlay_size" android:layout_alignTop="@id/article_thumbnail" android:layout_alignStart="@id/article_thumbnail" - android:layout_marginStart="@dimen/content_suggestions_card_video_overlay_margin_start" - android:layout_marginTop="@dimen/content_suggestions_card_video_overlay_margin_top" + android:layout_marginStart="@dimen/content_suggestions_card_modern_offline_badge_overlay_margin_start" + android:layout_marginTop="@dimen/content_suggestions_card_modern_offline_badge_overlay_margin_top" android:contentDescription="@null" - app:srcCompat="@drawable/ic_play_circle_filled" /> + app:srcCompat="@drawable/ic_offline_pin_white" + tools:src="@drawable/ic_offline_pin_white"/> <!-- It would have been nice to use RoundedBitmapDrawable on the thumbnail, but with that you cannot select which corners must be rounded, they are all rounded. --> @@ -123,20 +124,6 @@ android:textColor="@color/snippets_publisher_name_color" android:textDirection="locale" tools:text=" - 3 hours ago" /> - - <!-- We can't add this ImageView as a CompoundDrawable to the TextView because we want to - have different paddings between the favicon (which is a compound drawable on the - TextView) and the offline icon. --> - <org.chromium.chrome.browser.widget.TintedImageView - android:id="@+id/offline_icon" - android:layout_width="@dimen/snippets_offline_icon_size" - android:layout_height="@dimen/snippets_offline_icon_size" - android:layout_marginStart="6dp" - android:alpha="0.54" - android:src="@drawable/offline_pin_round" - android:contentDescription="@string/accessibility_ntp_offline_badge" - android:visibility="gone" - chrome:chrometint="#000" /> </LinearLayout> </LinearLayout> </RelativeLayout>
diff --git a/chrome/android/java/res/layout/new_tab_page_all_dismissed.xml b/chrome/android/java/res/layout/new_tab_page_all_dismissed.xml index 71af575..63a4aea 100644 --- a/chrome/android/java/res/layout/new_tab_page_all_dismissed.xml +++ b/chrome/android/java/res/layout/new_tab_page_all_dismissed.xml
@@ -20,7 +20,6 @@ android:layout_marginBottom="40dp" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" - android:src="@drawable/ntp_all_dismissed" android:contentDescription="@null" android:importantForAccessibility="no" /> @@ -30,6 +29,7 @@ android:layout_height="wrap_content" android:layout_below="@id/image" android:layout_alignParentStart="true" + android:layout_marginBottom="8dp" android:gravity="center_horizontal" android:text="@string/ntp_title_no_suggestions" android:textSize="16sp" @@ -42,7 +42,6 @@ android:layout_height="wrap_content" android:layout_below="@id/title_text" android:layout_alignParentStart="true" - android:layout_marginTop="8dp" android:gravity="center_horizontal" android:text="@string/ntp_all_dismissed_body_text_morning" android:textSize="14sp"
diff --git a/chrome/android/java/res/layout/new_tab_page_incognito_md_common.xml b/chrome/android/java/res/layout/new_tab_page_incognito_md_common.xml index 533d5b4..5b468d6f 100644 --- a/chrome/android/java/res/layout/new_tab_page_incognito_md_common.xml +++ b/chrome/android/java/res/layout/new_tab_page_incognito_md_common.xml
@@ -25,7 +25,7 @@ android:layout_height="wrap_content" android:gravity="start" android:orientation="vertical" - android:paddingStart="16dp" > + android:paddingStart="@dimen/md_incognito_ntp_padding_left" > <ImageView android:id="@+id/new_tab_incognito_icon" @@ -47,7 +47,7 @@ android:layout_height="wrap_content" android:text="@string/new_tab_otr_subtitle" android:textColor="@color/incognito_header" - android:lineSpacingExtra="6sp" /> + android:lineSpacingExtra="@dimen/md_incognito_ntp_line_spacing" /> <LinearLayout android:id="@+id/new_tab_incognito_bulletpoints_container" @@ -61,14 +61,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/incognito_text" - android:lineSpacingExtra="6sp" /> + android:lineSpacingExtra="@dimen/md_incognito_ntp_line_spacing" /> <TextView android:id="@+id/new_tab_incognito_warning" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/incognito_text" - android:lineSpacingExtra="6sp" /> + android:lineSpacingExtra="@dimen/md_incognito_ntp_line_spacing" /> </LinearLayout> @@ -80,7 +80,7 @@ android:focusable="true" android:text="@string/learn_more" android:textColor="@color/google_blue_300" - android:lineSpacingExtra="6sp" /> + android:lineSpacingExtra="@dimen/md_incognito_ntp_line_spacing" /> </LinearLayout>
diff --git a/chrome/android/java/res/layout/tile_view_modern.xml b/chrome/android/java/res/layout/tile_view_modern.xml index b2c2577..86a04a4 100644 --- a/chrome/android/java/res/layout/tile_view_modern.xml +++ b/chrome/android/java/res/layout/tile_view_modern.xml
@@ -42,11 +42,12 @@ <!-- The offline badge. --> <org.chromium.chrome.browser.widget.TintedImageView android:id="@+id/offline_badge" - android:layout_width="@dimen/tile_view_offline_badge_size" - android:layout_height="@dimen/tile_view_offline_badge_size" + android:layout_width="@dimen/tile_view_offline_badge_size_modern" + android:layout_height="@dimen/tile_view_offline_badge_size_modern" android:layout_gravity="top|end" + android:layout_marginTop="@dimen/tile_view_offline_badge_margin_modern" + android:layout_marginEnd="@dimen/tile_view_offline_badge_margin_modern" android:visibility="gone" - android:background="@drawable/offline_badge_background" android:contentDescription="@string/accessibility_ntp_offline_badge" chrome:chrometint="@color/tile_view_offline_badge_tint" android:src="@drawable/offline_pin_round" />
diff --git a/chrome/android/java/res/layout/tile_view_modern_condensed.xml b/chrome/android/java/res/layout/tile_view_modern_condensed.xml index ae34d8d..bbdb16d6e 100644 --- a/chrome/android/java/res/layout/tile_view_modern_condensed.xml +++ b/chrome/android/java/res/layout/tile_view_modern_condensed.xml
@@ -40,11 +40,12 @@ <!-- The offline badge. --> <org.chromium.chrome.browser.widget.TintedImageView android:id="@+id/offline_badge" - android:layout_width="@dimen/tile_view_offline_badge_size" - android:layout_height="@dimen/tile_view_offline_badge_size" + android:layout_width="@dimen/tile_view_offline_badge_size_modern" + android:layout_height="@dimen/tile_view_offline_badge_size_modern" android:layout_gravity="top|end" + android:layout_marginTop="@dimen/tile_view_offline_badge_margin_modern" + android:layout_marginEnd="@dimen/tile_view_offline_badge_margin_modern" android:visibility="gone" - android:background="@drawable/offline_badge_background" android:contentDescription="@string/accessibility_ntp_offline_badge" chrome:chrometint="@color/tile_view_offline_badge_tint" android:src="@drawable/offline_pin_round" />
diff --git a/chrome/android/java/res/menu/bottom_sheet_nav_menu.xml b/chrome/android/java/res/menu/bottom_sheet_nav_menu.xml index f6acfe5..36937c1a 100644 --- a/chrome/android/java/res/menu/bottom_sheet_nav_menu.xml +++ b/chrome/android/java/res/menu/bottom_sheet_nav_menu.xml
@@ -15,5 +15,5 @@ android:icon="@drawable/btn_star_filled" /> <item android:id="@+id/action_history" android:title="@string/menu_history" - android:icon="@drawable/ic_watch_later_black_24dp" /> + android:icon="@drawable/ic_watch_later_24dp" /> </menu> \ No newline at end of file
diff --git a/chrome/android/java/res/values/colors.xml b/chrome/android/java/res/values/colors.xml index cb2f5b85..0b7c1f0 100644 --- a/chrome/android/java/res/values/colors.xml +++ b/chrome/android/java/res/values/colors.xml
@@ -24,8 +24,12 @@ <color name="google_grey_400">#bdbdbd</color> <color name="google_grey_500">#9E9E9E</color> <color name="google_grey_600">#757575</color> + <color name="grey_alpha_90">#E6505050</color> <color name="toolbar_shadow_color">#1d000000</color> <color name="white_alpha_50">#80ffffff</color> + <color name="white_alpha_54">#8Affffff</color> + <color name="white_alpha_90">#E6FFFFFF</color> + <color name="black_alpha_65">#A6000000</color> <color name="toolbar_light_tint">#A3000000</color> <color name="light_grey">#ccc</color> <color name="modal_dialog_scrim_color">#7f000000</color> @@ -150,7 +154,9 @@ <!-- Theme colors. Also used for toolbar background --> <color name="incognito_primary_color">#505050</color> + <color name="incognito_primary_color_home_bottom_nav">@color/grey_alpha_90</color> <color name="modern_primary_color">@android:color/white</color> + <color name="primary_color_home_bottom_nav">@color/white_alpha_90</color> <!-- LocationBar colors --> <color name="locationbar_dark_hint_text">@color/black_alpha_54</color>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index 1df78d1..caea54c 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -308,11 +308,13 @@ <dimen name="tile_view_width">80dp</dimen> <dimen name="tile_view_width_condensed">64dp</dimen> <dimen name="tile_view_icon_size">48dp</dimen> - <dimen name="tile_view_icon_size_modern">28dp</dimen> + <dimen name="tile_view_icon_size_modern">24dp</dimen> <dimen name="tile_view_icon_margin_top">12dp</dimen> <dimen name="tile_view_icon_margin_top_condensed">8dp</dimen> - <dimen name="tile_view_icon_margin_top_modern">22dp</dimen> + <dimen name="tile_view_icon_margin_top_modern">24dp</dimen> <dimen name="tile_view_offline_badge_size">24dp</dimen> + <dimen name="tile_view_offline_badge_size_modern">16dp</dimen> + <dimen name="tile_view_offline_badge_margin_modern">8dp</dimen> <dimen name="tile_view_title_margin_top">66dp</dimen> <dimen name="tile_view_title_margin_top_condensed">62dp</dimen> <dimen name="ntp_logo_height">116dp</dimen> @@ -354,7 +356,12 @@ <dimen name="content_suggestions_card_video_overlay_size">48dp</dimen> <dimen name="content_suggestions_card_video_overlay_margin_start">38dp</dimen> <dimen name="content_suggestions_card_video_overlay_margin_top">38dp</dimen> + <dimen name="content_suggestions_card_modern_offline_badge_overlay_size">18dp</dimen> + <dimen name="content_suggestions_card_modern_offline_badge_overlay_margin_start">8dp</dimen> + <dimen name="content_suggestions_card_modern_offline_badge_overlay_margin_top">8dp</dimen> <dimen name="contextual_carousel_space_between_cards">8dp</dimen> + <dimen name="md_incognito_ntp_line_spacing">6sp</dimen> + <dimen name="md_incognito_ntp_padding_left">16dp</dimen> <!-- Recent tabs page --> <dimen name="recent_tabs_visible_separator_padding">8dp</dimen> @@ -475,16 +482,15 @@ <!-- Bottom sheet dimensions --> <dimen name="bottom_sheet_help_bubble_inset">10dp</dimen> - <dimen name="bottom_nav_height">56dp</dimen> + <dimen name="bottom_nav_height">40dp</dimen> <dimen name="bottom_nav_space_from_toolbar">96dp</dimen> <!-- The following two dimensions override defaults in Android's BottomNavigationView --> - <dimen name="design_bottom_navigation_text_size">12sp</dimen> - <dimen name="design_bottom_navigation_active_text_size">14sp</dimen> <!-- Chrome Home dimensions --> <dimen name="chrome_home_empty_view_top_padding">72dp</dimen> <dimen name="chrome_home_min_full_half_distance">160dp</dimen> <dimen name="chrome_home_progress_bar_height">4dp</dimen> + <dimen name="chrome_home_incognito_ntp_bottom_margin">32dp</dimen> <!-- TextBubble dimensions --> <dimen name="text_bubble_margin">4dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java index 38b18a41..50413a44 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
@@ -15,6 +15,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.widget.RoundedIconGenerator; import org.chromium.components.bookmarks.BookmarkId; @@ -40,8 +41,10 @@ int textSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_icon_text_size); int iconColor = ApiCompatibilityUtils.getColor( getResources(), R.color.default_favicon_background_color); - mIconGenerator = new RoundedIconGenerator(mDisplayedIconSize , mDisplayedIconSize, - mCornerRadius, iconColor, textSize); + mIconGenerator = new RoundedIconGenerator(mDisplayedIconSize, mDisplayedIconSize, + FeatureUtilities.isChromeHomeModernEnabled() ? mDisplayedIconSize / 2 + : mCornerRadius, + iconColor, textSize); } // BookmarkRow implementation.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java b/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java index 637a0ff..6a41a318 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java
@@ -120,7 +120,7 @@ @Override public void resumeDownload(ContentId id, DownloadItem item, boolean hasUserGesture) { - mProvider.resumeDownload(id); + mProvider.resumeDownload(id, hasUserGesture); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java index 5266233..2620833 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
@@ -17,6 +17,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; import org.chromium.chrome.browser.preferences.PrefServiceBridge; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.widget.RoundedIconGenerator; import org.chromium.chrome.browser.widget.TintedImageButton; import org.chromium.chrome.browser.widget.selection.SelectableItemView; @@ -49,8 +50,10 @@ int textSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_icon_text_size); int iconColor = ApiCompatibilityUtils.getColor( getResources(), R.color.default_favicon_background_color); - mIconGenerator = new RoundedIconGenerator(mDisplayedIconSize , mDisplayedIconSize, - mCornerRadius, iconColor, textSize); + mIconGenerator = new RoundedIconGenerator(mDisplayedIconSize, mDisplayedIconSize, + FeatureUtilities.isChromeHomeModernEnabled() ? mDisplayedIconSize / 2 + : mCornerRadius, + iconColor, textSize); mEndPadding = context.getResources().getDimensionPixelSize( R.dimen.selectable_list_layout_row_padding);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java index 32f7e6df..d0f8870 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureController.java
@@ -167,6 +167,19 @@ // Inform the WebContents when we enter and when we leave PiP. final WebContents webContents = getWebContents(activity); assert webContents != null; + + Rect bounds = getVideoBounds(webContents, activity); + try { + activity.enterPictureInPictureMode( + new PictureInPictureParams.Builder() + .setAspectRatio(new Rational(bounds.width(), bounds.height())) + .setSourceRectHint(bounds) + .build()); + } catch (IllegalStateException e) { + Log.e(TAG, "Error entering PiP: " + e); + return; + } + webContents.setHasPersistentVideo(true); mOnLeavePipCallbacks.add(new Callback<ChromeActivity>() { @@ -176,13 +189,6 @@ } }); - Rect bounds = getVideoBounds(webContents, activity); - activity.enterPictureInPictureMode( - new PictureInPictureParams.Builder() - .setAspectRatio(new Rational(bounds.width(), bounds.height())) - .setSourceRectHint(bounds) - .build()); - // Setup observers to dismiss the Activity on events that should end PiP. final Tab activityTab = activity.getActivityTab();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java index 7e51bd5..ab2d197e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
@@ -143,6 +143,10 @@ .apply(); } + public static void logRendererCrash() { + nativeLogRendererCrash(); + } + /** * Updates the metrics services based on a change of consent. This can happen during first-run * flow, and when the user changes their preferences. @@ -201,6 +205,7 @@ private static native void nativeUpdateMetricsServiceState(boolean mayUpload); private native void nativeUmaResumeSession(long nativeUmaSessionStats); private native void nativeUmaEndSession(long nativeUmaSessionStats); + private static native void nativeLogRendererCrash(); private static native void nativeRegisterExternalExperiment( String studyName, int[] experimentIds); private static native void nativeRegisterSyntheticFieldTrial(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/ExternalEstimateProviderAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/ExternalEstimateProviderAndroid.java index b1ac151..ef1959e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/ExternalEstimateProviderAndroid.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/ExternalEstimateProviderAndroid.java
@@ -77,21 +77,11 @@ * @return The expected upstream throughput in Kbps (Kilobits per second) or * {@link #NO_VALUE} if the estimate is unavailable. */ - @CalledByNative protected long getUpstreamThroughputKbps() { assert mThreadCheck.calledOnValidThread(); return NO_VALUE; } - /** - * @return Time (in seconds) since the network quality estimate was last updated. - */ - @CalledByNative - protected long getTimeSinceLastUpdateSeconds() { - assert mThreadCheck.calledOnValidThread(); - return NO_VALUE; - } - @CalledByNative private static int getNoValue() { return NO_VALUE;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/OWNERS index 5134331..c3dd3cc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/OWNERS +++ b/chrome/android/java/src/org/chromium/chrome/browser/net/qualityprovider/OWNERS
@@ -1,15 +1,4 @@ -battre@chromium.org -cbentzel@chromium.org -eroman@chromium.org -mattm@chromium.org -mef@chromium.org -mmenke@chromium.org -pauljensen@chromium.org -rdsmith@chromium.org -rsleevi@chromium.org -rtenneti@chromium.org +file://net/nqe/OWNERS -per-file NetworkQuality*=bengr@chromium.org -per-file ExternalEstimate*=bengr@chromium.org - -# COMPONENT: Internals>Network>Connectivity +# TEAM: nqe-dev@chromium.org +# COMPONENT: Internals>Network>NetworkQuality
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java index dbf457c..cec5530 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java
@@ -41,4 +41,7 @@ @TargetApi(Build.VERSION_CODES.O) NotificationChannel getNotificationChannel(String channelId); + + @TargetApi(Build.VERSION_CODES.O) + void deleteNotificationChannelGroup(String groupId); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java index bf1a917..1c43482 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java
@@ -98,4 +98,11 @@ assert BuildInfo.isAtLeastO(); return mNotificationManager.getNotificationChannel(channelId); } + + @TargetApi(Build.VERSION_CODES.O) + @Override + public void deleteNotificationChannelGroup(String groupId) { + assert BuildInfo.isAtLeastO(); + mNotificationManager.deleteNotificationChannelGroup(groupId); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java index a71b73d6..ae824f8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
@@ -640,7 +640,7 @@ mNotificationManager.notify(platformTag, PLATFORM_ID, notificationBuilder.build()); NotificationUmaTracker.getInstance().onNotificationShown( - NotificationUmaTracker.SITES, ChannelDefinitions.CHANNEL_ID_SITES); + NotificationUmaTracker.SITES, notificationBuilder.mChannelId); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java index f56cc2b..efbeebf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java
@@ -106,7 +106,7 @@ NotificationManager notificationManager = ContextUtils.getApplicationContext().getSystemService(NotificationManager.class); NotificationChannel channel = notificationManager.getNotificationChannel(channelId); - return channel.getImportance() == NotificationManager.IMPORTANCE_NONE; + return channel != null && channel.getImportance() == NotificationManager.IMPORTANCE_NONE; } private void saveLastShownNotification(@SystemNotificationType int type) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitions.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitions.java index 10fa740..66a5ee9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitions.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitions.java
@@ -13,12 +13,16 @@ import android.support.annotation.StringDef; import org.chromium.chrome.R; +import org.chromium.chrome.browser.ChromeFeatureList; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -48,7 +52,7 @@ * the set of channels returned by {@link #getStartupChannelIds()} or * {@link #getLegacyChannelIds()} changes. */ - static final int CHANNELS_VERSION = 1; + static final int CHANNELS_VERSION = 2; /** * To define a new channel, add the channel ID to this StringDef and add a new entry to @@ -116,10 +120,14 @@ R.string.notification_category_screen_capture, NotificationManager.IMPORTANCE_HIGH, CHANNEL_GROUP_ID_GENERAL)); + // Not adding sites channel to startup channels because we now use dynamic site + // channels by default, so notifications will only be posted to this channel if the + // SiteNotificationChannels flag is disabled. In that case, it's fine for the channel + // to only appear when the first notification is posted when the flag's disabled. + // TODO(crbug.com/758553) Deprecate this channel properly when the flag is removed. map.put(CHANNEL_ID_SITES, new PredefinedChannel(CHANNEL_ID_SITES, R.string.notification_category_sites, NotificationManager.IMPORTANCE_DEFAULT, CHANNEL_GROUP_ID_GENERAL)); - startup.add(CHANNEL_ID_SITES); // As of Aug 2017, this channel is experimental and enabled only through the associated // feature (see org.chromium.chrome.browser.ntp.ContentSuggestionsNotificationHelper). @@ -167,8 +175,15 @@ * @return An array of old ChannelIds that may have been returned by * {@link #getStartupChannelIds} in the past, but are no longer in use. */ - static String[] getLegacyChannelIds() { - return LEGACY_CHANNEL_IDS; + static List<String> getLegacyChannelIds() { + List<String> legacyChannels = new ArrayList<>(Arrays.asList(LEGACY_CHANNEL_IDS)); + // When the SiteNotificationChannels feature is enabled, we use dynamically-created channels + // for different sites, so we no longer need the generic predefined 'Sites' channel. + // TODO(crbug.com/758553) Put CHANNEL_ID_SITES in LEGACY_CHANNEL_IDS once flag is gone. + if (ChromeFeatureList.isEnabled(ChromeFeatureList.SITE_NOTIFICATION_CHANNELS)) { + legacyChannels.add(ChannelDefinitions.CHANNEL_ID_SITES); + } + return legacyChannels; } static PredefinedChannelGroup getChannelGroupForChannel(PredefinedChannel channel) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializer.java index c29a2cf3..2c9fbeb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializer.java
@@ -7,6 +7,7 @@ import android.annotation.TargetApi; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; +import android.app.NotificationManager; import android.content.res.Resources; import android.os.Build; @@ -56,6 +57,19 @@ * @param channelId The ID of the channel to be initialized. */ public void ensureInitialized(String channelId) { + ensureInitializedWithEnabledState(channelId, true); + } + + /** + * As ensureInitialized, but create the channel in disabled mode. The channel's importance will + * be set to IMPORTANCE_NONE, instead of using the value from + * {@link ChannelDefinitions.PredefinedChannels}. + */ + public void ensureInitializedAndDisabled(String channelId) { + ensureInitializedWithEnabledState(channelId, true); + } + + private void ensureInitializedWithEnabledState(String channelId, boolean enabled) { if (channelId.startsWith(ChannelDefinitions.CHANNEL_ID_PREFIX_SITES)) { // If we have a valid site channel ID at this point, it is safe to assume a channel // has already been created, since the only way to obtain a site channel ID is by @@ -74,6 +88,9 @@ .toNotificationChannelGroup(mResources); mNotificationManager.createNotificationChannelGroup(channelGroup); NotificationChannel channel = predefinedChannel.toNotificationChannel(mResources); + if (!enabled) { + channel.setImportance(NotificationManager.IMPORTANCE_NONE); + } mNotificationManager.createNotificationChannel(channel); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotifier.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotifier.java index cc412e99..e9d0d72 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotifier.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/ContentSuggestionsNotifier.java
@@ -445,20 +445,30 @@ * missing, the channel will be (re-)registered. * * <p>May be called on any Android version; before Android O, it is a no-op. + * + * <p>Returns true if the channel was registered, false if not (pre-O, or already registered). + * + * @param enabled If false, the channel is created in a disabled state. */ @CalledByNative - private static void registerChannel() { - if (!BuildInfo.isAtLeastO()) return; + private static boolean registerChannel(boolean enabled) { + if (!BuildInfo.isAtLeastO()) return false; SharedPreferences prefs = ContextUtils.getAppSharedPreferences(); - if (prefs.getBoolean(PREF_CHANNEL_CREATED, false)) return; + if (prefs.getBoolean(PREF_CHANNEL_CREATED, false)) return false; ChannelsInitializer initializer = new ChannelsInitializer( new NotificationManagerProxyImpl( (NotificationManager) ContextUtils.getApplicationContext().getSystemService( Context.NOTIFICATION_SERVICE)), ContextUtils.getApplicationContext().getResources()); - initializer.ensureInitialized(ChannelDefinitions.CHANNEL_ID_CONTENT_SUGGESTIONS); + if (enabled) { + initializer.ensureInitialized(ChannelDefinitions.CHANNEL_ID_CONTENT_SUGGESTIONS); + } else { + initializer.ensureInitializedAndDisabled( + ChannelDefinitions.CHANNEL_ID_CONTENT_SUGGESTIONS); + } prefs.edit().putBoolean(PREF_CHANNEL_CREATED, true).apply(); + return true; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java index 40c6a89..4a2cfef6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java
@@ -5,9 +5,13 @@ package org.chromium.chrome.browser.ntp; import android.app.Activity; +import android.content.res.Resources; +import android.view.Gravity; import android.view.View; import android.view.ViewTreeObserver.OnScrollChangedListener; import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; import android.widget.ScrollView; import android.widget.TextView; @@ -37,7 +41,7 @@ mIncognitoNewTabPageView.getResources(), R.color.toolbar_shadow_color), FadingShadow.POSITION_TOP); - initTextViewColors(); + initTextViews(); // Hide the incognito image from the Chrome Home NTP pages. ImageView incognitoSplash = @@ -63,7 +67,7 @@ }); } - private void initTextViewColors() { + private void initTextViews() { final int locationBarLightHintTextColor = ApiCompatibilityUtils.getColor( mIncognitoNewTabPageView.getResources(), R.color.locationbar_light_hint_text); final int googleBlueColor = ApiCompatibilityUtils.getColor( @@ -97,9 +101,29 @@ final TextView newTabIncognitoMessageView = (TextView) mIncognitoNewTabPageView.findViewById( R.id.new_tab_incognito_message); + final LinearLayout newTabIncognitoContainer = + (LinearLayout) mIncognitoNewTabPageView.findViewById( + R.id.new_tab_incognito_container); incognitoNtpHeaderView.setTextColor(locationBarLightHintTextColor); + + Resources resources = getContentView().getResources(); newTabIncognitoMessageView.setTextColor(locationBarLightHintTextColor); + newTabIncognitoMessageView.setLineSpacing( + resources.getDimensionPixelSize(R.dimen.md_incognito_ntp_line_spacing), 1.0f); + LayoutParams layoutParams = (LayoutParams) newTabIncognitoMessageView.getLayoutParams(); + layoutParams.bottomMargin = resources.getDimensionPixelSize( + R.dimen.chrome_home_incognito_ntp_bottom_margin); + + newTabIncognitoContainer.setPadding( + resources.getDimensionPixelSize(R.dimen.md_incognito_ntp_padding_left), + newTabIncognitoContainer.getPaddingTop(), + newTabIncognitoContainer.getPaddingRight(), + newTabIncognitoContainer.getPaddingBottom()); + newTabIncognitoContainer.setGravity(Gravity.START); + + learnMoreView.setPadding(0, 0, 0, 0); + learnMoreView.setAllCaps(false); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/LogoDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/LogoDelegateImpl.java index c9dbe262..1988da31 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/LogoDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/LogoDelegateImpl.java
@@ -23,10 +23,13 @@ public class LogoDelegateImpl implements LogoView.Delegate { // UMA enum constants. CTA means the "click-to-action" icon. private static final String LOGO_SHOWN_UMA_NAME = "NewTabPage.LogoShown"; + private static final String LOGO_SHOWN_FROM_CACHE_UMA_NAME = "NewTabPage.LogoShown.FromCache"; + private static final String LOGO_SHOWN_FRESH_UMA_NAME = "NewTabPage.LogoShown.Fresh"; private static final int STATIC_LOGO_SHOWN = 0; private static final int CTA_IMAGE_SHOWN = 1; + private static final int LOGO_SHOWN_COUNT = 2; - private static final String LOGO_SHOWN_TIME_UMA_NAME = "NewTabPage.LogoShownTime"; + private static final String LOGO_SHOWN_TIME_UMA_NAME = "NewTabPage.LogoShownTime2"; private static final String LOGO_CLICK_UMA_NAME = "NewTabPage.LogoClick"; private static final int STATIC_LOGO_CLICKED = 0; @@ -92,20 +95,36 @@ @Override public void onLogoAvailable(Logo logo, boolean fromCache) { if (mIsDestroyed) return; - mOnLogoClickUrl = logo != null ? logo.onClickUrl : null; - mAnimatedLogoUrl = logo != null ? logo.animatedLogoUrl : null; + if (logo != null) { - RecordHistogram.recordSparseSlowlyHistogram(LOGO_SHOWN_UMA_NAME, - logo.animatedLogoUrl == null ? STATIC_LOGO_SHOWN : CTA_IMAGE_SHOWN); + int logoType = + logo.animatedLogoUrl == null ? STATIC_LOGO_SHOWN : CTA_IMAGE_SHOWN; + RecordHistogram.recordEnumeratedHistogram( + LOGO_SHOWN_UMA_NAME, logoType, LOGO_SHOWN_COUNT); + if (fromCache) { + RecordHistogram.recordEnumeratedHistogram( + LOGO_SHOWN_FROM_CACHE_UMA_NAME, logoType, LOGO_SHOWN_COUNT); + } else { + RecordHistogram.recordEnumeratedHistogram( + LOGO_SHOWN_FRESH_UMA_NAME, logoType, LOGO_SHOWN_COUNT); + } if (mShouldRecordLoadTime) { long loadTime = System.currentTimeMillis() - loadTimeStart; RecordHistogram.recordMediumTimesHistogram( LOGO_SHOWN_TIME_UMA_NAME, loadTime, TimeUnit.MILLISECONDS); + // Only record the load time once per NTP, for the first logo we got, + // whether that came from cache or not. + mShouldRecordLoadTime = false; } + } else if (!fromCache) { + // If we got a fresh (i.e. not from cache) null logo, don't record any load + // time even if we get another update later. + mShouldRecordLoadTime = false; } - // If there currently is no Doodle, don't record the time if a refresh happens - // later. - mShouldRecordLoadTime = false; + + mOnLogoClickUrl = logo != null ? logo.onClickUrl : null; + mAnimatedLogoUrl = logo != null ? logo.animatedLogoUrl : null; + logoObserver.onLogoAvailable(logo, fromCache); } };
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/AllDismissedItem.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/AllDismissedItem.java index 104ddc88..ba68194 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/AllDismissedItem.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/AllDismissedItem.java
@@ -6,8 +6,10 @@ import android.support.annotation.StringRes; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.ImageView; import android.widget.TextView; import org.chromium.chrome.R; @@ -54,21 +56,30 @@ mBodyTextView = itemView.findViewById(R.id.body_text); Button refreshButton = itemView.findViewById(R.id.action_button); + ImageView backgroundView = itemView.findViewById(R.id.image); if (FeatureUtilities.isChromeHomeModernEnabled()) { ((ViewGroup) itemView).removeView(refreshButton); + + // Hide the view instead of removing it, because it is used to layout subsequent + // views. + itemView.findViewById(R.id.title_text).setVisibility(View.GONE); + backgroundView.setImageResource(R.drawable.ntp_all_dismissed_white); } else { refreshButton.setOnClickListener(v -> { NewTabPageUma.recordAction(NewTabPageUma.ACTION_CLICKED_ALL_DISMISSED_REFRESH); sections.restoreDismissedSections(); }); + backgroundView.setImageResource(R.drawable.ntp_all_dismissed_gray); } } public void onBindViewHolder() { int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); @StringRes - int messageId; - if (hour >= 0 && hour < 12) { + final int messageId; + if (FeatureUtilities.isChromeHomeModernEnabled()) { + messageId = R.string.ntp_all_dismissed_body_text_modern; + } else if (hour >= 0 && hour < 12) { messageId = R.string.ntp_all_dismissed_body_text_morning; } else if (hour >= 12 && hour < 17) { messageId = R.string.ntp_all_dismissed_body_text_afternoon;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SpannableAutocompleteEditTextModel.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SpannableAutocompleteEditTextModel.java index ad66645..8d2088c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SpannableAutocompleteEditTextModel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SpannableAutocompleteEditTextModel.java
@@ -240,6 +240,8 @@ @Override public void onSelectionChanged(int selStart, int selEnd) { if (DEBUG) Log.i(TAG, "onSelectionChanged [%d,%d]", selStart, selEnd); + if (mCurrentState.getSelStart() == selStart && mCurrentState.getSelEnd() == selEnd) return; + mCurrentState.setSelection(selStart, selEnd); if (mBatchEditNestCount > 0) return; int len = mCurrentState.getUserText().length();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java index 37299c1..ccf2221 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java
@@ -68,6 +68,7 @@ import org.chromium.chrome.browser.ssl.SecurityStateModel; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.util.UrlUtilities; +import org.chromium.chrome.browser.widget.TintedDrawable; import org.chromium.components.location.LocationUtils; import org.chromium.components.security_state.ConnectionSecurityLevel; import org.chromium.content_public.browser.WebContents; @@ -605,7 +606,8 @@ ImageView permissionIcon = (ImageView) permissionRow.findViewById( R.id.page_info_permission_icon); - permissionIcon.setImageResource(getImageResourceForPermission(permission.type)); + permissionIcon.setImageDrawable(TintedDrawable.constructTintedDrawable( + permissionIcon.getResources(), getImageResourceForPermission(permission.type))); if (permission.setting == ContentSetting.ALLOW) { int warningTextResource = 0;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java index 77c06c19..f4b27ce 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java
@@ -14,6 +14,9 @@ import android.os.SystemClock; import org.chromium.base.Log; +import org.chromium.base.library_loader.LibraryLoader; +import org.chromium.base.library_loader.LibraryProcessType; +import org.chromium.base.library_loader.ProcessInitException; import java.io.FileDescriptor; import java.io.IOException; @@ -33,8 +36,20 @@ // A tag for logging error messages. private static final String TAG = "ImageDecoder"; + // Whether the native library and the sandbox have been initialized. + private boolean mNativeLibraryAndSandboxInitialized; + @Override public void onCreate() { + try { + LibraryLoader.get(LibraryProcessType.PROCESS_CHILD).ensureInitialized(); + nativeInitializePhotoPickerSandbox(); + + mNativeLibraryAndSandboxInitialized = true; + } catch (ProcessInitException e) { + Log.e(TAG, "Unable to initialize the native library and sandbox", e); + } + super.onCreate(); } @@ -59,6 +74,12 @@ bundle.putString(KEY_FILE_PATH, filePath); bundle.putBoolean(KEY_SUCCESS, false); + if (!mNativeLibraryAndSandboxInitialized) { + Log.e(TAG, "Decode failed %s (size: %d): no sandbox", filePath, size); + sendReply(callback, bundle); // Sends SUCCESS == false; + return; + } + FileDescriptor fd = pfd.getFileDescriptor(); long begin = SystemClock.elapsedRealtime(); @@ -107,4 +128,8 @@ } } }; + + // Initializes the seccomp-bpf sandbox when it's supported by the device. Records the sandbox + // status to the Android.SeccompStatus.PhotoPickerSandbox histogram. + private static native void nativeInitializePhotoPickerSandbox(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java index b3b728c..d4021e9b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java
@@ -19,6 +19,7 @@ import org.chromium.base.Log; import org.chromium.base.ThreadUtils; +import org.chromium.base.VisibleForTesting; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.util.ConversionUtils; @@ -26,7 +27,9 @@ import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; +import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.List; import java.util.concurrent.TimeUnit; /** @@ -36,12 +39,17 @@ // A tag for logging error messages. private static final String TAG = "ImageDecoderHost"; + // A callback to use for testing to see if decoder is ready. + static ServiceReadyCallback sReadyCallbackForTesting; + IDecoderService mIRemoteService; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { mIRemoteService = IDecoderService.Stub.asInterface(service); mBound = true; - mCallback.serviceReady(); + for (ServiceReadyCallback callback : mCallbacks) { + callback.serviceReady(); + } } public void onServiceDisconnected(ComponentName className) { @@ -102,8 +110,8 @@ return mRequests; } - // The callback used to notify the client when the service is ready. - private ServiceReadyCallback mCallback; + // The callbacks used to notify the clients when the service is ready. + List<ServiceReadyCallback> mCallbacks = new ArrayList<ServiceReadyCallback>(); // Flag indicating whether we are bound to the service. private boolean mBound; @@ -115,7 +123,10 @@ * @param callback The callback to use when communicating back to the client. */ public DecoderServiceHost(ServiceReadyCallback callback, Context context) { - mCallback = callback; + mCallbacks.add(callback); + if (sReadyCallbackForTesting != null) { + mCallbacks.add(sReadyCallbackForTesting); + } mContext = context; } @@ -272,4 +283,10 @@ public void cancelDecodeImage(String filePath) { mRequests.remove(filePath); } + + /** Sets a callback to use when the service is ready. For testing use only. */ + @VisibleForTesting + public static void setReadyCallback(ServiceReadyCallback callback) { + sReadyCallbackForTesting = callback; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryEditor.java index 5f831087..210e9475 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryEditor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryEditor.java
@@ -15,6 +15,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.support.annotation.StringRes; import android.text.InputType; import android.text.SpannableString; import android.text.Spanned; @@ -367,20 +368,23 @@ }); } - private void changeHowPasswordIsDisplayed(int visibilityIcon, int inputType) { + private void changeHowPasswordIsDisplayed( + int visibilityIcon, int inputType, @StringRes int annotation) { TextView passwordView = (TextView) mView.findViewById(R.id.password_entry_editor_password); ImageButton viewPasswordButton = (ImageButton) mView.findViewById(R.id.password_entry_editor_view_password); passwordView.setText(mExtras.getString(SavePasswordsPreferences.PASSWORD_LIST_PASSWORD)); passwordView.setInputType(inputType); viewPasswordButton.setImageResource(visibilityIcon); + viewPasswordButton.setContentDescription(getActivity().getString(annotation)); } private void displayPassword() { getActivity().getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); - changeHowPasswordIsDisplayed( - R.drawable.ic_visibility_off, InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + changeHowPasswordIsDisplayed(R.drawable.ic_visibility_off, + InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, + R.string.password_entry_editor_hide_stored_password); RecordHistogram.recordEnumeratedHistogram( "PasswordManager.Android.PasswordCredentialEntry.Password", PASSWORD_ACTION_DISPLAYED, PASSWORD_ACTION_BOUNDARY); @@ -388,7 +392,8 @@ private void hidePassword() { changeHowPasswordIsDisplayed(R.drawable.ic_visibility, - InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD, + R.string.password_entry_editor_view_stored_password); RecordHistogram.recordEnumeratedHistogram( "PasswordManager.Android.PasswordCredentialEntry.Password", PASSWORD_ACTION_HIDDEN, PASSWORD_ACTION_BOUNDARY);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java index 27e4f379..559789f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
@@ -191,8 +191,7 @@ * The various data types that can be cleared via this screen. */ public enum DialogOption { - CLEAR_HISTORY( - BrowsingDataType.HISTORY, PREF_HISTORY, R.drawable.ic_watch_later_black_24dp, true), + CLEAR_HISTORY(BrowsingDataType.HISTORY, PREF_HISTORY, R.drawable.ic_watch_later_24dp, true), CLEAR_COOKIES_AND_SITE_DATA( BrowsingDataType.COOKIES, PREF_COOKIES, R.drawable.permission_cookie, true), CLEAR_CACHE(BrowsingDataType.CACHE, PREF_CACHE, R.drawable.ic_collections_grey, false),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java index 8db480a..0a878789 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SingleWebsitePreferences.java
@@ -573,7 +573,8 @@ preference.setIcon(category.getDisabledInAndroidIcon(getActivity())); preference.setEnabled(false); } else { - preference.setIcon(ContentSettingsResources.getIcon(contentType)); + preference.setIcon( + ContentSettingsResources.getTintedIcon(contentType, getResources())); } } else { preference.setIcon(
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 94eac23..d602e14 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
@@ -15,6 +15,7 @@ import org.chromium.base.Log; import org.chromium.base.annotations.SuppressFBWarnings; import org.chromium.base.library_loader.ProcessInitException; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.init.ChromeBrowserInitializer; @@ -39,6 +40,8 @@ private static final String INTENT_ACCOUNT_NAME = "AccountSigninActivity.AccountName"; private static final String INTENT_IS_DEFAULT_ACCOUNT = "AccountSigninActivity.IsDefaultAccount"; + private static final String INTENT_IS_FROM_PERSONALIZED_PROMO = + "AccountSigninActivity.IsFromPersonalizedPromo"; @IntDef({SIGNIN_FLOW_DEFAULT, SIGNIN_FLOW_CONFIRMATION_ONLY, SIGNIN_FLOW_ADD_NEW_ACCOUNT}) @Retention(RetentionPolicy.SOURCE) @@ -54,18 +57,23 @@ @Retention(RetentionPolicy.SOURCE) public @interface AccessPoint {} - private AccountSigninView mView; - @AccessPoint private int mAccessPoint; + private @AccessPoint int mAccessPoint; + private @SigninFlowType int mSigninFlowType; + private boolean mIsFromPersonalizedPromo; /** * A convenience method to create a AccountSigninActivity passing the access point as an * intent. * @param accessPoint {@link AccessPoint} for starting signin flow. Used in metrics. + * @param isFromPersonalizedPromo Whether the signin activity is started from a personalized + * promo. */ - public static void startAccountSigninActivity(Context context, @AccessPoint int accessPoint) { + public static void startAccountSigninActivity( + Context context, @AccessPoint int accessPoint, boolean isFromPersonalizedPromo) { Intent intent = new Intent(context, AccountSigninActivity.class); intent.putExtra(INTENT_SIGNIN_ACCESS_POINT, accessPoint); intent.putExtra(INTENT_SIGNIN_FLOW_TYPE, SIGNIN_FLOW_DEFAULT); + intent.putExtra(INTENT_IS_FROM_PERSONALIZED_PROMO, isFromPersonalizedPromo); context.startActivity(intent); } @@ -83,7 +91,7 @@ return false; } - startAccountSigninActivity(context, accessPoint); + startAccountSigninActivity(context, accessPoint, false); return true; } @@ -93,25 +101,32 @@ * @param selectAccount Account for which signin confirmation page should be shown. * @param isDefaultAccount Whether {@param selectedAccount} is the default account on * the device. Used in metrics. + * @param isFromPersonalizedPromo Whether the signin activity is started from a personalized + * promo. */ public static void startFromConfirmationPage(Context context, @AccessPoint int accessPoint, - String selectAccount, boolean isDefaultAccount) { + String selectAccount, boolean isDefaultAccount, boolean isFromPersonalizedPromo) { Intent intent = new Intent(context, AccountSigninActivity.class); intent.putExtra(INTENT_SIGNIN_ACCESS_POINT, accessPoint); intent.putExtra(INTENT_SIGNIN_FLOW_TYPE, SIGNIN_FLOW_CONFIRMATION_ONLY); intent.putExtra(INTENT_ACCOUNT_NAME, selectAccount); intent.putExtra(INTENT_IS_DEFAULT_ACCOUNT, isDefaultAccount); + intent.putExtra(INTENT_IS_FROM_PERSONALIZED_PROMO, isFromPersonalizedPromo); context.startActivity(intent); } /** * Starts AccountSigninActivity from "Add account" page. * @param accessPoint {@link AccessPoint} for starting signin flow. Used in metrics. + * @param isFromPersonalizedPromo Whether the signin activity is started from a personalized + * promo. */ - public static void startFromAddAccountPage(Context context, @AccessPoint int accessPoint) { + public static void startFromAddAccountPage( + Context context, @AccessPoint int accessPoint, boolean isFromPersonalizedPromo) { Intent intent = new Intent(context, AccountSigninActivity.class); intent.putExtra(INTENT_SIGNIN_ACCESS_POINT, accessPoint); intent.putExtra(INTENT_SIGNIN_FLOW_TYPE, SIGNIN_FLOW_ADD_NEW_ACCOUNT); + intent.putExtra(INTENT_IS_FROM_PERSONALIZED_PROMO, isFromPersonalizedPromo); context.startActivity(intent); } @@ -141,17 +156,20 @@ || mAccessPoint == SigninAccessPoint.AUTOFILL_DROPDOWN : "invalid access point: " + mAccessPoint; - mView = (AccountSigninView) LayoutInflater.from(this).inflate( + mIsFromPersonalizedPromo = + getIntent().getBooleanExtra(INTENT_IS_FROM_PERSONALIZED_PROMO, false); + + AccountSigninView view = (AccountSigninView) LayoutInflater.from(this).inflate( R.layout.account_signin_view, null); int imageSize = getResources().getDimensionPixelSize(R.dimen.signin_account_image_size); ProfileDataCache profileDataCache = new ProfileDataCache(this, Profile.getLastUsedProfile(), imageSize); - int flowType = getIntent().getIntExtra(INTENT_SIGNIN_FLOW_TYPE, -1); - switch (flowType) { + mSigninFlowType = getIntent().getIntExtra(INTENT_SIGNIN_FLOW_TYPE, -1); + switch (mSigninFlowType) { case SIGNIN_FLOW_DEFAULT: - mView.initFromSelectionPage(profileDataCache, false, this, this); + view.initFromSelectionPage(profileDataCache, false, this, this); break; case SIGNIN_FLOW_CONFIRMATION_ONLY: { String accountName = getIntent().getStringExtra(INTENT_ACCOUNT_NAME); @@ -160,32 +178,29 @@ } boolean isDefaultAccount = getIntent().getBooleanExtra(INTENT_IS_DEFAULT_ACCOUNT, false); - mView.initFromConfirmationPage(profileDataCache, false, accountName, + view.initFromConfirmationPage(profileDataCache, false, accountName, isDefaultAccount, AccountSigninView.UNDO_ABORT, this, this); break; } case SIGNIN_FLOW_ADD_NEW_ACCOUNT: - mView.initFromAddAccountPage(profileDataCache, this, this); + view.initFromAddAccountPage(profileDataCache, this, this); break; default: - throw new IllegalArgumentException("Unknown signin flow type: " + flowType); + throw new IllegalArgumentException("Unknown signin flow type: " + mSigninFlowType); } - if (getAccessPoint() == SigninAccessPoint.BOOKMARK_MANAGER - || getAccessPoint() == SigninAccessPoint.RECENT_TABS) { - mView.configureForRecentTabsOrBookmarksPage(); + if (mAccessPoint == SigninAccessPoint.BOOKMARK_MANAGER + || mAccessPoint == SigninAccessPoint.RECENT_TABS) { + view.configureForRecentTabsOrBookmarksPage(); } - setContentView(mView); + setContentView(view); - SigninManager.logSigninStartAccessPoint(getAccessPoint()); + SigninManager.logSigninStartAccessPoint(mAccessPoint); + recordSigninStartedHistogramAccountInfo(); recordSigninStartedUserAction(); } - @AccessPoint private int getAccessPoint() { - return mAccessPoint; - } - @Override public void onAccountSelectionCanceled() { finish(); @@ -209,6 +224,7 @@ startActivity(intent); } + recordSigninCompletedHistogramAccountInfo(); finish(); } @@ -220,8 +236,56 @@ @Override public void onFailedToSetForcedAccount(String forcedAccountName) {} + private void recordSigninCompletedHistogramAccountInfo() { + if (!mIsFromPersonalizedPromo) { + return; + } + + final String histogram; + switch (mSigninFlowType) { + case SIGNIN_FLOW_ADD_NEW_ACCOUNT: + histogram = "Signin.SigninCompletedAccessPoint.NewAccount"; + break; + case SIGNIN_FLOW_CONFIRMATION_ONLY: + histogram = "Signin.SigninCompletedAccessPoint.WithDefault"; + break; + case SIGNIN_FLOW_DEFAULT: + histogram = "Signin.SigninCompletedAccessPoint.NotDefault"; + break; + default: + assert false : "Unexpected signin flow type!"; + return; + } + + RecordHistogram.recordEnumeratedHistogram(histogram, mAccessPoint, SigninAccessPoint.MAX); + } + + private void recordSigninStartedHistogramAccountInfo() { + if (!mIsFromPersonalizedPromo) { + return; + } + + final String histogram; + switch (mSigninFlowType) { + case SIGNIN_FLOW_ADD_NEW_ACCOUNT: + histogram = "Signin.SigninStartedAccessPoint.NewAccount"; + break; + case SIGNIN_FLOW_CONFIRMATION_ONLY: + histogram = "Signin.SigninStartedAccessPoint.WithDefault"; + break; + case SIGNIN_FLOW_DEFAULT: + histogram = "Signin.SigninStartedAccessPoint.NotDefault"; + break; + default: + assert false : "Unexpected signin flow type!"; + return; + } + + RecordHistogram.recordEnumeratedHistogram(histogram, mAccessPoint, SigninAccessPoint.MAX); + } + private void recordSigninStartedUserAction() { - switch (getAccessPoint()) { + switch (mAccessPoint) { case SigninAccessPoint.AUTOFILL_DROPDOWN: RecordUserAction.record("Signin_Signin_FromAutofillDropdown"); break;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninAndSyncView.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninAndSyncView.java index e114946..06fc08e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninAndSyncView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninAndSyncView.java
@@ -199,8 +199,8 @@ new OnClickListener() { @Override public void onClick(View view) { - AccountSigninActivity - .startAccountSigninActivity(getContext(), mAccessPoint); + AccountSigninActivity.startAccountSigninActivity( + getContext(), mAccessPoint, false); } });
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 e71b484..1d1e0b0 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
@@ -206,7 +206,7 @@ view.getSigninButton().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - AccountSigninActivity.startFromAddAccountPage(context, mAccessPoint); + AccountSigninActivity.startFromAddAccountPage(context, mAccessPoint, true); } }); @@ -226,7 +226,7 @@ @Override public void onClick(View view) { AccountSigninActivity.startFromConfirmationPage( - context, mAccessPoint, mAccountName, true); + context, mAccessPoint, mAccountName, true, true); } }); @@ -236,7 +236,7 @@ view.getChooseAccountButton().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - AccountSigninActivity.startAccountSigninActivity(context, mAccessPoint); + AccountSigninActivity.startAccountSigninActivity(context, mAccessPoint, true); } }); view.getChooseAccountButton().setVisibility(View.VISIBLE);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java index 2d6f9e3..6ade6e4f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java
@@ -53,7 +53,8 @@ private final TextView mSnippetTextView; private final TextView mAgeTextView; private final TintedImageView mThumbnailView; - private final ImageView mThumbnailVideoOverlay; + // TODO(dgn): Modern suggestions currently do not support the video overlay at all. + private final @Nullable ImageView mThumbnailVideoOverlay; private final ImageView mOfflineBadge; private final View mPublisherBar; @@ -111,7 +112,10 @@ mHeadlineTextView.setMaxLines(headerMaxLines); mSnippetTextView.setVisibility(showDescription ? View.VISIBLE : View.GONE); mThumbnailView.setVisibility(showThumbnail ? View.VISIBLE : View.GONE); - mThumbnailVideoOverlay.setVisibility(showThumbnailVideoOverlay ? View.VISIBLE : View.GONE); + if (mThumbnailVideoOverlay != null) { + mThumbnailVideoOverlay.setVisibility( + showThumbnailVideoOverlay ? View.VISIBLE : View.GONE); + } ViewGroup.MarginLayoutParams publisherBarParams = (ViewGroup.MarginLayoutParams) mPublisherBar.getLayoutParams();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java index 7312fd0..7111004 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java
@@ -22,7 +22,6 @@ import org.chromium.chrome.browser.ntp.ContextMenuManager.ContextMenuItemId; import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; import org.chromium.chrome.browser.offlinepages.OfflinePageItem; -import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.ui.mojom.WindowOpenDisposition; import java.util.ArrayList; @@ -479,12 +478,7 @@ Tile tile = findTile(mSiteData); if (tile != null) { // Do nothing if the tile was removed. if (icon == null) { - if (FeatureUtilities.isChromeHomeModernEnabled()) { - mTileRenderer.setDefaultTileIcon(tile); - } else { - mTileRenderer.setTileIconFromColor( - tile, fallbackColor, isFallbackColorDefault); - } + mTileRenderer.setTileIconFromColor(tile, fallbackColor, isFallbackColorDefault); } else { mTileRenderer.setTileIconFromBitmap(tile, icon); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileRenderer.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileRenderer.java index 8646db6..dcad8c09 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileRenderer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileRenderer.java
@@ -12,7 +12,6 @@ import android.graphics.drawable.BitmapDrawable; import android.os.AsyncTask; import android.support.annotation.LayoutRes; -import android.support.graphics.drawable.VectorDrawableCompat; import android.support.v4.graphics.drawable.RoundedBitmapDrawable; import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory; import android.view.LayoutInflater; @@ -202,12 +201,6 @@ isFallbackColorDefault ? TileVisualType.ICON_DEFAULT : TileVisualType.ICON_COLOR); } - public void setDefaultTileIcon(Tile tile) { - tile.setIcon(VectorDrawableCompat.create(mContext.getResources(), - R.drawable.tile_suggestion_default_icon, mContext.getTheme())); - tile.setType(TileVisualType.ICON_DEFAULT); - } - @LayoutRes private int getLayout() { switch (mStyle) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java index 34c9e9fa..b2b2d68 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java
@@ -17,6 +17,7 @@ import org.chromium.chrome.browser.AppHooks; import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.media.MediaCaptureNotificationService; +import org.chromium.chrome.browser.metrics.UmaSessionStats; import org.chromium.chrome.browser.metrics.UmaUtils; import org.chromium.chrome.browser.policy.PolicyAuditor; import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent; @@ -124,7 +125,7 @@ rendererCrashStatus = TAB_RENDERER_CRASH_STATUS_SHOWN_IN_FOREGROUND_APP; mTab.showSadTab(); // This is necessary to correlate histogram data with stability counts. - RecordHistogram.recordBooleanHistogram("Stability.Android.RendererCrash", true); + UmaSessionStats.logRendererCrash(); } RecordHistogram.recordEnumeratedHistogram( "Tab.RendererCrashStatus", rendererCrashStatus, TAB_RENDERER_CRASH_STATUS_MAX);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java index 097283e2..d8ee5353 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
@@ -738,6 +738,11 @@ return mLastContentHeight; } + @VisibleForTesting + public View getPresentationViewForTesting() { + return mPresentationView; + } + private native long nativeInit(VrShellDelegate delegate, long nativeWindowAndroid, boolean forWebVR, boolean webVrAutopresentationExpected, boolean inCct, long gvrApi, boolean reprojectedRendering, float displayWidthMeters, float displayHeightMeters,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkOfflineDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkOfflineDialog.java index 5509fa6..e1386a2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkOfflineDialog.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkOfflineDialog.java
@@ -4,11 +4,10 @@ package org.chromium.chrome.browser.webapps; -import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; -import android.view.ContextThemeWrapper; +import android.support.v7.app.AlertDialog; import org.chromium.chrome.R; @@ -29,9 +28,7 @@ * @param appName The name of the WebAPK for which the dialog is shown. */ public void show(Context context, final DialogListener listener, String appName) { - // The context theme wrapper is needed for pre-L. - AlertDialog.Builder builder = new AlertDialog.Builder( - new ContextThemeWrapper(context, android.R.style.Theme_DeviceDefault_Light_Dialog)); + AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialogTheme); builder.setMessage(context.getString(R.string.webapk_offline_dialog, appName)) .setNegativeButton(R.string.webapk_offline_dialog_quit_button, new DialogInterface.OnClickListener() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java index a3c1170..98e79b9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -1057,13 +1057,17 @@ } else { oldView.setVisibility(View.INVISIBLE); } + if (parent != newView.getParent()) parent.addView(newView); } }); animators.add(fadeOutAnimator); + } else { + // Normally the new view is added at the end of the fade-out animation of the old view, + // if there is no old view, attach the new one immediately. + if (parent != newView.getParent()) parent.addView(newView); } // Fade in the new view. - if (parent != newView.getParent()) parent.addView(newView); newView.setAlpha(0); ValueAnimator fadeInAnimator = ObjectAnimator.ofFloat(newView, View.ALPHA, 1); fadeInAnimator.setDuration(TRANSITION_DURATION_MS);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java index c685d26..fc027ada 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java
@@ -10,14 +10,11 @@ import android.content.res.Resources; import android.support.annotation.IntDef; import android.support.annotation.Nullable; -import android.support.design.internal.BottomNavigationItemView; -import android.support.design.internal.BottomNavigationMenuView; -import android.support.design.widget.BottomNavigationView; -import android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener; import android.util.AttributeSet; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; import org.chromium.base.ActivityState; import org.chromium.base.ApiCompatibilityUtils; @@ -39,11 +36,14 @@ import org.chromium.chrome.browser.util.MathUtils; import org.chromium.chrome.browser.widget.ViewHighlighter; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.BottomSheetContent; +import org.chromium.chrome.browser.widget.bottomsheet.base.BottomNavigationItemView; +import org.chromium.chrome.browser.widget.bottomsheet.base.BottomNavigationMenuView; +import org.chromium.chrome.browser.widget.bottomsheet.base.BottomNavigationView; +import org.chromium.chrome.browser.widget.bottomsheet.base.BottomNavigationView.OnNavigationItemSelectedListener; import org.chromium.ui.UiUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.lang.reflect.Field; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -218,7 +218,7 @@ + res.getDimensionPixelOffset(R.dimen.bottom_nav_space_from_toolbar); setOnNavigationItemSelectedListener(this); - disableShiftingMode(); + hideMenuLabels(); mSnackbarManager = new SnackbarManager( mActivity, (ViewGroup) activity.findViewById(R.id.bottom_sheet_snackbar_container)); @@ -231,6 +231,24 @@ if (newState == ActivityState.STOPPED) mSnackbarManager.onStop(); } }, mActivity); + + // We use a global layout listener here to ensure we update menu item spacing after the + // menu icons have their full width. + mBottomSheet.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + updateMenuItemSpacing(); + } + }); + } + + /** + * Whenever this is triggered by a global layout change, we ensure that our bottom navigation + * menu items are spaced apart appropriately. + */ + private void updateMenuItemSpacing() { + getMenuView().updateMenuItemSpacingForMinWidth( + mBottomSheet.getWidth(), mBottomSheet.getHeight()); } /** @@ -307,24 +325,11 @@ return true; } - // TODO(twellington): remove this once the support library is updated to allow disabling - // shifting mode or determines shifting mode based on the width of the - // child views. - private void disableShiftingMode() { - BottomNavigationMenuView menuView = (BottomNavigationMenuView) getChildAt(0); - try { - Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); - shiftingMode.setAccessible(true); - shiftingMode.setBoolean(menuView, false); - shiftingMode.setAccessible(false); - for (int i = 0; i < menuView.getChildCount(); i++) { - BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); - item.setShiftingMode(false); - // Set the checked value so that the view will be updated. - item.setChecked(item.getItemData().isChecked()); - } - } catch (NoSuchFieldException | IllegalAccessException e) { - // Do nothing if reflection fails. + private void hideMenuLabels() { + BottomNavigationMenuView menuView = getMenuView(); + for (int i = 0; i < menuView.getChildCount(); i++) { + BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); + item.hideLabel(); } } @@ -379,8 +384,9 @@ } private void updateVisuals(boolean isIncognitoTabModelSelected) { - setBackgroundResource(isIncognitoTabModelSelected ? R.color.incognito_primary_color - : R.color.default_primary_color); + setBackgroundResource(isIncognitoTabModelSelected + ? R.color.incognito_primary_color_home_bottom_nav + : R.color.primary_color_home_bottom_nav); ColorStateList tint = ApiCompatibilityUtils.getColorStateList(getResources(), isIncognitoTabModelSelected ? R.color.bottom_nav_tint_incognito
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index 5c9bc12..93b64ee 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -449,6 +449,9 @@ <message name="IDS_PASSWORD_ENTRY_EDITOR_DELETE_STORED_PASSWORD_ACTION_TITLE" desc='Title for button on action bar that deletes the stored password.'> Delete password </message> + <message name="IDS_PASSWORD_ENTRY_EDITOR_HIDE_STORED_PASSWORD" desc="A tooltip on a button that hides the saved password that is being shown."> + Hide password + </message> <message name="IDS_PASSWORD_ENTRY_EDITOR_DELETE_STORED_PASSWORD" desc='Content description for the button that allows users to delete the stored password.'> Delete stored password </message> @@ -2393,6 +2396,9 @@ <message name="IDS_NTP_ALL_DISMISSED_BODY_TEXT_EVENING" desc="Body text shown in the evening on the New Tab Page when all suggested content has been dismissed."> More articles will appear soon. Enjoy your evening! </message> + <message name="IDS_NTP_ALL_DISMISSED_BODY_TEXT_MODERN" desc="Body text shown on the New Tab Page when all suggested content has been dismissed. The message refers to the "More" button to fetch more suggestions."> + Tap More to get articles + </message> <message name="IDS_NTP_ALL_DISMISSED_REFRESH" desc="Text label for button to refresh the New Tab Page when all suggested content has been dismissed. [CHAR-LIMIT=20]"> Refresh </message>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializerTest.java index 3f77c34..75bef21c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/channels/ChannelsInitializerTest.java
@@ -13,6 +13,7 @@ import android.annotation.TargetApi; import android.app.NotificationChannel; +import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.content.Context; import android.os.Build; @@ -20,15 +21,19 @@ import android.support.test.filters.SmallTest; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.annotations.SuppressFBWarnings; import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.MinAndroidSdkLevel; +import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.notifications.NotificationManagerProxy; import org.chromium.chrome.browser.notifications.NotificationManagerProxyImpl; import org.chromium.chrome.browser.notifications.NotificationSettingsBridge; +import org.chromium.chrome.test.util.browser.Features; import java.util.ArrayList; import java.util.Iterator; @@ -46,6 +51,10 @@ private NotificationManagerProxy mNotificationManagerProxy; private Context mContext; + @Rule + @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") + public Features.Processor processor = new Features.Processor(); + @Before public void setUp() throws Exception { mContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); @@ -53,13 +62,18 @@ (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE)); mChannelsInitializer = new ChannelsInitializer(mNotificationManagerProxy, mContext.getResources()); - // Delete any channels that may already have been initialized. Cleaning up here rather than - // in tearDown in case tests running before these ones caused channels to be created. + // Delete any channels and channel groups that may already have been initialized. Cleaning + // up here rather than in tearDown in case tests running before these ones caused channels + // to be created. for (NotificationChannel channel : mNotificationManagerProxy.getNotificationChannels()) { if (!channel.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID)) { mNotificationManagerProxy.deleteNotificationChannel(channel.getId()); } } + for (NotificationChannelGroup group : + mNotificationManagerProxy.getNotificationChannelGroups()) { + mNotificationManagerProxy.deleteNotificationChannelGroup(group.getId()); + } } @Test @@ -67,6 +81,7 @@ @MinAndroidSdkLevel(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O) @Feature({"Browser", "Notifications"}) + @Features(@Features.Register(ChromeFeatureList.SITE_NOTIFICATION_CHANNELS)) public void testDeleteLegacyChannels_noopOnCurrentDefinitions() throws Exception { assertThat(getChannelsIgnoringDefault(), is(empty())); @@ -96,7 +111,7 @@ containsInAnyOrder(ChannelDefinitions.CHANNEL_ID_BROWSER, ChannelDefinitions.CHANNEL_ID_DOWNLOADS, ChannelDefinitions.CHANNEL_ID_INCOGNITO, - ChannelDefinitions.CHANNEL_ID_SITES, ChannelDefinitions.CHANNEL_ID_MEDIA)); + ChannelDefinitions.CHANNEL_ID_MEDIA)); } @Test @@ -204,6 +219,45 @@ @MinAndroidSdkLevel(Build.VERSION_CODES.O) @TargetApi(Build.VERSION_CODES.O) @Feature({"Browser", "Notifications"}) + public void testEnsureInitialized_contentSuggestionsEnabled() throws Exception { + mChannelsInitializer.ensureInitialized(ChannelDefinitions.CHANNEL_ID_CONTENT_SUGGESTIONS); + + assertThat(getChannelsIgnoringDefault(), hasSize(1)); + + NotificationChannel channel = getChannelsIgnoringDefault().get(0); + assertThat(channel.getId(), is(ChannelDefinitions.CHANNEL_ID_CONTENT_SUGGESTIONS)); + assertThat(channel.getName().toString(), + is(mContext.getString( + org.chromium.chrome.R.string.notification_category_content_suggestions))); + assertThat(channel.getImportance(), is(NotificationManager.IMPORTANCE_LOW)); + assertThat(channel.getGroup(), is(ChannelDefinitions.CHANNEL_GROUP_ID_GENERAL)); + } + + @Test + @SmallTest + @MinAndroidSdkLevel(Build.VERSION_CODES.O) + @TargetApi(Build.VERSION_CODES.O) + @Feature({"Browser", "Notifications"}) + public void testEnsureInitialized_contentSuggestionsDisabled() throws Exception { + mChannelsInitializer.ensureInitializedAndDisabled( + ChannelDefinitions.CHANNEL_ID_CONTENT_SUGGESTIONS); + + assertThat(getChannelsIgnoringDefault(), hasSize(1)); + + NotificationChannel channel = getChannelsIgnoringDefault().get(0); + assertThat(channel.getId(), is(ChannelDefinitions.CHANNEL_ID_CONTENT_SUGGESTIONS)); + assertThat(channel.getName().toString(), + is(mContext.getString( + org.chromium.chrome.R.string.notification_category_content_suggestions))); + assertThat(channel.getImportance(), is(NotificationManager.IMPORTANCE_NONE)); + assertThat(channel.getGroup(), is(ChannelDefinitions.CHANNEL_GROUP_ID_GENERAL)); + } + + @Test + @SmallTest + @MinAndroidSdkLevel(Build.VERSION_CODES.O) + @TargetApi(Build.VERSION_CODES.O) + @Feature({"Browser", "Notifications"}) public void testEnsureInitialized_singleOriginSiteChannel() throws Exception { String origin = "https://example.com"; long creationTime = 621046800000L; @@ -245,4 +299,4 @@ } return channels; } -} \ No newline at end of file +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java index 6d74b14..c51cd9a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialogTest.java
@@ -4,13 +4,15 @@ package org.chromium.chrome.browser.photo_picker; -import android.support.test.filters.LargeTest; +import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; + import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Button; import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CallbackHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.widget.selection.SelectionDelegate; @@ -24,12 +26,17 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; /** * Tests for the PhotoPickerDialog class. */ public class PhotoPickerDialogTest extends ChromeActivityTestCaseBase<ChromeActivity> - implements PhotoPickerListener, SelectionObserver<PickerBitmap> { + implements PhotoPickerListener, DecoderServiceHost.ServiceReadyCallback, + SelectionObserver<PickerBitmap> { + // The timeout (in seconds) to wait for the decoder service to be ready. + private static final long WAIT_TIMEOUT_SECONDS = scaleTimeout(30); + // The dialog we are testing. private PhotoPickerDialog mDialog; @@ -56,6 +63,9 @@ // A callback that fires when an action is taken in the dialog (cancel/done etc). public final CallbackHelper onActionCallback = new CallbackHelper(); + // A callback that fires when the decoder is ready. + public final CallbackHelper onDecoderReadyCallback = new CallbackHelper(); + public PhotoPickerDialogTest() { super(ChromeActivity.class); } @@ -74,6 +84,8 @@ mTestFiles.add(new PickerBitmap("e", 1L, PickerBitmap.PICTURE)); mTestFiles.add(new PickerBitmap("f", 0L, PickerBitmap.PICTURE)); PickerCategoryView.setTestFiles(mTestFiles); + + DecoderServiceHost.setReadyCallback(this); } @Override @@ -91,6 +103,13 @@ onActionCallback.notifyCalled(); } + // DecoderServiceHost.ServiceReadyCallback: + + @Override + public void serviceReady() { + onDecoderReadyCallback.notifyCalled(); + } + // SelectionObserver: @Override @@ -124,6 +143,12 @@ return dialog; } + private void waitForDecoder() throws Exception { + int callCount = onSelectionCallback.getCallCount(); + onDecoderReadyCallback.waitForCallback( + callCount, 1, WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } + private void clickView(final int position, final int expectedSelectionCount) throws Exception { RecyclerView recyclerView = getRecyclerView(); RecyclerViewTestUtils.waitForView(recyclerView, position); @@ -169,10 +194,18 @@ }); } - @LargeTest + /** + * Continues to be flaky on bots which doesn't reproduce on local devices, + * continuing to investigate offline. + * + * https://crbug.com/761060 + * @LargeTest + */ + @DisabledTest public void testNoSelection() throws Throwable { createDialog(false, Arrays.asList("image/*")); // Multi-select = false. assertTrue(mDialog.isShowing()); + waitForDecoder(); int expectedSelectionCount = 1; clickView(0, expectedSelectionCount); @@ -184,10 +217,18 @@ dismissDialog(); } - @LargeTest + /** + * Continues to be flaky on bots which doesn't reproduce on local devices, + * continuing to investigate offline. + * + * https://crbug.com/761060 + * @LargeTest + */ + @DisabledTest public void testSingleSelectionPhoto() throws Throwable { createDialog(false, Arrays.asList("image/*")); // Multi-select = false. assertTrue(mDialog.isShowing()); + waitForDecoder(); // Expected selection count is 1 because clicking on a new view unselects other. int expectedSelectionCount = 1; @@ -202,10 +243,18 @@ dismissDialog(); } - @LargeTest + /** + * Continues to be flaky on bots which doesn't reproduce on local devices, + * continuing to investigate offline. + * + * https://crbug.com/761060 + * @LargeTest + */ + @DisabledTest public void testMultiSelectionPhoto() throws Throwable { createDialog(true, Arrays.asList("image/*")); // Multi-select = true. assertTrue(mDialog.isShowing()); + waitForDecoder(); // Multi-selection is enabled, so each click is counted. int expectedSelectionCount = 1;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/EmulatedVrController.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/EmulatedVrController.java index 6712bda..f2578a511 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/EmulatedVrController.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/EmulatedVrController.java
@@ -34,6 +34,10 @@ return mApi; } + public void sendClickButtonToggleEvent() { + mApi.buttonEvent.sendClickButtonToggleEvent(); + } + /** * Presses and quickly releases the Daydream controller's touchpad button. * Or, if the button is already pressed, releases and quickly presses again.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrInputTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrInputTest.java index c8c73487..11cab78 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrInputTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrInputTest.java
@@ -12,7 +12,11 @@ import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_NON_DAYDREAM; import android.os.Build; +import android.os.SystemClock; +import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; +import android.view.MotionEvent; +import android.view.View; import org.junit.Assert; import org.junit.Before; @@ -32,11 +36,11 @@ import org.chromium.base.test.util.Restriction; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.ChromeSwitches; -import org.chromium.chrome.browser.vr_shell.util.CardboardUtils; import org.chromium.chrome.browser.vr_shell.util.VrTestRuleUtils; import org.chromium.chrome.browser.vr_shell.util.VrTransitionUtils; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; +import org.chromium.content.browser.test.util.ClickUtils; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; @@ -51,7 +55,8 @@ @RunWith(ParameterizedRunner.class) @UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, - ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG, "enable-webvr"}) + ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG, "enable-webvr", + "enable-gamepad-extensions"}) @MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT) // WebVR is only supported on K+ public class WebVrInputTest { @ClassParameter @@ -74,14 +79,13 @@ } /** - * Tests that screen touches are not registered when the viewer is a Daydream View. + * Tests that screen touches are not registered when in VR. */ @Test @MediumTest - @Restriction(RESTRICTION_TYPE_VIEWER_DAYDREAM) - public void testScreenTapsNotRegisteredOnDaydream() throws InterruptedException { + public void testScreenTapsNotRegistered() throws InterruptedException { mVrTestFramework.loadUrlAndAwaitInitialization( - VrTestFramework.getHtmlTestFile("test_screen_taps_not_registered_on_daydream"), + VrTestFramework.getHtmlTestFile("test_screen_taps_not_registered"), PAGE_LOAD_TIMEOUT_S); mVrTestFramework.executeStepAndWait( "stepVerifyNoInitialTaps()", mVrTestFramework.getFirstTabWebContents()); @@ -98,7 +102,8 @@ touchRegisteredLatch.countDown(); } }); - CardboardUtils.sendCardboardClick(mVrTestRule.getActivity()); + ClickUtils.mouseSingleClickView(InstrumentationRegistry.getInstrumentation(), + mVrTestRule.getActivity().getWindow().getDecorView().getRootView()); Assert.assertTrue("VrShellImpl dispatched touches", touchRegisteredLatch.await(POLL_TIMEOUT_SHORT_MS, TimeUnit.MILLISECONDS)); mVrTestFramework.executeStepAndWait( @@ -107,24 +112,22 @@ } /** - * Tests that Daydream controller clicks are registered as screen taps when the viewer is a - * Daydream View. + * Tests that Daydream controller clicks are registered as gamepad button pressed. */ @Test @MediumTest @Restriction(RESTRICTION_TYPE_VIEWER_DAYDREAM) - public void testControllerClicksRegisteredAsTapsOnDaydream() throws InterruptedException { + public void testControllerClicksRegisteredOnDaydream() throws InterruptedException { EmulatedVrController controller = new EmulatedVrController(mVrTestRule.getActivity()); mVrTestFramework.loadUrlAndAwaitInitialization( - VrTestFramework.getHtmlTestFile("test_screen_taps_registered"), - PAGE_LOAD_TIMEOUT_S); - mVrTestFramework.executeStepAndWait( - "stepVerifyNoInitialTaps()", mVrTestFramework.getFirstTabWebContents()); + VrTestFramework.getHtmlTestFile("test_gamepad_button"), PAGE_LOAD_TIMEOUT_S); // Wait to enter VR VrTransitionUtils.enterPresentationAndWait( mVrTestFramework.getFirstTabCvc(), mVrTestFramework.getFirstTabWebContents()); - // Send a controller click and wait for JavaScript to receive it - controller.pressReleaseTouchpadButton(); + // Send a controller click and wait for JavaScript to receive it. + controller.sendClickButtonToggleEvent(); + mVrTestFramework.waitOnJavaScriptStep(mVrTestFramework.getFirstTabWebContents()); + controller.sendClickButtonToggleEvent(); mVrTestFramework.waitOnJavaScriptStep(mVrTestFramework.getFirstTabWebContents()); mVrTestFramework.endTest(mVrTestFramework.getFirstTabWebContents()); } @@ -140,16 +143,36 @@ sdk_is_less_than = Build.VERSION_CODES.M) public void testScreenTapsRegisteredOnCardboard() throws InterruptedException { mVrTestFramework.loadUrlAndAwaitInitialization( - VrTestFramework.getHtmlTestFile("test_screen_taps_registered"), - PAGE_LOAD_TIMEOUT_S); - mVrTestFramework.executeStepAndWait( - "stepVerifyNoInitialTaps()", mVrTestFramework.getFirstTabWebContents()); + VrTestFramework.getHtmlTestFile("test_gamepad_button"), PAGE_LOAD_TIMEOUT_S); // Wait to enter VR VrTransitionUtils.enterPresentationAndWait( mVrTestFramework.getFirstTabCvc(), mVrTestFramework.getFirstTabWebContents()); - // Tap and wait for JavaScript to receive it - CardboardUtils.sendCardboardClickAndWait( - mVrTestRule.getActivity(), mVrTestFramework.getFirstTabWebContents()); + int x = mVrTestFramework.getFirstTabCvc().getViewportHeightPix() / 2; + int y = mVrTestFramework.getFirstTabCvc().getViewportWidthPix() / 2; + + // TODO(mthiesse, crbug.com/758374): Injecting touch events into the root GvrLayout + // (VrShellImpl) is flaky. Sometimes the events just don't get routed to the presentation + // view for no apparent reason. We should figure out why this is and see if it's fixable. + final View presentationView = ((VrShellImpl) VrShellDelegate.getVrShellForTesting()) + .getPresentationViewForTesting(); + long downTime = SystemClock.uptimeMillis(); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + presentationView.dispatchTouchEvent( + MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0)); + } + }); + mVrTestFramework.waitOnJavaScriptStep(mVrTestFramework.getFirstTabWebContents()); + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + long now = SystemClock.uptimeMillis(); + presentationView.dispatchTouchEvent( + MotionEvent.obtain(downTime, now, MotionEvent.ACTION_UP, x, y, 0)); + } + }); + mVrTestFramework.waitOnJavaScriptStep(mVrTestFramework.getFirstTabWebContents()); mVrTestFramework.endTest(mVrTestFramework.getFirstTabWebContents()); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/util/CardboardUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/util/CardboardUtils.java deleted file mode 100644 index 36750f3..0000000 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/util/CardboardUtils.java +++ /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. - -package org.chromium.chrome.browser.vr_shell.util; - -import android.app.Activity; -import android.support.test.InstrumentationRegistry; - -import org.chromium.chrome.browser.vr_shell.VrTestFramework; -import org.chromium.content.browser.test.util.ClickUtils; -import org.chromium.content_public.browser.WebContents; - -/** - * Class containing utility functions for sending Cardboard clicks, aka - * screen taps. - */ -public class CardboardUtils { - /** - * Use to simulate a cardboard click by sending a touch event to the device. - * @param activity The activity to send the cardboard click to. - */ - public static void sendCardboardClick(Activity activity) { - ClickUtils.mouseSingleClickView(InstrumentationRegistry.getInstrumentation(), - activity.getWindow().getDecorView().getRootView()); - } - - /** - * Sends a cardboard click then waits for the JavaScript step to finish. - * - * Only meant to be used alongside the test framework from VrTestFramework. - * @param activity The activity to send the cardboard click to. - * @param webContents The WebContents for the tab the JavaScript step is in. - */ - public static void sendCardboardClickAndWait(Activity activity, WebContents webContents) { - sendCardboardClick(activity); - VrTestFramework.waitOnJavaScriptStep(webContents); - } -}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitionsTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitionsTest.java index 2c386aa4..fdeffb9a 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitionsTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/channels/ChannelDefinitionsTest.java
@@ -9,16 +9,26 @@ import static org.hamcrest.Matchers.isIn; import static org.hamcrest.Matchers.not; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; +import org.chromium.base.annotations.SuppressFBWarnings; +import org.chromium.chrome.browser.ChromeFeatureList; +import org.chromium.chrome.test.util.browser.Features; + /** * Java unit tests for ChannelDefinitions. */ @RunWith(BlockJUnit4ClassRunner.class) public class ChannelDefinitionsTest { + @Rule + @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") + public Features.Processor processor = new Features.Processor(); + @Test + @Features(@Features.Register(ChromeFeatureList.SITE_NOTIFICATION_CHANNELS)) public void testNoOverlapBetweenStartupAndLegacyChannelIds() throws Exception { assertThat(ChannelDefinitions.getStartupChannelIds(), everyItem(not(isIn(ChannelDefinitions.getLegacyChannelIds()))));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/AutocompleteEditTextTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/AutocompleteEditTextTest.java index ed46b60..d96e7f7 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/AutocompleteEditTextTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/AutocompleteEditTextTest.java
@@ -12,6 +12,7 @@ import android.app.Activity; import android.content.Context; +import android.text.SpannableString; import android.text.TextUtils; import android.util.AttributeSet; import android.view.KeyEvent; @@ -52,7 +53,7 @@ // Robolectric's ShadowAccessibilityManager has a bug (crbug.com/756707). Turn this on once it's // fixed, and you can turn this off temporarily when upgrading robolectric library. - private static final boolean TEST_ACCESSIBILITY = false; + private static final boolean TEST_ACCESSIBILITY = true; @Rule public Features.Processor mProcessor = new Features.Processor(); @@ -1091,4 +1092,16 @@ } mInOrder.verifyNoMoreInteractions(); } + + // crbug.com/760013 + @Test + @Features(@Features.Register( + value = ChromeFeatureList.SPANNABLE_INLINE_AUTOCOMPLETE, enabled = true)) + public void testOnSaveInstanceStateDoesNotCrash() { + mInputConnection.setComposingText("h", 1); + mAutocomplete.setAutocompleteText("h", "ello world"); + // On Android JB, TextView#onSaveInstanceState() calls new SpannableString(mText). This + // should not crash. + new SpannableString(mAutocomplete.getText()); + } } \ No newline at end of file
diff --git a/chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json b/chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json index ee82eb49..83176bbc 100644 --- a/chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json +++ b/chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json
@@ -5,7 +5,8 @@ "set": { "VrSkipDon": true, "DaydreamSetupComplete": true, - "VrDeviceParams": "CgZHb29nbGUSCUNhcmRib2FyZB0J-SA9JQHegj0qEAAAcEIAAHBCAABwQgAAcEI1KVwPPToIV_GrPmKxDT9QAFgAYAM" + "VrDeviceParams": "CgZHb29nbGUSCUNhcmRib2FyZB0J-SA9JQHegj0qEAAAcEIAAHBCAABwQgAAcEI1KVwPPToIV_GrPmKxDT9QAFgAYAM", + "UseAutomatedController": false } } ]
diff --git a/chrome/android/third_party/widget_bottomsheet_base/BUILD.gn b/chrome/android/third_party/widget_bottomsheet_base/BUILD.gn index 78bcb51..3d1cc1f 100644 --- a/chrome/android/third_party/widget_bottomsheet_base/BUILD.gn +++ b/chrome/android/third_party/widget_bottomsheet_base/BUILD.gn
@@ -7,8 +7,6 @@ android_library("widget_bottomsheet_base_java") { java_files = [ - "java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperBase.java", - "java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperIcs.java", "java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationItemView.java", "java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationMenu.java", "java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationMenuView.java", @@ -20,7 +18,6 @@ deps = [ "//third_party/android_tools:android_support_annotations_java", "//third_party/android_tools:android_support_design_java", - "//third_party/android_tools:android_support_transition_java", "//third_party/android_tools:android_support_v7_appcompat_java", ] }
diff --git a/chrome/android/third_party/widget_bottomsheet_base/README.chromium b/chrome/android/third_party/widget_bottomsheet_base/README.chromium index 1f06148..d97359b 100644 --- a/chrome/android/third_party/widget_bottomsheet_base/README.chromium +++ b/chrome/android/third_party/widget_bottomsheet_base/README.chromium
@@ -7,4 +7,9 @@ Local Modifications: * Change package. -* Removed unnecessary version check when creating animation helper in BottomNavigationMenuView. \ No newline at end of file +* Removed unnecessary version check when creating animation helper in BottomNavigationMenuView. +* Removed onMeasure/onLayout behaviour from BottomNavigationMenuView, made it a linear layout and + used padding for icon spacing instead. +* Added ability to hide labels. +* Removed shifting mode and associated code paths. +* Removed animations and associated helpers.
diff --git a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperBase.java b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperBase.java deleted file mode 100644 index 5d1ea008..0000000 --- a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperBase.java +++ /dev/null
@@ -1,28 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.chromium.chrome.browser.widget.bottomsheet.base; - -import android.view.ViewGroup; - -/** - * Forked from android.support.design.internal.BottomNavigationAnimationHelperBase. - */ -class BottomNavigationAnimationHelperBase { - void beginDelayedTransition(ViewGroup view) { - // Do nothing. - } -} \ No newline at end of file
diff --git a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperIcs.java b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperIcs.java deleted file mode 100644 index bde2b91..0000000 --- a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationAnimationHelperIcs.java +++ /dev/null
@@ -1,44 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.chromium.chrome.browser.widget.bottomsheet.base; - -import android.support.design.internal.TextScale; -import android.support.transition.AutoTransition; -import android.support.transition.TransitionManager; -import android.support.transition.TransitionSet; -import android.support.v4.view.animation.FastOutSlowInInterpolator; -import android.view.ViewGroup; - -/** Forked from android.support.design.internal.BottomNavigationAnimationHelperIcs */ -public class BottomNavigationAnimationHelperIcs extends BottomNavigationAnimationHelperBase { - private static final long ACTIVE_ANIMATION_DURATION_MS = 115L; - - private final TransitionSet mSet; - - BottomNavigationAnimationHelperIcs() { - mSet = new AutoTransition(); - mSet.setOrdering(TransitionSet.ORDERING_TOGETHER); - mSet.setDuration(ACTIVE_ANIMATION_DURATION_MS); - mSet.setInterpolator(new FastOutSlowInInterpolator()); - TextScale textScale = new TextScale(); - mSet.addTransition(textScale); - } - - void beginDelayedTransition(ViewGroup view) { - TransitionManager.beginDelayedTransition(view, mSet); - } -} \ No newline at end of file
diff --git a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationItemView.java b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationItemView.java index c1af27a..4a6a10d2 100644 --- a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationItemView.java +++ b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationItemView.java
@@ -49,16 +49,14 @@ private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; private final int mDefaultMargin; - private final int mShiftAmount; private final float mScaleUpFactor; private final float mScaleDownFactor; - private boolean mShiftingMode; - private ImageView mIcon; private final TextView mSmallLabel; private final TextView mLargeLabel; private int mItemPosition = INVALID_ITEM_POSITION; + private boolean mLabelHidden; private MenuItemImpl mItemData; @@ -80,7 +78,6 @@ int activeLabelSize = res.getDimensionPixelSize(R.dimen.design_bottom_navigation_active_text_size); mDefaultMargin = res.getDimensionPixelSize(R.dimen.design_bottom_navigation_margin); - mShiftAmount = inactiveLabelSize - activeLabelSize; mScaleUpFactor = 1f * activeLabelSize / inactiveLabelSize; mScaleDownFactor = 1f * inactiveLabelSize / activeLabelSize; @@ -110,10 +107,6 @@ return mItemPosition; } - public void setShiftingMode(boolean enabled) { - mShiftingMode = enabled; - } - @Override public MenuItemImpl getItemData() { return mItemData; @@ -132,35 +125,18 @@ @Override public void setChecked(boolean checked) { - ViewCompat.setPivotX(mLargeLabel, mLargeLabel.getWidth() / 2f); - ViewCompat.setPivotY(mLargeLabel, mLargeLabel.getBaseline()); - ViewCompat.setPivotX(mSmallLabel, mSmallLabel.getWidth() / 2f); - ViewCompat.setPivotY(mSmallLabel, mSmallLabel.getBaseline()); - if (mShiftingMode) { + LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams(); + iconParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER; + iconParams.topMargin = mDefaultMargin; + mIcon.setLayoutParams(iconParams); + + if (!mLabelHidden) { + ViewCompat.setPivotX(mLargeLabel, mLargeLabel.getWidth() / 2f); + ViewCompat.setPivotY(mLargeLabel, mLargeLabel.getBaseline()); + ViewCompat.setPivotX(mSmallLabel, mSmallLabel.getWidth() / 2f); + ViewCompat.setPivotY(mSmallLabel, mSmallLabel.getBaseline()); + if (checked) { - LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams(); - iconParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP; - iconParams.topMargin = mDefaultMargin; - mIcon.setLayoutParams(iconParams); - mLargeLabel.setVisibility(VISIBLE); - ViewCompat.setScaleX(mLargeLabel, 1f); - ViewCompat.setScaleY(mLargeLabel, 1f); - } else { - LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams(); - iconParams.gravity = Gravity.CENTER; - iconParams.topMargin = mDefaultMargin; - mIcon.setLayoutParams(iconParams); - mLargeLabel.setVisibility(INVISIBLE); - ViewCompat.setScaleX(mLargeLabel, 0.5f); - ViewCompat.setScaleY(mLargeLabel, 0.5f); - } - mSmallLabel.setVisibility(INVISIBLE); - } else { - if (checked) { - LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams(); - iconParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP; - iconParams.topMargin = mDefaultMargin + mShiftAmount; - mIcon.setLayoutParams(iconParams); mLargeLabel.setVisibility(VISIBLE); mSmallLabel.setVisibility(INVISIBLE); @@ -169,10 +145,6 @@ ViewCompat.setScaleX(mSmallLabel, mScaleUpFactor); ViewCompat.setScaleY(mSmallLabel, mScaleUpFactor); } else { - LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams(); - iconParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP; - iconParams.topMargin = mDefaultMargin; - mIcon.setLayoutParams(iconParams); mLargeLabel.setVisibility(INVISIBLE); mSmallLabel.setVisibility(VISIBLE); @@ -226,6 +198,15 @@ return true; } + /** + * Hides the label below the menu item's icon. + */ + public void hideLabel() { + mLabelHidden = true; + mSmallLabel.setVisibility(GONE); + mLargeLabel.setVisibility(GONE); + } + public void setIconTintList(ColorStateList tint) { mIconTint = tint; if (mItemData != null) {
diff --git a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationMenuView.java b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationMenuView.java index 27a630b..bf6c91d 100644 --- a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationMenuView.java +++ b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationMenuView.java
@@ -16,16 +16,11 @@ package org.chromium.chrome.browser.widget.bottomsheet.base; -import static android.support.annotation.RestrictTo.Scope.GROUP_ID; - import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; import android.support.annotation.Nullable; -import android.support.annotation.RestrictTo; import android.support.design.R; -import android.support.design.internal.BottomNavigationItemView; -import android.support.design.internal.BottomNavigationPresenter; import android.support.v4.util.Pools; import android.support.v4.view.ViewCompat; import android.support.v7.view.menu.MenuBuilder; @@ -34,31 +29,26 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; /** * Forked from android.support.design.internal.BottomNavigationMenuView. - * - * @hide For internal use only. */ -@RestrictTo(GROUP_ID) -public class BottomNavigationMenuView extends ViewGroup implements MenuView { +public class BottomNavigationMenuView extends LinearLayout implements MenuView { private final int mInactiveItemMaxWidth; private final int mInactiveItemMinWidth; private final int mActiveItemMaxWidth; private final int mItemHeight; private final OnClickListener mOnClickListener; - private final BottomNavigationAnimationHelperBase mAnimationHelper; private static final Pools.Pool<BottomNavigationItemView> sItemPool = new Pools.SynchronizedPool<>(5); - private boolean mShiftingMode = true; - private BottomNavigationItemView[] mButtons; private int mActiveButton = 0; private ColorStateList mItemIconTint; private ColorStateList mItemTextColor; private int mItemBackgroundRes; - private int[] mTempChildWidths; + private int mMenuWidth; private BottomNavigationPresenter mPresenter; private MenuBuilder mMenu; @@ -78,8 +68,6 @@ res.getDimensionPixelSize(R.dimen.design_bottom_navigation_active_item_max_width); mItemHeight = res.getDimensionPixelSize(R.dimen.design_bottom_navigation_height); - mAnimationHelper = new BottomNavigationAnimationHelperIcs(); - mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { @@ -95,7 +83,6 @@ } } }; - mTempChildWidths = new int[BottomNavigationMenu.MAX_ITEM_COUNT]; } @Override @@ -104,78 +91,6 @@ } @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - final int width = MeasureSpec.getSize(widthMeasureSpec); - final int count = getChildCount(); - - final int heightSpec = MeasureSpec.makeMeasureSpec(mItemHeight, MeasureSpec.EXACTLY); - - if (mShiftingMode) { - final int inactiveCount = count - 1; - final int activeMaxAvailable = width - inactiveCount * mInactiveItemMinWidth; - final int activeWidth = Math.min(activeMaxAvailable, mActiveItemMaxWidth); - final int inactiveMaxAvailable = (width - activeWidth) / inactiveCount; - final int inactiveWidth = Math.min(inactiveMaxAvailable, mInactiveItemMaxWidth); - int extra = width - activeWidth - inactiveWidth * inactiveCount; - for (int i = 0; i < count; i++) { - mTempChildWidths[i] = (i == mActiveButton) ? activeWidth : inactiveWidth; - if (extra > 0) { - mTempChildWidths[i]++; - extra--; - } - } - } else { - final int maxAvailable = width / (count == 0 ? 1 : count); - final int childWidth = Math.min(maxAvailable, mActiveItemMaxWidth); - int extra = width - childWidth * count; - for (int i = 0; i < count; i++) { - mTempChildWidths[i] = childWidth; - if (extra > 0) { - mTempChildWidths[i]++; - extra--; - } - } - } - - int totalWidth = 0; - for (int i = 0; i < count; i++) { - final View child = getChildAt(i); - if (child.getVisibility() == GONE) { - continue; - } - child.measure(MeasureSpec.makeMeasureSpec(mTempChildWidths[i], MeasureSpec.EXACTLY), - heightSpec); - ViewGroup.LayoutParams params = child.getLayoutParams(); - params.width = child.getMeasuredWidth(); - totalWidth += child.getMeasuredWidth(); - } - setMeasuredDimension( - ViewCompat.resolveSizeAndState(totalWidth, - MeasureSpec.makeMeasureSpec(totalWidth, MeasureSpec.EXACTLY), 0), - ViewCompat.resolveSizeAndState(mItemHeight, heightSpec, 0)); - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - final int count = getChildCount(); - final int width = right - left; - final int height = bottom - top; - int used = 0; - for (int i = 0; i < count; i++) { - final View child = getChildAt(i); - if (child.getVisibility() == GONE) { - continue; - } - if (ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL) { - child.layout(width - used - child.getMeasuredWidth(), 0, width - used, height); - } else { - child.layout(used, 0, child.getMeasuredWidth() + used, height); - } - used += child.getMeasuredWidth(); - } - } - - @Override public int getWindowAnimations() { return 0; } @@ -262,7 +177,6 @@ return; } mButtons = new BottomNavigationItemView[mMenu.size()]; - mShiftingMode = mMenu.size() > 3; for (int i = 0; i < mMenu.size(); i++) { mPresenter.setUpdateSuspended(true); mMenu.getItem(i).setCheckable(true); @@ -272,7 +186,6 @@ child.setIconTintList(mItemIconTint); child.setTextColor(mItemTextColor); child.setItemBackground(mItemBackgroundRes); - child.setShiftingMode(mShiftingMode); child.initialize((MenuItemImpl) mMenu.getItem(i), 0); child.setItemPosition(i); child.setOnClickListener(mOnClickListener); @@ -302,8 +215,6 @@ private void activateNewButton(int newButton) { if (mActiveButton == newButton) return; - mAnimationHelper.beginDelayedTransition(this); - mMenu.getItem(newButton).setChecked(true); mActiveButton = newButton; @@ -316,4 +227,29 @@ } return item; } + + /** + * Spaces menu items apart based on the minimum width of the bottom navigation menu, so the + * items are equally spaced in landscape and portrait mode. + * + * @param layoutWidth Width of the navigation menu's container. + * @param layoutHeight Height of the navigation menu's container. + */ + public void updateMenuItemSpacingForMinWidth(int layoutWidth, int layoutHeight) { + if (mButtons.length == 0) return; + + int menuWidth = Math.min(layoutWidth, layoutHeight); + if (menuWidth != mMenuWidth) { + mMenuWidth = menuWidth; + int iconWidths = 0; + for (BottomNavigationItemView item : mButtons) { + iconWidths += item.getWidth() - (item.getPaddingLeft() + item.getPaddingRight()); + } + + int padding = (menuWidth - iconWidths) / (mButtons.length * 2); + for (BottomNavigationItemView item : mButtons) { + item.setPadding(padding, item.getPaddingTop(), padding, item.getPaddingBottom()); + } + } + } }
diff --git a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationPresenter.java b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationPresenter.java index 37a52bc..04a8a89 100644 --- a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationPresenter.java +++ b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationPresenter.java
@@ -16,6 +16,8 @@ package org.chromium.chrome.browser.widget.bottomsheet.base; +import static android.support.annotation.RestrictTo.Scope.GROUP_ID; + import android.content.Context; import android.os.Parcelable; import android.support.annotation.RestrictTo; @@ -26,8 +28,6 @@ import android.support.v7.view.menu.SubMenuBuilder; import android.view.ViewGroup; -import static android.support.annotation.RestrictTo.Scope.GROUP_ID; - /** * Forked from android.support.design.internal.BottomNavigationPresenter. *
diff --git a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationView.java b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationView.java index 5539db2..e8ab10a0 100644 --- a/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationView.java +++ b/chrome/android/third_party/widget_bottomsheet_base/java/src/org/chromium/chrome/browser/widget/bottomsheet/base/BottomNavigationView.java
@@ -23,9 +23,6 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.R; -import android.support.design.internal.BottomNavigationMenu; -import android.support.design.internal.BottomNavigationMenuView; -import android.support.design.internal.BottomNavigationPresenter; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewCompat; import android.support.v7.content.res.AppCompatResources; @@ -191,6 +188,15 @@ } /** + * Returns the {@link BottomNavigationMenuView} instance associated with this bottom + * navigation bar. + */ + @NonNull + public BottomNavigationMenuView getMenuView() { + return mMenuView; + } + + /** * Inflate a menu resource into this navigation view. * * <p>Existing items in the menu will not be modified or removed.</p>
diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn index 4e2e92e..f85f3d75 100644 --- a/chrome/app/BUILD.gn +++ b/chrome/app/BUILD.gn
@@ -400,6 +400,10 @@ [ "//chrome/browser/chromeos:ash_pref_connector_manifest" ] } +if (!is_android) { + chrome_packaged_services += [ "//chrome/utility:profile_import_manifest" ] +} + service_manifest("chrome_manifest") { source = "chrome_manifest.json" }
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 97b7325..029c2b2 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -10611,6 +10611,9 @@ <message name="IDS_APP_LIST_HOTWORD_LISTENING" desc="Tooltip text for the mic button when it waits for the hotword."> Click, or say "Ok Google" to start voice search </message> + <message name="IDS_SEARCH_BOX_ACCESSIBILITY_NAME" desc="Hint text for the search box in fullscreen app list window with additional instructions to use the arrow keys in Accessibility mode."> + Search your device, apps, and web. Use the arrow keys to navigate your apps. + </message> <message name="IDS_SEARCH_BOX_HINT" desc="Hint text for the search box in app list window."> Search or type URL </message>
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd index 8946c40d..cce7149 100644 --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd
@@ -214,10 +214,15 @@ <message name="IDS_ABOUT_CROS_VERSION_LICENSE_EULA" desc="Additional text displayed beneath the Chromium open source URLs for Chrome OS."> Chrome OS open source licenses </message> + <message name="IDS_ABOUT_TERMS_OF_SERVICE" desc="The terms of service label in the About box."> + Google Chrome OS <ph name="TERMS_OF_SERVICE_LINK"><a target="_blank" href="$1"></ph>Terms of Service<ph name="END_TERMS_OF_SERVICE_LINK"></a></ph> + </message> </if> - <message name="IDS_ABOUT_TERMS_OF_SERVICE" desc="The terms of service label in the About box."> - Google Chrome <ph name="TERMS_OF_SERVICE_LINK"><a target="_blank" href="$1"></ph>Terms of Service<ph name="END_TERMS_OF_SERVICE_LINK"></a></ph> - </message> + <if expr="not chromeos"> + <message name="IDS_ABOUT_TERMS_OF_SERVICE" desc="The terms of service label in the About box."> + Google Chrome <ph name="TERMS_OF_SERVICE_LINK"><a target="_blank" href="$1"></ph>Terms of Service<ph name="END_TERMS_OF_SERVICE_LINK"></a></ph> + </message> + </if> <if expr="is_linux and not chromeos"> <message name="IDS_LINUX_WHEEZY_PRECISE_OBSOLETE_SOON" desc="A message displayed on an at-launch infobar and about:help warning the user that the computer they are using is about to become unsupported."> This computer will soon stop receiving Google Chrome updates because this Linux system will no longer be supported.
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index cd88009fd..7750fc6c 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -590,8 +590,6 @@ "media/cast_remoting_connector.h", "media/cast_remoting_sender.cc", "media/cast_remoting_sender.h", - "media/cdm_storage_id.cc", - "media/cdm_storage_id.h", "media/media_access_handler.cc", "media/media_access_handler.h", "media/media_device_id_salt.cc", @@ -604,8 +602,6 @@ "media/media_engagement_service.h", "media/media_engagement_service_factory.cc", "media/media_engagement_service_factory.h", - "media/media_storage_id_salt.cc", - "media/media_storage_id_salt.h", "media/media_url_constants.cc", "media/media_url_constants.h", "media/midi_permission_context.cc", @@ -789,8 +785,6 @@ "notifications/alert_dispatcher_mac.h", "notifications/desktop_notification_profile_util.cc", "notifications/desktop_notification_profile_util.h", - "notifications/login_state_notification_blocker_chromeos.cc", - "notifications/login_state_notification_blocker_chromeos.h", "notifications/message_center_display_service.cc", "notifications/message_center_display_service.h", "notifications/native_notification_display_service.cc", @@ -2447,8 +2441,6 @@ sources += [ "media/webrtc/desktop_media_list_ash.cc", "media/webrtc/desktop_media_list_ash.h", - "renderer_context_menu/open_with_menu_factory_ash.cc", - "renderer_context_menu/open_with_menu_factory_ash.h", "signin/signin_error_notifier_ash.cc", "signin/signin_error_notifier_ash.h", "signin/signin_error_notifier_factory_ash.cc", @@ -2908,6 +2900,7 @@ "android/password_ui_view_android.cc", "android/password_ui_view_android.h", "android/payments/service_worker_payment_app_bridge.cc", + "android/photo_picker_sandbox_bridge.cc", "android/physical_web/eddystone_encoder_bridge.cc", "android/physical_web/eddystone_encoder_bridge.h", "android/physical_web/physical_web_data_source_android.cc", @@ -3144,6 +3137,7 @@ "//components/toolbar", "//components/web_contents_delegate_android", "//rlz:rlz_utils", + "//sandbox", "//sandbox:sandbox_features", "//third_party/android_opengl/etc1", "//third_party/android_tools:cpu_features", @@ -3153,9 +3147,6 @@ ] deps -= [ "//components/storage_monitor" ] - if (use_seccomp_bpf) { - deps += [ "//sandbox/linux:seccomp_bpf" ] - } if (enable_supervised_users) { sources += [ @@ -3436,8 +3427,6 @@ "profiles/profile_shortcut_manager.h", "profiles/profile_window.cc", "profiles/profile_window.h", - "renderer_context_menu/open_with_menu_factory.cc", - "renderer_context_menu/open_with_menu_factory.h", "renderer_context_menu/render_view_context_menu.cc", "renderer_context_menu/render_view_context_menu.h", "renderer_context_menu/spelling_bubble_model.cc", @@ -4197,6 +4186,7 @@ "../android/java/src/org/chromium/chrome/browser/payments/SslValidityChecker.java", "../android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java", "../android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogDelegate.java", + "../android/java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", "../android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebBroadcastService.java", "../android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java", "../android/java/src/org/chromium/chrome/browser/policy/PolicyAuditor.java",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 3bb61c5..c5ba7593 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3200,6 +3200,11 @@ flag_descriptions::kCaptureThumbnailOnLoadFinishedDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kCaptureThumbnailOnLoadFinished)}, + {"use-new-accept-language-header", + flag_descriptions::kUseNewAcceptLanguageHeaderName, + flag_descriptions::kUseNewAcceptLanguageHeaderDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kUseNewAcceptLanguageHeader)}, + #if defined(OS_WIN) {"enable-d3d-vsync", flag_descriptions::kEnableD3DVsync, flag_descriptions::kEnableD3DVsyncDescription, kOsWin, @@ -3421,6 +3426,13 @@ FEATURE_VALUE_TYPE(base::kSyzyAsanDCheckIsFatalFeature)}, #endif // DCHECK_IS_ON() && defined(SYZYASAN) +#if defined(OS_CHROMEOS) + {"enable-external-drive-rename", + flag_descriptions::kEnableExternalDriveRename, + flag_descriptions::kEnableExternalDriveRenameDescription, kOsCrOS, + SINGLE_VALUE_TYPE(chromeos::switches::kEnableExternalDriveRename)}, +#endif // defined(OS_CHROMEOS) + // NOTE: Adding new command-line switches requires adding corresponding // entries to enum "LoginCustomFlags" in histograms/enums.xml. See note in // enums.xml and don't forget to run AboutFlagsHistogramTest unit test.
diff --git a/chrome/browser/android/DEPS b/chrome/browser/android/DEPS index c86529df..cc1bb3a 100644 --- a/chrome/browser/android/DEPS +++ b/chrome/browser/android/DEPS
@@ -11,6 +11,7 @@ "+components/web_contents_delegate_android", "+device/vr/features/features.h", "+sandbox/linux/seccomp-bpf/sandbox_bpf.h", + "+sandbox/linux/seccomp-bpf-helpers", "+sandbox/sandbox_features.h", "+third_party/gvr-android-sdk", "+third_party/WebKit/public/platform/media_download_in_product_help.mojom.h",
diff --git a/chrome/browser/android/contextualsearch/contextual_search_field_trial.h b/chrome/browser/android/contextualsearch/contextual_search_field_trial.h index 42699d2..fc3ff6e6 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_field_trial.h +++ b/chrome/browser/android/contextualsearch/contextual_search_field_trial.h
@@ -13,7 +13,7 @@ class ContextualSearchFieldTrial { public: ContextualSearchFieldTrial(); - ~ContextualSearchFieldTrial(); + virtual ~ContextualSearchFieldTrial(); // Returns a partial URL to use for a Contextual Search Resolve request, or // an empty string if no override is required. The returned value is a prefix
diff --git a/chrome/browser/android/history_report/delta_file_service.h b/chrome/browser/android/history_report/delta_file_service.h index f8c1644..0bd710d 100644 --- a/chrome/browser/android/history_report/delta_file_service.h +++ b/chrome/browser/android/history_report/delta_file_service.h
@@ -29,7 +29,7 @@ class DeltaFileService { public: explicit DeltaFileService(const base::FilePath& dir); - ~DeltaFileService(); + virtual ~DeltaFileService(); // Adds new addtion entry to delta file. virtual void PageAdded(const GURL& url);
diff --git a/chrome/browser/android/history_report/usage_reports_buffer_service.h b/chrome/browser/android/history_report/usage_reports_buffer_service.h index c44d41f..b71c47c3 100644 --- a/chrome/browser/android/history_report/usage_reports_buffer_service.h +++ b/chrome/browser/android/history_report/usage_reports_buffer_service.h
@@ -28,7 +28,7 @@ class UsageReportsBufferService { public: explicit UsageReportsBufferService(const base::FilePath& dir); - ~UsageReportsBufferService(); + virtual ~UsageReportsBufferService(); // Init buffer. All calls to buffer before it's initialized are ignored. It's // asynchronous.
diff --git a/chrome/browser/android/instantapps/instant_apps_infobar_delegate.cc b/chrome/browser/android/instantapps/instant_apps_infobar_delegate.cc index 7590d24a..3903f82 100644 --- a/chrome/browser/android/instantapps/instant_apps_infobar_delegate.cc +++ b/chrome/browser/android/instantapps/instant_apps_infobar_delegate.cc
@@ -35,7 +35,7 @@ const std::string& url) : content::WebContentsObserver(web_contents), url_(url), - web_contents_(web_contents) { + has_navigated_away_from_launch_url_(false) { JNIEnv* env = base::android::AttachCurrentThread(); java_delegate_.Reset(Java_InstantAppsInfoBarDelegate_create(env)); data_.Reset(env, jdata); @@ -66,11 +66,21 @@ void InstantAppsInfoBarDelegate::InfoBarDismissed() { - InstantAppsSettings::RecordInfoBarDismissEvent(web_contents_, url_); + content::WebContents* web_contents = + InfoBarService::WebContentsFromInfoBar(infobar()); + InstantAppsSettings::RecordInfoBarDismissEvent(web_contents, url_); base::RecordAction(base::UserMetricsAction( "Android.InstantApps.BannerDismissed")); } +void InstantAppsInfoBarDelegate::DidStartNavigation( + content::NavigationHandle* navigation_handle) { + if (!GURL(url_).EqualsIgnoringRef( + navigation_handle->GetWebContents()->GetURL())) { + has_navigated_away_from_launch_url_ = true; + } +} + void InstantAppsInfoBarDelegate::DidFinishNavigation( content::NavigationHandle* navigation_handle) { if (navigation_handle->IsErrorPage()) { @@ -80,10 +90,7 @@ bool InstantAppsInfoBarDelegate::ShouldExpire( const NavigationDetails& details) const { - bool navigation_url_is_launch_url = - web_contents_ != NULL && - web_contents_->GetURL().EqualsIgnoringRef(GURL(url_)); - return !navigation_url_is_launch_url && + return has_navigated_away_from_launch_url_ && ConfirmInfoBarDelegate::ShouldExpire(details); }
diff --git a/chrome/browser/android/instantapps/instant_apps_infobar_delegate.h b/chrome/browser/android/instantapps/instant_apps_infobar_delegate.h index 39586fd..335f2d4 100644 --- a/chrome/browser/android/instantapps/instant_apps_infobar_delegate.h +++ b/chrome/browser/android/instantapps/instant_apps_infobar_delegate.h
@@ -30,6 +30,8 @@ // WebContentsObserver: void DidFinishNavigation( content::NavigationHandle* navigation_handle) override; + void DidStartNavigation( + content::NavigationHandle* navigation_handle) override; private: explicit InstantAppsInfoBarDelegate(content::WebContents* web_contents, @@ -46,7 +48,7 @@ base::android::ScopedJavaGlobalRef<jobject> java_delegate_; base::android::ScopedJavaGlobalRef<jobject> data_; std::string url_; - content::WebContents* web_contents_; + bool has_navigated_away_from_launch_url_; DISALLOW_COPY_AND_ASSIGN(InstantAppsInfoBarDelegate); };
diff --git a/chrome/browser/android/metrics/uma_session_stats.cc b/chrome/browser/android/metrics/uma_session_stats.cc index d4b229ce..f2a557f1 100644 --- a/chrome/browser/android/metrics/uma_session_stats.cc +++ b/chrome/browser/android/metrics/uma_session_stats.cc
@@ -143,6 +143,18 @@ may_upload); } +// Renderer process crashed in the foreground. +static void LogRendererCrash(JNIEnv*, const JavaParamRef<jclass>&) { + DCHECK(g_browser_process); + // Increment the renderer crash count in stability metrics. + PrefService* pref = g_browser_process->local_state(); + DCHECK(pref); + int value = pref->GetInteger(metrics::prefs::kStabilityRendererCrashCount); + pref->SetInteger(metrics::prefs::kStabilityRendererCrashCount, value + 1); + // Migrate proto to histogram to repurpose proto count. + UMA_HISTOGRAM_BOOLEAN("Stability.Android.RendererCrash", true); +} + static void RegisterExternalExperiment( JNIEnv* env, const JavaParamRef<jclass>& clazz,
diff --git a/chrome/browser/android/net/OWNERS b/chrome/browser/android/net/OWNERS index 86a7dffb..c3dd3cc 100644 --- a/chrome/browser/android/net/OWNERS +++ b/chrome/browser/android/net/OWNERS
@@ -1,6 +1,4 @@ -file://net/OWNERS +file://net/nqe/OWNERS -per-file network_quality*=bengr@chromium.org -per-file external_estimate*=bengr@chromium.org - -# COMPONENT: Internals>Network +# TEAM: nqe-dev@chromium.org +# COMPONENT: Internals>Network>NetworkQuality
diff --git a/chrome/browser/android/net/external_estimate_provider_android.cc b/chrome/browser/android/net/external_estimate_provider_android.cc index 3f51cfa..761a9fc2 100644 --- a/chrome/browser/android/net/external_estimate_provider_android.cc +++ b/chrome/browser/android/net/external_estimate_provider_android.cc
@@ -28,77 +28,47 @@ env, reinterpret_cast<intptr_t>(this))); DCHECK(!j_external_estimate_provider_.is_null()); no_value_ = Java_ExternalEstimateProviderAndroid_getNoValue(env); + DCHECK_GE(-1, no_value_); } ExternalEstimateProviderAndroid::~ExternalEstimateProviderAndroid() { DCHECK(thread_checker_.CalledOnValidThread()); - Java_ExternalEstimateProviderAndroid_destroy( - base::android::AttachCurrentThread(), j_external_estimate_provider_); + if (!j_external_estimate_provider_.is_null()) { + Java_ExternalEstimateProviderAndroid_destroy( + base::android::AttachCurrentThread(), j_external_estimate_provider_); + } } -bool ExternalEstimateProviderAndroid::GetRTT(base::TimeDelta* rtt) const { +base::TimeDelta ExternalEstimateProviderAndroid::GetRTT() const { DCHECK(thread_checker_.CalledOnValidThread()); JNIEnv* env = base::android::AttachCurrentThread(); int32_t milliseconds = Java_ExternalEstimateProviderAndroid_getRTTMilliseconds( env, j_external_estimate_provider_); DCHECK_GE(milliseconds, no_value_); - if (milliseconds == no_value_) - return false; - *rtt = base::TimeDelta::FromMilliseconds(milliseconds); - return true; + return base::TimeDelta::FromMilliseconds(milliseconds); } -bool ExternalEstimateProviderAndroid::GetDownstreamThroughputKbps( - int32_t* downstream_throughput_kbps) const { +int32_t ExternalEstimateProviderAndroid::GetDownstreamThroughputKbps() const { DCHECK(thread_checker_.CalledOnValidThread()); JNIEnv* env = base::android::AttachCurrentThread(); int32_t kbps = Java_ExternalEstimateProviderAndroid_getDownstreamThroughputKbps( env, j_external_estimate_provider_); DCHECK_GE(kbps, no_value_); - if (kbps == no_value_) - return false; - *downstream_throughput_kbps = kbps; - return true; -} - -bool ExternalEstimateProviderAndroid::GetUpstreamThroughputKbps( - int32_t* upstream_throughput_kbps) const { - DCHECK(thread_checker_.CalledOnValidThread()); - JNIEnv* env = base::android::AttachCurrentThread(); - int32_t kbps = Java_ExternalEstimateProviderAndroid_getUpstreamThroughputKbps( - env, j_external_estimate_provider_); - DCHECK_GE(kbps, no_value_); - if (kbps == no_value_) - return false; - *upstream_throughput_kbps = kbps; - return true; -} - -bool ExternalEstimateProviderAndroid::GetTimeSinceLastUpdate( - base::TimeDelta* time_since_last_update) const { - DCHECK(thread_checker_.CalledOnValidThread()); - JNIEnv* env = base::android::AttachCurrentThread(); - int32_t seconds = - Java_ExternalEstimateProviderAndroid_getTimeSinceLastUpdateSeconds( - env, j_external_estimate_provider_); - DCHECK_GE(seconds, no_value_); - if (seconds == no_value_) { - *time_since_last_update = base::TimeDelta::Max(); - return false; - } - *time_since_last_update = base::TimeDelta::FromMilliseconds(seconds); - return true; + return kbps; } void ExternalEstimateProviderAndroid::SetUpdatedEstimateDelegate( net::ExternalEstimateProvider::UpdatedEstimateDelegate* delegate) { + DCHECK(thread_checker_.CalledOnValidThread()); delegate_ = delegate; } void ExternalEstimateProviderAndroid::Update() const { DCHECK(thread_checker_.CalledOnValidThread()); + if (j_external_estimate_provider_.is_null()) + return; JNIEnv* env = base::android::AttachCurrentThread(); Java_ExternalEstimateProviderAndroid_requestUpdate( env, j_external_estimate_provider_); @@ -127,19 +97,11 @@ void ExternalEstimateProviderAndroid::NotifyUpdatedEstimateAvailable() const { DCHECK(thread_checker_.CalledOnValidThread()); - - base::TimeDelta rtt; - GetRTT(&rtt); - - int32_t downstream_throughput_kbps = -1; - GetDownstreamThroughputKbps(&downstream_throughput_kbps); - - int32_t upstream_throughput_kbps = -1; - GetUpstreamThroughputKbps(&upstream_throughput_kbps); + DCHECK(!j_external_estimate_provider_.is_null()); if (delegate_) { - delegate_->OnUpdatedEstimateAvailable(rtt, downstream_throughput_kbps, - upstream_throughput_kbps); + delegate_->OnUpdatedEstimateAvailable(GetRTT(), + GetDownstreamThroughputKbps()); } }
diff --git a/chrome/browser/android/net/external_estimate_provider_android.h b/chrome/browser/android/net/external_estimate_provider_android.h index 23623dc..222443b 100644 --- a/chrome/browser/android/net/external_estimate_provider_android.h +++ b/chrome/browser/android/net/external_estimate_provider_android.h
@@ -31,14 +31,6 @@ ~ExternalEstimateProviderAndroid() override; - // net::ExternalEstimateProvider implementation: - bool GetRTT(base::TimeDelta* rtt) const override; - bool GetDownstreamThroughputKbps( - int32_t* downstream_throughput_kbps) const override; - bool GetUpstreamThroughputKbps( - int32_t* upstream_throughput_kbps) const override; - bool GetTimeSinceLastUpdate( - base::TimeDelta* time_since_last_update) const override; void SetUpdatedEstimateDelegate( net::ExternalEstimateProvider::UpdatedEstimateDelegate* delegate) override; @@ -56,6 +48,15 @@ void NotifyUpdatedEstimateAvailable() const; private: + // Returns the estimated RTT value. If the estimate is unavailable, a negative + // value is returned. + base::TimeDelta GetRTT() const; + + // Returns the estimated downstream throughput (in Kbps -- Kilobits + // per second) is available. If the estimate is unavailable, a negative value + // is returned. + int32_t GetDownstreamThroughputKbps() const; + // Value returned if valid value is unavailable. int32_t no_value_ = -1;
diff --git a/chrome/browser/android/net/external_estimate_provider_android_unittest.cc b/chrome/browser/android/net/external_estimate_provider_android_unittest.cc index 46056bd0..205cee0 100644 --- a/chrome/browser/android/net/external_estimate_provider_android_unittest.cc +++ b/chrome/browser/android/net/external_estimate_provider_android_unittest.cc
@@ -9,6 +9,7 @@ #include "base/at_exit.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "base/time/time.h" #include "content/public/test/test_browser_thread_bundle.h" @@ -19,22 +20,12 @@ namespace { -// Tests if the |ExternalEstimateProviderAndroid| APIs return false without the +// Check that |ExternalEstimateProviderAndroid| does not crash without the // downstream implementation. TEST(ExternalEstimateProviderAndroidTest, BasicsTest) { base::ShadowingAtExitManager at_exit_manager; chrome::android::ExternalEstimateProviderAndroid external_estimate_provider; - - base::TimeDelta rtt; - EXPECT_FALSE(external_estimate_provider.GetRTT(&rtt)); - - int32_t kbps; - EXPECT_FALSE(external_estimate_provider.GetDownstreamThroughputKbps(&kbps)); - EXPECT_FALSE(external_estimate_provider.GetUpstreamThroughputKbps(&kbps)); - - base::TimeDelta time_since_last_update; - EXPECT_FALSE(external_estimate_provider.GetTimeSinceLastUpdate( - &time_since_last_update)); + external_estimate_provider.Update(); } class TestNetworkQualityEstimator : public net::NetworkQualityEstimator { @@ -54,14 +45,12 @@ ~TestNetworkQualityEstimator() override {} void OnUpdatedEstimateAvailable(const base::TimeDelta& rtt, - int32_t downstream_throughput_kbps, - int32_t upstream_throughput_kbps) override { - EXPECT_EQ(base::TimeDelta(), rtt); + int32_t downstream_throughput_kbps) override { + EXPECT_GT(base::TimeDelta(), rtt); EXPECT_EQ(-1, downstream_throughput_kbps); - EXPECT_EQ(-1, upstream_throughput_kbps); notified_ = true; net::NetworkQualityEstimator::OnUpdatedEstimateAvailable( - rtt, downstream_throughput_kbps, upstream_throughput_kbps); + rtt, downstream_throughput_kbps); } bool notified() const { return notified_; } @@ -77,12 +66,6 @@ : chrome::android::ExternalEstimateProviderAndroid() {} ~TestExternalEstimateProviderAndroid() override {} using ExternalEstimateProviderAndroid::NotifyUpdatedEstimateAvailable; - - bool GetTimeSinceLastUpdate( - base::TimeDelta* time_since_last_update) const override { - *time_since_last_update = base::TimeDelta::FromMilliseconds(0); - return true; - } }; // Tests if the |ExternalEstimateProviderAndroid| notifies
diff --git a/chrome/browser/android/ntp/android_content_suggestions_notifier.cc b/chrome/browser/android/ntp/android_content_suggestions_notifier.cc index 9fb3056..5673f8aa 100644 --- a/chrome/browser/android/ntp/android_content_suggestions_notifier.cc +++ b/chrome/browser/android/ntp/android_content_suggestions_notifier.cc
@@ -16,7 +16,6 @@ #include "chrome/common/pref_names.h" #include "components/ntp_snippets/features.h" #include "components/prefs/pref_service.h" -#include "components/variations/variations_associated_data.h" #include "jni/ContentSuggestionsNotifier_jni.h" #include "ui/gfx/android/java_bitmap.h" #include "ui/gfx/image/image.h" @@ -28,41 +27,6 @@ using ntp_snippets::kNotificationsIgnoredLimitParam; using ntp_snippets::kNotificationsIgnoredDefaultLimit; -namespace { - -// Whether auto opt out is enabled. Note that this does not disable collection -// of data required for auto opt out. Auto opt out is currently disabled, -// because notification settings page is shown when kNotificationsFeature is -// enabled. -const bool kEnableAutoOptOutDefault = false; -const char kEnableAutoOptOutParamName[] = "enable_auto_opt_out"; - -bool IsAutoOptOutEnabled() { - return variations::GetVariationParamByFeatureAsBool( - ntp_snippets::kNotificationsFeature, kEnableAutoOptOutParamName, - kEnableAutoOptOutDefault); -} - -bool IsEnabledForProfile(Profile* profile) { - PrefService* prefs = profile->GetPrefs(); - if (!prefs->GetBoolean(prefs::kContentSuggestionsNotificationsEnabled)) { - return false; - } - - if (!IsAutoOptOutEnabled()) { - return true; - } - - int current = - prefs->GetInteger(prefs::kContentSuggestionsConsecutiveIgnoredPrefName); - int limit = variations::GetVariationParamByFeatureAsInt( - kNotificationsFeature, kNotificationsIgnoredLimitParam, - kNotificationsIgnoredDefaultLimit); - return current < limit; -} - -} // namespace - AndroidContentSuggestionsNotifier::AndroidContentSuggestionsNotifier() = default; @@ -120,18 +84,14 @@ Java_ContentSuggestionsNotifier_flushCachedMetrics(env); } -bool AndroidContentSuggestionsNotifier::IsEnabledForProfile(Profile* profile) { - return ::IsEnabledForProfile(profile); -} - -void AndroidContentSuggestionsNotifier::RegisterChannel() { +bool AndroidContentSuggestionsNotifier::RegisterChannel(bool enabled) { JNIEnv* env = base::android::AttachCurrentThread(); - Java_ContentSuggestionsNotifier_registerChannel(env); + return Java_ContentSuggestionsNotifier_registerChannel(env, enabled); } void AndroidContentSuggestionsNotifier::UnregisterChannel() { JNIEnv* env = base::android::AttachCurrentThread(); - Java_ContentSuggestionsNotifier_unregisterChannel(env); + return Java_ContentSuggestionsNotifier_unregisterChannel(env); } static void RecordNotificationOptOut(JNIEnv* env, @@ -195,7 +155,8 @@ CONTENT_SUGGESTIONS_HIDE_SHUTDOWN); } - const bool was_enabled = IsEnabledForProfile(profile); + const bool was_enabled = + ContentSuggestionsNotifier::ShouldSendNotifications(prefs); if (tap_count == 0) { // There were no taps, consecutive_ignored has not been reset and continues // from where it left off. If there was a tap, then Java has provided us @@ -205,7 +166,8 @@ } prefs->SetInteger(prefs::kContentSuggestionsConsecutiveIgnoredPrefName, consecutive_ignored); - const bool is_enabled = IsEnabledForProfile(profile); + const bool is_enabled = + ContentSuggestionsNotifier::ShouldSendNotifications(prefs); if (was_enabled && !is_enabled) { RecordContentSuggestionsNotificationOptOut(CONTENT_SUGGESTIONS_IMPLICIT); }
diff --git a/chrome/browser/android/ntp/android_content_suggestions_notifier.h b/chrome/browser/android/ntp/android_content_suggestions_notifier.h index 5f20556d..a04b236 100644 --- a/chrome/browser/android/ntp/android_content_suggestions_notifier.h +++ b/chrome/browser/android/ntp/android_content_suggestions_notifier.h
@@ -12,12 +12,6 @@ #include "chrome/browser/ntp_snippets/ntp_snippets_metrics.h" #include "url/gurl.h" -class Profile; - -namespace gfx { -class Image; -} // namespace gfx - // Implements ContentSuggestionsNotifier methods with JNI calls. class AndroidContentSuggestionsNotifier : public ContentSuggestionsNotifier { public: @@ -35,8 +29,7 @@ ContentSuggestionsNotificationAction why) override; void HideAllNotifications(ContentSuggestionsNotificationAction why) override; void FlushCachedMetrics() override; - bool IsEnabledForProfile(Profile* profile) override; - void RegisterChannel() override; + bool RegisterChannel(bool enabled) override; void UnregisterChannel() override; private:
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier.cc b/chrome/browser/android/ntp/content_suggestions_notifier.cc index 1ca8e35..a8c8adb 100644 --- a/chrome/browser/android/ntp/content_suggestions_notifier.cc +++ b/chrome/browser/android/ntp/content_suggestions_notifier.cc
@@ -6,5 +6,50 @@ #include <limits> +#include "chrome/common/pref_names.h" +#include "components/ntp_snippets/features.h" +#include "components/prefs/pref_service.h" +#include "components/variations/variations_associated_data.h" + +using ntp_snippets::kNotificationsFeature; +using ntp_snippets::kNotificationsIgnoredLimitParam; +using ntp_snippets::kNotificationsIgnoredDefaultLimit; + +namespace { + +// Whether auto opt out is enabled. Note that this does not disable collection +// of data required for auto opt out. Auto opt out is currently disabled, +// because notification settings page is shown when kNotificationsFeature is +// enabled. +const bool kEnableAutoOptOutDefault = false; +const char kEnableAutoOptOutParamName[] = "enable_auto_opt_out"; + +bool IsAutoOptOutEnabled() { + return variations::GetVariationParamByFeatureAsBool( + ntp_snippets::kNotificationsFeature, kEnableAutoOptOutParamName, + kEnableAutoOptOutDefault); +} + +} // namespace + +bool ContentSuggestionsNotifier::ShouldSendNotifications(PrefService* prefs) { + if (!prefs->GetBoolean(prefs::kContentSuggestionsNotificationsEnabled)) { + return false; + } + + if (IsAutoOptOutEnabled()) { + int current = + prefs->GetInteger(prefs::kContentSuggestionsConsecutiveIgnoredPrefName); + int limit = variations::GetVariationParamByFeatureAsInt( + kNotificationsFeature, kNotificationsIgnoredLimitParam, + kNotificationsIgnoredDefaultLimit); + if (current >= limit) { + return false; + } + } + + return true; +} + ContentSuggestionsNotifier::ContentSuggestionsNotifier() = default; ContentSuggestionsNotifier::~ContentSuggestionsNotifier() = default;
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier.h b/chrome/browser/android/ntp/content_suggestions_notifier.h index 365cba0d..1207c84 100644 --- a/chrome/browser/android/ntp/content_suggestions_notifier.h +++ b/chrome/browser/android/ntp/content_suggestions_notifier.h
@@ -12,7 +12,7 @@ #include "components/ntp_snippets/content_suggestion.h" class GURL; -class Profile; +class PrefService; namespace gfx { class Image; @@ -23,6 +23,19 @@ ContentSuggestionsNotifier(); virtual ~ContentSuggestionsNotifier(); + // Returns true if notifications should be sent. + // + // This function considers: + // * If the user has disabled notifications through preferences. + // * If the user has ignored enough consecutive notifications to treat that + // as disabling notifications (if auto-opt-out is enabled). + // + // It does not consider: + // * Whether the notifications feature is enabled. In this case, none of the + // notifications machinery is instantiated to begin with. + // * On Android O, if the notification channel is disabled. + static bool ShouldSendNotifications(PrefService* prefs); + virtual bool SendNotification(const ntp_snippets::ContentSuggestion::ID& id, const GURL& url, const base::string16& title, @@ -44,14 +57,16 @@ // is computed in turn from that. virtual void FlushCachedMetrics() = 0; - // False if auto opt out is enabled and the user has ignored enough - // notifications that we no longer think that the user is interested in them. - virtual bool IsEnabledForProfile(Profile* profile) = 0; + // Registers the notification channel on Android O. May be called regardless + // of Android version or registration state; it is a no-op before Android O, + // or if the channel is already registered. If |!enabled|, then the channel is + // disabled at creation. Returns true if the channel was created (false pre-O, + // or if it already existed). + virtual bool RegisterChannel(bool enabled) = 0; - // Registers or unregisters the notification channel on Android O. May be - // called regardless of Android version or registration state; they are no-ops - // before Android O, or if the channel is already (de)registered. - virtual void RegisterChannel() = 0; + // Unregisters the notification channel on Android O. May be called regardless + // of Android version or registration state; it is a no-op before Android O, + // or if the channel is not registered. virtual void UnregisterChannel() = 0; private:
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier_service.cc b/chrome/browser/android/ntp/content_suggestions_notifier_service.cc index 9a25bcd..c5c9967 100644 --- a/chrome/browser/android/ntp/content_suggestions_notifier_service.cc +++ b/chrome/browser/android/ntp/content_suggestions_notifier_service.cc
@@ -13,7 +13,6 @@ #include "chrome/browser/notifications/notification.h" #include "chrome/browser/notifications/notification_handler.h" #include "chrome/browser/ntp_snippets/ntp_snippets_metrics.h" -#include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "components/ntp_snippets/content_suggestions_service.h" @@ -43,6 +42,9 @@ using ntp_snippets::kNotificationsTextValueAndMore; using ntp_snippets::kNotificationsTextValueSnippet; +base::android::ApplicationState* + g_content_suggestions_notification_application_state_for_testing = nullptr; + namespace { const char kNotificationIDWithinCategory[] = @@ -61,6 +63,9 @@ } bool ShouldNotifyInState(base::android::ApplicationState state) { + if (g_content_suggestions_notification_application_state_for_testing) { + state = *g_content_suggestions_notification_application_state_for_testing; + } switch (state) { case base::android::APPLICATION_STATE_UNKNOWN: case base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES: @@ -110,10 +115,10 @@ : public ContentSuggestionsService::Observer { public: NotifyingObserver(ContentSuggestionsService* service, - Profile* profile, + PrefService* prefs, ContentSuggestionsNotifier* notifier) : service_(service), - profile_(profile), + prefs_(prefs), notifier_(notifier), app_status_listener_(base::Bind(&NotifyingObserver::AppStatusChanged, base::Unretained(this))), @@ -123,10 +128,10 @@ if (!ShouldNotifyInState(app_status_listener_.GetState())) { DVLOG(1) << "Suppressed notification because Chrome is frontmost"; return; - } else if (!notifier_->IsEnabledForProfile(profile_)) { + } else if (!ContentSuggestionsNotifier::ShouldSendNotifications(prefs_)) { DVLOG(1) << "Suppressed notification due to opt-out"; return; - } else if (!HaveQuotaForToday(profile_->GetPrefs())) { + } else if (!HaveQuotaForToday(prefs_)) { DVLOG(1) << "Notification suppressed due to daily limit"; return; } @@ -221,7 +226,7 @@ // check if suggestion is still valid. DVLOG(1) << "Fetched " << image.Size().width() << "x" << image.Size().height() << " image for " << url.spec(); - ConsumeQuota(profile_->GetPrefs()); + ConsumeQuota(prefs_); int priority = variations::GetVariationParamByFeatureAsInt( kNotificationsFeature, kNotificationsPriorityParam, kNotificationsDefaultPriority); @@ -235,7 +240,7 @@ } ContentSuggestionsService* const service_; - Profile* const profile_; + PrefService* const prefs_; ContentSuggestionsNotifier* const notifier_; base::android::ApplicationStatusListener app_status_listener_; @@ -245,13 +250,24 @@ }; ContentSuggestionsNotifierService::ContentSuggestionsNotifierService( - Profile* profile, + PrefService* prefs, ContentSuggestionsService* suggestions, std::unique_ptr<ContentSuggestionsNotifier> notifier) - : profile_(profile), + : prefs_(prefs), suggestions_service_(suggestions), notifier_(std::move(notifier)) { notifier_->FlushCachedMetrics(); + + if (notifier_->RegisterChannel( + prefs_->GetBoolean(prefs::kContentSuggestionsNotificationsEnabled))) { + // Once there is a notification channel, this setting is no longer relevant + // and the UI to control it is gone. Set it to true so that notifications + // are sent unconditionally. If the channel is disabled, then notifications + // will be blocked at the system level, and the user can re-enable them in + // the system notification settings. + prefs_->SetBoolean(prefs::kContentSuggestionsNotificationsEnabled, true); + } + if (IsEnabled()) { Enable(); } else { @@ -278,8 +294,7 @@ } void ContentSuggestionsNotifierService::SetEnabled(bool enabled) { - profile_->GetPrefs()->SetBoolean( - prefs::kContentSuggestionsNotificationsEnabled, enabled); + prefs_->SetBoolean(prefs::kContentSuggestionsNotificationsEnabled, enabled); if (enabled) { Enable(); } else { @@ -288,21 +303,18 @@ } bool ContentSuggestionsNotifierService::IsEnabled() const { - return profile_->GetPrefs()->GetBoolean( - prefs::kContentSuggestionsNotificationsEnabled); + return prefs_->GetBoolean(prefs::kContentSuggestionsNotificationsEnabled); } void ContentSuggestionsNotifierService::Enable() { - notifier_->RegisterChannel(); if (!observer_) { observer_.reset( - new NotifyingObserver(suggestions_service_, profile_, notifier_.get())); + new NotifyingObserver(suggestions_service_, prefs_, notifier_.get())); suggestions_service_->AddObserver(observer_.get()); } } void ContentSuggestionsNotifierService::Disable() { - notifier_->UnregisterChannel(); if (observer_) { suggestions_service_->RemoveObserver(observer_.get()); observer_.reset();
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier_service.h b/chrome/browser/android/ntp/content_suggestions_notifier_service.h index 7f08204..ce3d91f4 100644 --- a/chrome/browser/android/ntp/content_suggestions_notifier_service.h +++ b/chrome/browser/android/ntp/content_suggestions_notifier_service.h
@@ -11,7 +11,7 @@ #include "components/keyed_service/core/keyed_service.h" class ContentSuggestionsNotifier; -class Profile; +class PrefService; namespace ntp_snippets { class ContentSuggestionsService; @@ -24,7 +24,7 @@ class ContentSuggestionsNotifierService : public KeyedService { public: ContentSuggestionsNotifierService( - Profile* profile, + PrefService* prefs, ntp_snippets::ContentSuggestionsService* suggestions, std::unique_ptr<ContentSuggestionsNotifier> notifier); @@ -47,7 +47,7 @@ // Destroys |observer_| if necessary and deregisters notification channel. void Disable(); - Profile* const profile_; + PrefService* const prefs_; ntp_snippets::ContentSuggestionsService* const suggestions_service_; const std::unique_ptr<ContentSuggestionsNotifier> notifier_;
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier_service_unittest.cc b/chrome/browser/android/ntp/content_suggestions_notifier_service_unittest.cc new file mode 100644 index 0000000..0c346e5 --- /dev/null +++ b/chrome/browser/android/ntp/content_suggestions_notifier_service_unittest.cc
@@ -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. + +#include "chrome/browser/android/ntp/content_suggestions_notifier_service.h" + +#include <memory> + +#include "base/android/application_status_listener.h" +#include "base/memory/ptr_util.h" +#include "base/strings/utf_string_conversions.h" +#include "base/test/histogram_tester.h" +#include "base/test/simple_test_clock.h" +#include "chrome/browser/android/ntp/content_suggestions_notifier.h" +#include "chrome/common/pref_names.h" +#include "components/ntp_snippets/category_info.h" +#include "components/ntp_snippets/category_rankers/fake_category_ranker.h" +#include "components/ntp_snippets/content_suggestions_service.h" +#include "components/ntp_snippets/remote/remote_suggestion_builder.h" +#include "components/ntp_snippets/user_classifier.h" +#include "components/sync_preferences/testing_pref_service_syncable.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using base::android::APPLICATION_STATE_HAS_PAUSED_ACTIVITIES; +using base::android::ApplicationState; +using ntp_snippets::Category; +using ntp_snippets::CategoryInfo; +using ntp_snippets::CategoryStatus; +using ntp_snippets::ContentSuggestion; +using ntp_snippets::ContentSuggestionsAdditionalAction; +using ntp_snippets::ContentSuggestionsCardLayout; +using ntp_snippets::ContentSuggestionsProvider; +using ntp_snippets::ContentSuggestionsService; +using ntp_snippets::DismissedSuggestionsCallback; +using ntp_snippets::FakeCategoryRanker; +using ntp_snippets::FetchDoneCallback; +using ntp_snippets::ImageFetchedCallback; +using ntp_snippets::KnownCategories; +using ntp_snippets::RemoteSuggestion; +using ntp_snippets::UserClassifier; +using ntp_snippets::test::RemoteSuggestionBuilder; +using testing::_; +using testing::InSequence; +using testing::Return; + +extern ApplicationState* + g_content_suggestions_notification_application_state_for_testing; + +namespace { + +std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> +RegisteredPrefs() { + auto prefs = base::MakeUnique<sync_preferences::TestingPrefServiceSyncable>(); + ContentSuggestionsService::RegisterProfilePrefs(prefs->registry()); + UserClassifier::RegisterProfilePrefs(prefs->registry()); + ContentSuggestionsNotifierService::RegisterProfilePrefs(prefs->registry()); + return prefs; +} + +class FakeContentSuggestionsService : public ContentSuggestionsService { + public: + explicit FakeContentSuggestionsService(PrefService* prefs) + : ContentSuggestionsService( + ContentSuggestionsService::ENABLED, + /*signin_manager=*/nullptr, + /*history_service=*/nullptr, + /*large_icon_cache=*/nullptr, + prefs, + base::MakeUnique<FakeCategoryRanker>(), + base::MakeUnique<UserClassifier>( + nullptr, + base::MakeUnique<base::SimpleTestClock>()), + /*remote_suggestions_scheduler=*/nullptr) {} +}; + +class FakeArticleProvider : public ContentSuggestionsProvider { + public: + explicit FakeArticleProvider(ContentSuggestionsService* service) + : ContentSuggestionsProvider(service) {} + + CategoryStatus GetCategoryStatus(Category category) override { + if (category.IsKnownCategory(KnownCategories::ARTICLES)) { + return CategoryStatus::AVAILABLE; + } + return CategoryStatus::NOT_PROVIDED; + } + + CategoryInfo GetCategoryInfo(Category category) override { + DCHECK(category.IsKnownCategory(KnownCategories::ARTICLES)); + CategoryInfo info(base::ASCIIToUTF16("title"), + ContentSuggestionsCardLayout::FULL_CARD, + ContentSuggestionsAdditionalAction::NONE, true, + base::ASCIIToUTF16("no suggestions")); + return info; + } + + void FetchSuggestionImage(const ContentSuggestion::ID& id, + ImageFetchedCallback callback) override { + std::move(callback).Run(gfx::Image()); + } + + void DismissSuggestion(const ContentSuggestion::ID& id) override { + NOTIMPLEMENTED(); + } + + void Fetch(const Category& category, + const std::set<std::string>& known_suggestion_ids, + FetchDoneCallback callback) override { + NOTIMPLEMENTED(); + } + + void ClearHistory( + base::Time begin, + base::Time end, + const base::Callback<bool(const GURL& url)>& filter) override { + NOTIMPLEMENTED(); + } + + void ClearCachedSuggestions(Category category) override { NOTIMPLEMENTED(); } + + void GetDismissedSuggestionsForDebugging( + Category category, + DismissedSuggestionsCallback callback) override { + NOTIMPLEMENTED(); + } + + void ClearDismissedSuggestionsForDebugging(Category category) override { + NOTIMPLEMENTED(); + } +}; + +class MockContentSuggestionsNotifier : public ContentSuggestionsNotifier { + public: + MOCK_METHOD0(CreateNotificationChannel, void()); + MOCK_METHOD7(SendNotification, + bool(const ContentSuggestion::ID& id, + const GURL& url, + const base::string16& title, + const base::string16& text, + const gfx::Image& image, + base::Time timeout_at, + int priority)); + MOCK_METHOD2(HideNotification, + void(const ContentSuggestion::ID& id, + ContentSuggestionsNotificationAction why)); + MOCK_METHOD1(HideAllNotifications, + void(ContentSuggestionsNotificationAction why)); + MOCK_METHOD0(FlushCachedMetrics, void()); + MOCK_METHOD1(RegisterChannel, bool(bool enabled)); + MOCK_METHOD0(UnregisterChannel, void()); +}; + +class ContentSuggestionsNotifierServiceTest : public ::testing::Test { + protected: + ContentSuggestionsNotifierServiceTest() + : application_state_(APPLICATION_STATE_HAS_PAUSED_ACTIVITIES), + prefs_(RegisteredPrefs()), + suggestions_(prefs_.get()), + notifier_(new testing::StrictMock<MockContentSuggestionsNotifier>), + notifier_ownership_(notifier_), + provider_(&suggestions_) { + g_content_suggestions_notification_application_state_for_testing = + &application_state_; + } + + ~ContentSuggestionsNotifierServiceTest() override { + g_content_suggestions_notification_application_state_for_testing = nullptr; + } + + void NewSuggestions(const std::vector<std::unique_ptr<RemoteSuggestion>>& + remote_suggestions) { + Category articles = Category::FromKnownCategory(KnownCategories::ARTICLES); + ContentSuggestionsProvider::Observer* observer = &suggestions_; + std::vector<ContentSuggestion> content_suggestions; + for (const auto& remote_suggestion : remote_suggestions) { + content_suggestions.emplace_back( + remote_suggestion->ToContentSuggestion(articles)); + } + + observer->OnNewSuggestions(&provider_, articles, + std::move(content_suggestions)); + } + + ApplicationState application_state_; + std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs_; + FakeContentSuggestionsService suggestions_; + testing::StrictMock<MockContentSuggestionsNotifier>* notifier_; + std::unique_ptr<ContentSuggestionsNotifier> notifier_ownership_; + FakeArticleProvider provider_; +}; + +TEST_F(ContentSuggestionsNotifierServiceTest, ShouldInitializeAtStartup) { + InSequence s; + EXPECT_CALL(*notifier_, FlushCachedMetrics()); + EXPECT_CALL(*notifier_, RegisterChannel(true)).WillOnce(Return(false)); + ContentSuggestionsNotifierService service(prefs_.get(), &suggestions_, + std::move(notifier_ownership_)); +} + +TEST_F(ContentSuggestionsNotifierServiceTest, + ShouldNotInitializeAtStartupIfDisabled) { + prefs_->SetBoolean(prefs::kContentSuggestionsNotificationsEnabled, false); + + InSequence s; + EXPECT_CALL(*notifier_, FlushCachedMetrics()); + EXPECT_CALL(*notifier_, RegisterChannel(false)).WillOnce(Return(false)); + ContentSuggestionsNotifierService service(prefs_.get(), &suggestions_, + std::move(notifier_ownership_)); +} + +TEST_F(ContentSuggestionsNotifierServiceTest, + ShouldClearNotificationSettingAfterOUpgrade) { + prefs_->SetBoolean(prefs::kContentSuggestionsNotificationsEnabled, false); + + InSequence s; + EXPECT_CALL(*notifier_, FlushCachedMetrics()); + EXPECT_CALL(*notifier_, RegisterChannel(false)) + .WillOnce(Return(true)); // Channel actually registered + ContentSuggestionsNotifierService service(prefs_.get(), &suggestions_, + std::move(notifier_ownership_)); + + // Now that notification channels are used, our setting should be true + // unconditionally, as notification channels are used for settings instead. + EXPECT_EQ(true, + prefs_->GetBoolean(prefs::kContentSuggestionsNotificationsEnabled)); +} + +TEST_F(ContentSuggestionsNotifierServiceTest, + ShouldNotSendNotificationIfNotShouldNotify) { + InSequence s; + EXPECT_CALL(*notifier_, FlushCachedMetrics()); + EXPECT_CALL(*notifier_, RegisterChannel(true)).WillOnce(Return(false)); + + ContentSuggestionsNotifierService service(prefs_.get(), &suggestions_, + std::move(notifier_ownership_)); + + std::vector<std::unique_ptr<RemoteSuggestion>> suggestions; + suggestions.emplace_back( + RemoteSuggestionBuilder().SetShouldNotify(false).Build()); + + // No notification. + NewSuggestions(suggestions); +} + +TEST_F(ContentSuggestionsNotifierServiceTest, + ShouldSendNotificationIfShouldNotify) { + InSequence s; + EXPECT_CALL(*notifier_, FlushCachedMetrics()); + EXPECT_CALL(*notifier_, RegisterChannel(true)).WillOnce(Return(false)); + + ContentSuggestionsNotifierService service(prefs_.get(), &suggestions_, + std::move(notifier_ownership_)); + + std::vector<std::unique_ptr<RemoteSuggestion>> suggestions; + suggestions.emplace_back( + RemoteSuggestionBuilder().SetShouldNotify(true).Build()); + + EXPECT_CALL(*notifier_, SendNotification(_, _, _, _, _, _, _)); + NewSuggestions(suggestions); +} + +TEST_F(ContentSuggestionsNotifierServiceTest, + ShouldNotSendNotificationIfNotificationsDisabled) { + prefs_->SetBoolean(prefs::kContentSuggestionsNotificationsEnabled, false); + + InSequence s; + EXPECT_CALL(*notifier_, FlushCachedMetrics()); + EXPECT_CALL(*notifier_, RegisterChannel(false)).WillOnce(Return(false)); + + ContentSuggestionsNotifierService service(prefs_.get(), &suggestions_, + std::move(notifier_ownership_)); + + std::vector<std::unique_ptr<RemoteSuggestion>> suggestions; + suggestions.emplace_back( + RemoteSuggestionBuilder().SetShouldNotify(true).Build()); + + // No notification. + NewSuggestions(suggestions); +} + +} // namespace
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier_unittest.cc b/chrome/browser/android/ntp/content_suggestions_notifier_unittest.cc new file mode 100644 index 0000000..582c7ee --- /dev/null +++ b/chrome/browser/android/ntp/content_suggestions_notifier_unittest.cc
@@ -0,0 +1,62 @@ +// 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 "chrome/browser/android/ntp/content_suggestions_notifier.h" + +#include "chrome/browser/android/ntp/content_suggestions_notifier_service.h" +#include "chrome/common/pref_names.h" +#include "components/ntp_snippets/features.h" +#include "components/sync_preferences/testing_pref_service_syncable.h" +#include "components/variations/variations_params_manager.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +using ContentSuggestionsNotifierTest = ::testing::Test; + +TEST_F(ContentSuggestionsNotifierTest, AreNotificationsEnabled) { + sync_preferences::TestingPrefServiceSyncable prefs; + ContentSuggestionsNotifierService::RegisterProfilePrefs(prefs.registry()); + EXPECT_TRUE(ContentSuggestionsNotifier::ShouldSendNotifications(&prefs)); + + prefs.SetBoolean(prefs::kContentSuggestionsNotificationsEnabled, false); + EXPECT_FALSE(ContentSuggestionsNotifier::ShouldSendNotifications(&prefs)); + + prefs.SetBoolean(prefs::kContentSuggestionsNotificationsEnabled, true); + EXPECT_TRUE(ContentSuggestionsNotifier::ShouldSendNotifications(&prefs)); +} + +TEST_F(ContentSuggestionsNotifierTest, AreNotificationsEnabledAutoOptOut) { + variations::testing::VariationParamsManager params( + "ContentSuggestionsNotifierTest", + { + {"enable_auto_opt_out", "true"}, + {ntp_snippets::kNotificationsIgnoredLimitParam, "3"}, + }, + {ntp_snippets::kNotificationsFeature.name}); + + sync_preferences::TestingPrefServiceSyncable prefs; + ContentSuggestionsNotifierService::RegisterProfilePrefs(prefs.registry()); + EXPECT_TRUE(ContentSuggestionsNotifier::ShouldSendNotifications( + &prefs)); // Enabled by default. + + prefs.SetInteger(prefs::kContentSuggestionsConsecutiveIgnoredPrefName, 2); + EXPECT_TRUE(ContentSuggestionsNotifier::ShouldSendNotifications( + &prefs)); // Not yet disabled. + + prefs.SetInteger(prefs::kContentSuggestionsConsecutiveIgnoredPrefName, 3); + EXPECT_FALSE(ContentSuggestionsNotifier::ShouldSendNotifications( + &prefs)); // Past the threshold. + + // Below the threshold again; notifications are re-enabled. In practice, this + // could happen in one of two ways: + // * There were multiple notifications visible; one was ignored, triggering + // auto-opt-out, but the user opened another, resetting to 0. + // * A change in variations parameters raised the limit. + prefs.SetInteger(prefs::kContentSuggestionsConsecutiveIgnoredPrefName, 2); + EXPECT_TRUE(ContentSuggestionsNotifier::ShouldSendNotifications(&prefs)); +} + +} // namespace
diff --git a/chrome/browser/android/photo_picker_sandbox_bridge.cc b/chrome/browser/android/photo_picker_sandbox_bridge.cc new file mode 100644 index 0000000..569fed1 --- /dev/null +++ b/chrome/browser/android/photo_picker_sandbox_bridge.cc
@@ -0,0 +1,33 @@ +// 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 "base/android/build_info.h" +#include "base/android/jni_android.h" +#include "base/android/scoped_java_ref.h" +#include "base/metrics/histogram_macros.h" +#include "jni/DecoderService_jni.h" +#include "sandbox/linux/seccomp-bpf-helpers/seccomp_starter_android.h" +#include "sandbox/sandbox_features.h" + +#if BUILDFLAG(USE_SECCOMP_BPF) +#include "base/memory/ptr_util.h" +#include "sandbox/linux/seccomp-bpf-helpers/baseline_policy_android.h" +#endif + +void InitializePhotoPickerSandbox( + JNIEnv* env, + const base::android::JavaParamRef<jclass>& jcaller) { + auto* info = base::android::BuildInfo::GetInstance(); + sandbox::SeccompStarterAndroid starter(info->sdk_int(), info->device()); + +#if BUILDFLAG(USE_SECCOMP_BPF) + // The policy compiler is only available if USE_SECCOMP_BPF is enabled. + starter.set_policy(base::MakeUnique<sandbox::BaselinePolicyAndroid>()); +#endif + starter.StartSandbox(); + + UMA_HISTOGRAM_ENUMERATION("Android.SeccompStatus.PhotoPickerSandbox", + starter.status(), + sandbox::SeccompSandboxStatus::STATUS_MAX); +}
diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc index db3f22e..931969e8 100644 --- a/chrome/browser/android/preferences/pref_service_bridge.cc +++ b/chrome/browser/android/preferences/pref_service_bridge.cc
@@ -551,11 +551,14 @@ DCHECK_GE(time_period, 0); DCHECK_LE(time_period, static_cast<int>(browsing_data::TimePeriod::TIME_PERIOD_LAST)); - browsing_data::RecordTimePeriodChange( - static_cast<browsing_data::TimePeriod>(time_period)); - GetPrefService()->SetInteger(browsing_data::GetTimePeriodPreferenceName( - ToTabEnum(clear_browsing_data_tab)), - time_period); + const char* pref_name = browsing_data::GetTimePeriodPreferenceName( + ToTabEnum(clear_browsing_data_tab)); + int previous_value = GetPrefService()->GetInteger(pref_name); + if (time_period != previous_value) { + browsing_data::RecordTimePeriodChange( + static_cast<browsing_data::TimePeriod>(time_period)); + GetPrefService()->SetInteger(pref_name, time_period); + } } static jint GetLastClearBrowsingDataTab(JNIEnv* env,
diff --git a/chrome/browser/android/search_geolocation/search_geolocation_service.h b/chrome/browser/android/search_geolocation/search_geolocation_service.h index b70333d9..6bd1569d 100644 --- a/chrome/browser/android/search_geolocation/search_geolocation_service.h +++ b/chrome/browser/android/search_geolocation/search_geolocation_service.h
@@ -37,6 +37,8 @@ // testing. class SearchEngineDelegate { public: + virtual ~SearchEngineDelegate() {} + // Returns the name of the current DSE. virtual base::string16 GetDSEName() = 0;
diff --git a/chrome/browser/android/vr_shell/vr_controller.cc b/chrome/browser/android/vr_shell/vr_controller.cc index dd44fa29..57680af4 100644 --- a/chrome/browser/android/vr_shell/vr_controller.cc +++ b/chrome/browser/android/vr_shell/vr_controller.cc
@@ -306,6 +306,8 @@ fling->data.fling_start.velocity_y = last_velocity_.y() * kDisplacementScaleFactor; } + // FlingStart replaces ScrollEnd + gesture_list->pop_back(); gesture_list->push_back(std::move(fling)); } Reset();
diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc index 1d126cd..62a20494 100644 --- a/chrome/browser/android/vr_shell/vr_shell.cc +++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -291,7 +291,7 @@ } void VrShell::ToggleCardboardGamepad(bool enabled) { - // enable/disable updating gamepad state + // Enable/disable updating gamepad state. if (cardboard_gamepad_source_active_ && !enabled) { device::GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory( device::GAMEPAD_SOURCE_CARDBOARD); @@ -307,18 +307,36 @@ device::GamepadDataFetcherManager::GetInstance()->AddFactory( new device::CardboardGamepadDataFetcher::Factory(this, device->id())); cardboard_gamepad_source_active_ = true; + if (pending_cardboard_trigger_) { + OnTriggerEvent(nullptr, JavaParamRef<jobject>(nullptr), true); + } + pending_cardboard_trigger_ = false; + } +} + +void VrShell::ToggleGvrGamepad(bool enabled) { + // Enable/disable updating gamepad state. + if (enabled) { + DCHECK(!gvr_gamepad_source_active_); + device::VRDevice* device = delegate_provider_->GetDevice(); + if (!device) + return; + + device::GamepadDataFetcherManager::GetInstance()->AddFactory( + new device::GvrGamepadDataFetcher::Factory(this, device->id())); + gvr_gamepad_source_active_ = true; + } else { + DCHECK(gvr_gamepad_source_active_); + device::GamepadDataFetcherManager::GetInstance()->RemoveSourceFactory( + device::GAMEPAD_SOURCE_GVR); + gvr_gamepad_data_fetcher_ = nullptr; + gvr_gamepad_source_active_ = false; } } void VrShell::OnTriggerEvent(JNIEnv* env, const JavaParamRef<jobject>& obj, bool touched) { - // Send screen taps over to VrShellGl to be turned into simulated clicks for - // cardboard. - if (touched) - PostToGlThread(FROM_HERE, base::Bind(&VrShellGl::OnTriggerEvent, - gl_thread_->GetVrShellGl())); - // If we are running cardboard, update gamepad state. if (cardboard_gamepad_source_active_) { device::CardboardGamepadData pad; @@ -327,6 +345,8 @@ if (cardboard_gamepad_data_fetcher_) { cardboard_gamepad_data_fetcher_->SetGamepadData(pad); } + } else { + pending_cardboard_trigger_ = touched; } } @@ -786,18 +806,11 @@ } void VrShell::UpdateGamepadData(device::GvrGamepadData pad) { - if (!gvr_gamepad_source_active_) { - device::VRDevice* device = delegate_provider_->GetDevice(); - if (!device) - return; + if (gvr_gamepad_source_active_ != pad.connected) + ToggleGvrGamepad(pad.connected); - device::GamepadDataFetcherManager::GetInstance()->AddFactory( - new device::GvrGamepadDataFetcher::Factory(this, device->id())); - gvr_gamepad_source_active_ = true; - } - if (gvr_gamepad_data_fetcher_) { + if (gvr_gamepad_data_fetcher_) gvr_gamepad_data_fetcher_->SetGamepadData(pad); - } } void VrShell::RegisterGvrGamepadDataFetcher(
diff --git a/chrome/browser/android/vr_shell/vr_shell.h b/chrome/browser/android/vr_shell/vr_shell.h index 8fbbc2f..a7eae86 100644 --- a/chrome/browser/android/vr_shell/vr_shell.h +++ b/chrome/browser/android/vr_shell/vr_shell.h
@@ -125,6 +125,7 @@ void NavigateBack(); void ExitCct(); void ToggleCardboardGamepad(bool enabled); + void ToggleGvrGamepad(bool enabled); base::android::ScopedJavaGlobalRef<jobject> TakeContentSurface( JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); @@ -260,6 +261,7 @@ // Are we currently providing a gamepad factory to the gamepad manager? bool gvr_gamepad_source_active_ = false; bool cardboard_gamepad_source_active_ = false; + bool pending_cardboard_trigger_ = false; // Registered fetchers, must remain alive for UpdateGamepadData calls. // That's ok since the fetcher is only destroyed from VrShell's destructor.
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.cc b/chrome/browser/android/vr_shell/vr_shell_gl.cc index dd51bf9..27f38e5 100644 --- a/chrome/browser/android/vr_shell/vr_shell_gl.cc +++ b/chrome/browser/android/vr_shell/vr_shell_gl.cc
@@ -156,10 +156,6 @@ rect.top - rect.bottom); } -double NowSeconds() { - return (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); -} - void LoadControllerModelTask( base::WeakPtr<VrShellGl> weak_vr_shell_gl, scoped_refptr<base::SingleThreadTaskRunner> task_runner) { @@ -519,6 +515,8 @@ controller_info_.laser_origin = controller_->GetPointerStart(); device::GvrGamepadData controller_data = controller_->GetGamepadData(); + if (!ShouldDrawWebVr()) + controller_data.connected = false; browser_->UpdateGamepadData(controller_data); HandleControllerInput(GetForwardVector(head_pose)); @@ -532,8 +530,6 @@ return; } - HandleWebVrCompatibilityClick(); - gfx::Vector3dF ergo_neutral_pose; if (!controller_->IsConnected()) { // No controller detected, set up a gaze cursor that tracks the @@ -562,11 +558,7 @@ DCHECK(!(controller_->ButtonUpHappened(gvr::kControllerButtonClick) && controller_->ButtonDownHappened(gvr::kControllerButtonClick))) << "Cannot handle a button down and up event within one frame."; - if (touch_pending_) { - controller_info_.touchpad_button_state = - vr::UiInputManager::ButtonState::CLICKED; - touch_pending_ = false; - } else if (controller_->ButtonState(gvr::kControllerButtonClick)) { + if (controller_->ButtonState(gvr::kControllerButtonClick)) { controller_info_.touchpad_button_state = vr::UiInputManager::ButtonState::DOWN; } @@ -585,24 +577,6 @@ &controller_info_.target_point, &controller_info_.reticle_render_target); } -void VrShellGl::HandleWebVrCompatibilityClick() { - if (!ShouldDrawWebVr()) - return; - - // Process screen touch events for Cardboard button compatibility. - if (touch_pending_) { - touch_pending_ = false; - auto gesture = base::MakeUnique<blink::WebGestureEvent>( - blink::WebInputEvent::kGestureTapDown, - blink::WebInputEvent::kNoModifiers, NowSeconds()); - gesture->source_device = blink::kWebGestureDeviceTouchpad; - gesture->x = 0; - gesture->y = 0; - SendGestureToContent(std::move(gesture)); - DVLOG(1) << __FUNCTION__ << ": sent CLICK gesture"; - } -} - std::unique_ptr<blink::WebMouseEvent> VrShellGl::MakeMouseEvent( blink::WebInputEvent::Type type, const gfx::PointF& normalized_web_content_location) { @@ -1068,11 +1042,6 @@ vr_shell_renderer_->GetWebVrRenderer()->Draw(webvr_texture_id_); } -void VrShellGl::OnTriggerEvent() { - // Set a flag to handle this on the render thread at the next frame. - touch_pending_ = true; -} - void VrShellGl::OnPause() { vsync_helper_.CancelVSyncRequest(); controller_->OnPause();
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.h b/chrome/browser/android/vr_shell/vr_shell_gl.h index a55c259..a91b65b 100644 --- a/chrome/browser/android/vr_shell/vr_shell_gl.h +++ b/chrome/browser/android/vr_shell/vr_shell_gl.h
@@ -128,7 +128,6 @@ bool WebVrPoseByteIsValid(int pose_index_byte); void UpdateController(const gfx::Transform& head_pose); - void HandleWebVrCompatibilityClick(); std::unique_ptr<blink::WebMouseEvent> MakeMouseEvent( blink::WebInputEvent::Type type, const gfx::PointF& normalized_web_content_location); @@ -223,7 +222,6 @@ std::unique_ptr<vr::VrShellRenderer> vr_shell_renderer_; bool cardboard_ = false; - bool touch_pending_ = false; gfx::Quaternion controller_quat_; int content_tex_css_width_ = 0;
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index 8fdd51a..e048b8cc 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -465,8 +465,6 @@ <include name="IDR_SIGNIN_EMAIL_CONFIRMATION_JS" file="resources\signin\signin_email_confirmation\signin_email_confirmation.js" type="BINDATA" /> <include name="IDR_SIGNIN_ERROR_HTML" file="resources\signin\signin_error\signin_error.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> <include name="IDR_SIGNIN_ERROR_JS" file="resources\signin\signin_error\signin_error.js" type="BINDATA" /> - <include name="IDR_SIGNIN_DICE_INTERNALS_HTML" file="resources\signin\signin_dice_internals\signin_dice_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> - <include name="IDR_SIGNIN_DICE_INTERNALS_JS" file="resources\signin\signin_dice_internals\signin_dice_internals.js" type="BINDATA" /> <if expr="chromeos"> <include name="IDR_UBER_HTML" file="resources\uber\uber.html" flattenhtml="true" type="BINDATA" /> <include name="IDR_UBER_JS" file="resources\uber\uber.js" type="BINDATA" />
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index b167729..463c30a 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -2464,8 +2464,6 @@ CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, // TODO(710873): Make sure that these get fixed: - // No one ever seems to write to this content setting? Can it be removed? - CONTENT_SETTINGS_TYPE_CLIENT_HINTS, // Not deleted but should be deleted with history? CONTENT_SETTINGS_TYPE_IMPORTANT_SITE_INFO, // Deprecated and should be removed after M60.
diff --git a/chrome/browser/certificate_manager_model.cc b/chrome/browser/certificate_manager_model.cc index fbfa181..bab0ffae 100644 --- a/chrome/browser/certificate_manager_model.cc +++ b/chrome/browser/certificate_manager_model.cc
@@ -220,8 +220,8 @@ const std::string& data, const base::string16& password, bool is_extractable) { - int result = cert_db_->ImportFromPKCS12(slot_info, data, - password, is_extractable, NULL); + int result = cert_db_->ImportFromPKCS12(slot_info, data, password, + is_extractable, nullptr); if (result == net::OK) Refresh(); return result;
diff --git a/chrome/browser/chrome_browser_main_android.cc b/chrome/browser/chrome_browser_main_android.cc index c5fac0c..4bf799d3 100644 --- a/chrome/browser/chrome_browser_main_android.cc +++ b/chrome/browser/chrome_browser_main_android.cc
@@ -21,7 +21,6 @@ #include "components/crash/content/app/breakpad_linux.h" #include "components/crash/content/browser/child_process_crash_observer_android.h" #include "components/crash/content/browser/crash_dump_observer_android.h" -#include "components/metrics/stability_metrics_helper.h" #include "components/signin/core/browser/signin_manager.h" #include "content/public/browser/android/compositor.h" #include "content/public/browser/browser_thread.h" @@ -68,10 +67,7 @@ PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dump_dir); breakpad::CrashDumpObserver::GetInstance()->RegisterClient( base::MakeUnique<breakpad::ChildProcessCrashObserver>( - crash_dump_dir, kAndroidMinidumpDescriptor, - base::Bind( - &metrics::StabilityMetricsHelper::IncreaseRendererCrashCount, - g_browser_process->local_state()))); + crash_dump_dir, kAndroidMinidumpDescriptor)); } // Auto-detect based on en-US whether secondary locale .pak files exist.
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index fc964547..b64cc51 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -293,6 +293,7 @@ #if !defined(OS_ANDROID) #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" #include "chrome/browser/payments/payment_request_factory.h" +#include "chrome/common/importer/profile_import.mojom.h" #endif #if defined(OS_LINUX) || defined(OS_WIN) @@ -3001,6 +3002,12 @@ (*services)[profiling::mojom::kServiceName] = { base::ASCIIToUTF16("Profiling Service"), content::SANDBOX_TYPE_UTILITY}; + +#if !defined(OS_ANDROID) + (*services)[chrome::mojom::kProfileImportServiceName] = { + l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_PROFILE_IMPORTER_NAME), + content::SANDBOX_TYPE_NO_SANDBOX}; +#endif } std::unique_ptr<base::Value> @@ -3224,12 +3231,10 @@ throttles.push_back(std::move(background_tab_navigation_throttle)); #endif - if (base::FeatureList::IsEnabled(features::kClickToOpenPDFPlaceholder)) { - std::unique_ptr<content::NavigationThrottle> pdf_iframe_throttle = - PDFIFrameNavigationThrottle::MaybeCreateThrottleFor(handle); - if (pdf_iframe_throttle) - throttles.push_back(std::move(pdf_iframe_throttle)); - } + std::unique_ptr<content::NavigationThrottle> pdf_iframe_throttle = + PDFIFrameNavigationThrottle::MaybeCreateThrottleFor(handle); + if (pdf_iframe_throttle) + throttles.push_back(std::move(pdf_iframe_throttle)); return throttles; }
diff --git a/chrome/browser/chrome_content_browser_manifest_overlay.json b/chrome/browser/chrome_content_browser_manifest_overlay.json index bb01c75..e659aec 100644 --- a/chrome/browser/chrome_content_browser_manifest_overlay.json +++ b/chrome/browser/chrome_content_browser_manifest_overlay.json
@@ -44,6 +44,7 @@ "local_state": [ "pref_client" ], "nacl_broker": [ "browser" ], "nacl_loader": [ "browser" ], + "profile_import": [ "import" ], "profiling": [ "memlog" ], "preferences": [ "pref_client", "pref_control" ], "ui": [
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 1f0ee7b1..83b496f 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -105,6 +105,7 @@ "//components/proxy_config", "//components/quirks", "//components/rappor", + "//components/renderer_context_menu", "//components/safe_browsing:csd_proto", "//components/safe_browsing_db:metadata_proto", "//components/safe_json", @@ -381,6 +382,8 @@ "arc/intent_helper/arc_navigation_throttle.h", "arc/intent_helper/arc_settings_service.cc", "arc/intent_helper/arc_settings_service.h", + "arc/intent_helper/open_with_menu.cc", + "arc/intent_helper/open_with_menu.h", "arc/kiosk/arc_kiosk_bridge.cc", "arc/kiosk/arc_kiosk_bridge.h", "arc/notification/arc_boot_error_notification.cc", @@ -1677,7 +1680,6 @@ "../metrics/leak_detector/leak_detector_controller_unittest.cc", "../metrics/perf/cpu_identity_unittest.cc", "../metrics/perf/random_selector_unittest.cc", - "../notifications/login_state_notification_blocker_chromeos_unittest.cc", "../policy/default_geolocation_policy_handler_unittest.cc", "../ui/browser_finder_chromeos_unittest.cc", "accessibility/magnification_manager_unittest.cc", @@ -1702,6 +1704,7 @@ "arc/fileapi/file_stream_forwarder_unittest.cc", "arc/intent_helper/arc_external_protocol_dialog_unittest.cc", "arc/intent_helper/arc_navigation_throttle_unittest.cc", + "arc/intent_helper/open_with_menu_unittest.cc", "arc/kiosk/arc_kiosk_bridge_unittest.cc", "arc/notification/arc_provision_notification_service_unittest.cc", "arc/optin/arc_terms_of_service_default_negotiator_unittest.cc", @@ -1917,6 +1920,7 @@ "../ui/views/frame/immersive_mode_controller_ash_unittest.cc", "../ui/views/intent_picker_bubble_view_unittest.cc", "../ui/views/select_file_dialog_extension_unittest.cc", + "../ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc", "../ui/webui/chromeos/login/l10n_util_test_util.cc", "../ui/webui/chromeos/login/l10n_util_test_util.h", "../ui/webui/chromeos/login/l10n_util_unittest.cc",
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc index 6b0e23f..293bd49 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -10,7 +10,7 @@ #include <memory> #include <utility> -#include "ash/ash_constants.h" +#include "ash/accessibility/accessibility_controller.h" #include "ash/autoclick/autoclick_controller.h" #include "ash/autoclick/mus/public/interfaces/autoclick.mojom.h" #include "ash/high_contrast/high_contrast_controller.h" @@ -60,6 +60,7 @@ #include "chrome/grit/browser_resources.h" #include "chromeos/audio/audio_a11y_controller.h" #include "chromeos/audio/chromeos_sounds.h" +#include "chromeos/chromeos_switches.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power_manager_client.h" #include "components/prefs/pref_member.h" @@ -115,7 +116,7 @@ // Don't use the real braille controller for tests to avoid automatically // starting ChromeVox which confuses some tests. base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(switches::kTestType)) + if (command_line->HasSwitch(::switches::kTestType)) return StubBrailleController::GetInstance(); return BrailleController::GetInstance(); } @@ -244,8 +245,6 @@ ash::prefs::kAccessibilitySelectToSpeakEnabled), switch_access_pref_handler_( ash::prefs::kAccessibilitySwitchAccessEnabled), - large_cursor_enabled_(false), - large_cursor_size_in_dip_(ash::kDefaultLargeCursorSize), sticky_keys_enabled_(false), spoken_feedback_enabled_(false), high_contrast_enabled_(false), @@ -380,19 +379,6 @@ ash::A11Y_NOTIFICATION_NONE); } -bool AccessibilityManager::ShouldEnableCursorCompositing() { - if (!profile_) - return false; - PrefService* prefs = profile_->GetPrefs(); - // Enable cursor compositing when one or more of the listed accessibility - // features are turned on. - if (prefs->GetBoolean(ash::prefs::kAccessibilityLargeCursorEnabled) || - prefs->GetBoolean(ash::prefs::kAccessibilityHighContrastEnabled) || - prefs->GetBoolean(ash::prefs::kAccessibilityScreenMagnifierEnabled)) - return true; - return false; -} - void AccessibilityManager::EnableLargeCursor(bool enabled) { if (!profile_) return; @@ -403,44 +389,11 @@ pref_service->CommitPendingWrite(); } -void AccessibilityManager::UpdateLargeCursorFromPref() { - if (!profile_) - return; - - const bool enabled = profile_->GetPrefs()->GetBoolean( - ash::prefs::kAccessibilityLargeCursorEnabled); - - // Clear cursor size if large cursor is disabled. - if (enabled != large_cursor_enabled_ && !enabled) { - profile_->GetPrefs()->ClearPref( - ash::prefs::kAccessibilityLargeCursorDipSize); - } - - const int large_cursor_size_in_dip = profile_->GetPrefs()->GetInteger( - ash::prefs::kAccessibilityLargeCursorDipSize); - - // Do nothing if nothing has changed. - if (large_cursor_enabled_ == enabled && - large_cursor_size_in_dip_ == large_cursor_size_in_dip) { - return; - } - - large_cursor_enabled_ = enabled; - large_cursor_size_in_dip_ = large_cursor_size_in_dip; - +void AccessibilityManager::OnLargeCursorChanged() { AccessibilityStatusEventDetails details(ACCESSIBILITY_TOGGLE_LARGE_CURSOR, - enabled, ash::A11Y_NOTIFICATION_NONE); + IsLargeCursorEnabled(), + ash::A11Y_NOTIFICATION_NONE); NotifyAccessibilityStatusChanged(details); - - // TODO(crbug.com/594887): Fix for mash by moving pref into ash. - if (GetAshConfig() == ash::Config::MASH) - return; - - ash::Shell::Get()->cursor_manager()->SetCursorSize( - enabled ? ui::CursorSize::kLarge : ui::CursorSize::kNormal); - ash::Shell::Get()->SetLargeCursorSizeInDip(large_cursor_size_in_dip); - ash::Shell::Get()->SetCursorCompositingEnabled( - ShouldEnableCursorCompositing()); } bool AccessibilityManager::IsIncognitoAllowed() { @@ -451,7 +404,8 @@ } bool AccessibilityManager::IsLargeCursorEnabled() const { - return large_cursor_enabled_; + return profile_ && profile_->GetPrefs()->GetBoolean( + ash::prefs::kAccessibilityLargeCursorEnabled); } void AccessibilityManager::EnableStickyKeys(bool enabled) { @@ -567,8 +521,9 @@ if (!profile_) return; - const bool enabled = profile_->GetPrefs()->GetBoolean( - ash::prefs::kAccessibilityHighContrastEnabled); + PrefService* prefs = profile_->GetPrefs(); + const bool enabled = + prefs->GetBoolean(ash::prefs::kAccessibilityHighContrastEnabled); if (high_contrast_enabled_ == enabled) return; @@ -587,7 +542,7 @@ ash::Shell::Get()->high_contrast_controller()->SetEnabled(enabled); ash::Shell::Get()->SetCursorCompositingEnabled( - ShouldEnableCursorCompositing()); + ash::AccessibilityController::RequiresCursorCompositing(prefs)); } void AccessibilityManager::OnLocaleChanged() { @@ -1062,6 +1017,18 @@ const bool enabled = profile_->GetPrefs()->GetBoolean( ash::prefs::kAccessibilitySwitchAccessEnabled); + // The Switch Access setting is behind a flag. Don't enable the feature + // even if the preference is enabled, if the flag isn't also set. + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + if (!command_line->HasSwitch( + chromeos::switches::kEnableExperimentalAccessibilityFeatures)) { + if (enabled) { + LOG(WARNING) << "Switch access enabled but experimental accessibility " + << "features flag is not set."; + } + return; + } + if (switch_access_enabled_ == enabled) return; switch_access_enabled_ = enabled; @@ -1195,11 +1162,11 @@ base::Unretained(this))); pref_change_registrar_->Add( ash::prefs::kAccessibilityLargeCursorEnabled, - base::Bind(&AccessibilityManager::UpdateLargeCursorFromPref, + base::Bind(&AccessibilityManager::OnLargeCursorChanged, base::Unretained(this))); pref_change_registrar_->Add( ash::prefs::kAccessibilityLargeCursorDipSize, - base::Bind(&AccessibilityManager::UpdateLargeCursorFromPref, + base::Bind(&AccessibilityManager::OnLargeCursorChanged, base::Unretained(this))); pref_change_registrar_->Add( ash::prefs::kAccessibilityStickyKeysEnabled, @@ -1295,7 +1262,6 @@ else UpdateBrailleImeState(); UpdateAlwaysShowMenuFromPref(); - UpdateLargeCursorFromPref(); UpdateStickyKeysFromPref(); UpdateSpokenFeedbackFromPref(); UpdateHighContrastFromPref(); @@ -1356,8 +1322,11 @@ if (GetAshConfig() == ash::Config::MASH) return; - // Update system tray menu visibility. - if (details.notification_type != ACCESSIBILITY_MANAGER_SHUTDOWN) { + // Update system tray menu visibility. Prefs tracked inside ash handle their + // own updates to avoid race conditions (pref updates are asynchronous between + // chrome and ash). + if (details.notification_type != ACCESSIBILITY_MANAGER_SHUTDOWN && + details.notification_type != ACCESSIBILITY_TOGGLE_LARGE_CURSOR) { ash::Shell::Get()->system_tray_notifier()->NotifyAccessibilityStatusChanged( details.notify); } @@ -1520,9 +1489,9 @@ } if (!base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableAudioFocus)) { + ::switches::kEnableAudioFocus)) { base::CommandLine::ForCurrentProcess()->AppendSwitch( - switches::kEnableAudioFocus); + ::switches::kEnableAudioFocus); } }
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.h b/chrome/browser/chromeos/accessibility/accessibility_manager.h index e390440..518cca98 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.h +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.h
@@ -127,11 +127,9 @@ // Returns true when the accessibility menu should be shown. bool ShouldShowAccessibilityMenu(); - // Returns true when cursor compositing should be enabled. - bool ShouldEnableCursorCompositing(); - // Enables or disables the large cursor. void EnableLargeCursor(bool enabled); + // Returns true if the large cursor is enabled, or false if not. bool IsLargeCursorEnabled() const; @@ -315,7 +313,7 @@ void ReloadChromeVoxPanel(); void UpdateAlwaysShowMenuFromPref(); - void UpdateLargeCursorFromPref(); + void OnLargeCursorChanged(); void UpdateStickyKeysFromPref(); void UpdateSpokenFeedbackFromPref(); void UpdateHighContrastFromPref(); @@ -392,8 +390,6 @@ PrefHandler select_to_speak_pref_handler_; PrefHandler switch_access_pref_handler_; - bool large_cursor_enabled_; - int large_cursor_size_in_dip_; bool sticky_keys_enabled_; bool spoken_feedback_enabled_; bool high_contrast_enabled_;
diff --git a/chrome/browser/chromeos/accessibility/magnification_manager.cc b/chrome/browser/chromeos/accessibility/magnification_manager.cc index 4ad04c5..1b8a47f 100644 --- a/chrome/browser/chromeos/accessibility/magnification_manager.cc +++ b/chrome/browser/chromeos/accessibility/magnification_manager.cc
@@ -7,6 +7,7 @@ #include <limits> #include <memory> +#include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility_types.h" #include "ash/magnifier/magnification_controller.h" #include "ash/magnifier/partial_magnification_controller.h" @@ -155,10 +156,11 @@ if (!profile_) return; - const bool enabled = profile_->GetPrefs()->GetBoolean( - ash::prefs::kAccessibilityScreenMagnifierEnabled); - const bool keep_focus_centered = profile_->GetPrefs()->GetBoolean( - ash::prefs::kAccessibilityScreenMagnifierCenterFocus); + PrefService* prefs = profile_->GetPrefs(); + const bool enabled = + prefs->GetBoolean(ash::prefs::kAccessibilityScreenMagnifierEnabled); + const bool keep_focus_centered = + prefs->GetBoolean(ash::prefs::kAccessibilityScreenMagnifierCenterFocus); if (!enabled) { SetMagnifierEnabledInternal(enabled); @@ -176,7 +178,7 @@ AccessibilityManager::Get()->NotifyAccessibilityStatusChanged(details); if (ash::Shell::Get()) { ash::Shell::Get()->SetCursorCompositingEnabled( - AccessibilityManager::Get()->ShouldEnableCursorCompositing()); + ash::AccessibilityController::RequiresCursorCompositing(prefs)); } } }
diff --git a/chrome/browser/chromeos/arc/arc_migration_constants.h b/chrome/browser/chromeos/arc/arc_migration_constants.h index b397bf6..141b0b8 100644 --- a/chrome/browser/chromeos/arc/arc_migration_constants.h +++ b/chrome/browser/chromeos/arc/arc_migration_constants.h
@@ -8,7 +8,7 @@ namespace arc { // The minimum battery level to start the migration. -constexpr double kMigrationMinimumBatteryPercent = 30; +constexpr double kMigrationMinimumBatteryPercent = 10; // The minimum size of available space to start the migration. (50MB) constexpr int64_t kMigrationMinimumAvailableStorage = 50LL * 1024 * 1024;
diff --git a/chrome/browser/chromeos/arc/arc_session_manager.cc b/chrome/browser/chromeos/arc/arc_session_manager.cc index 5f2e4e9..40f9be36 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager.cc +++ b/chrome/browser/chromeos/arc/arc_session_manager.cc
@@ -454,7 +454,8 @@ void ArcSessionManager::Shutdown() { enable_requested_ = false; - ShutdownSession(); + ResetArcState(); + arc_session_runner_->OnShutdown(); if (support_host_) { support_host_->SetErrorDelegate(nullptr); support_host_->Close(); @@ -471,10 +472,7 @@ } void ArcSessionManager::ShutdownSession() { - arc_sign_in_timer_.Stop(); - playstore_launcher_.reset(); - terms_of_service_negotiator_.reset(); - android_management_checker_.reset(); + ResetArcState(); switch (state_) { case State::NOT_INITIALIZED: // Ignore in NOT_INITIALIZED case. This is called in initial SetProfile @@ -510,6 +508,13 @@ } } +void ArcSessionManager::ResetArcState() { + arc_sign_in_timer_.Stop(); + playstore_launcher_.reset(); + terms_of_service_negotiator_.reset(); + android_management_checker_.reset(); +} + void ArcSessionManager::AddObserver(Observer* observer) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); observer_list_.AddObserver(observer);
diff --git a/chrome/browser/chromeos/arc/arc_session_manager.h b/chrome/browser/chromeos/arc/arc_session_manager.h index a1afa7d2..993ee30b 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager.h +++ b/chrome/browser/chromeos/arc/arc_session_manager.h
@@ -296,6 +296,7 @@ bool IsArcTermsOfServiceNegotiationNeeded() const; void ShutdownSession(); + void ResetArcState(); void OnArcSignInTimeout(); // Starts Android management check. This is for first boot case (= Opt-in
diff --git a/chrome/browser/chromeos/arc/arc_util.cc b/chrome/browser/chromeos/arc/arc_util.cc index 01c528b..42183b9a 100644 --- a/chrome/browser/chromeos/arc/arc_util.cc +++ b/chrome/browser/chromeos/arc/arc_util.cc
@@ -35,6 +35,10 @@ constexpr char kLsbReleaseArcVersionKey[] = "CHROMEOS_ARC_ANDROID_SDK_VERSION"; constexpr char kAndroidMSdkVersion[] = "23"; +// Contains set of profiles for which decline reson was already reported. +base::LazyInstance<std::set<base::FilePath>>::DestructorAtExit + g_profile_declined_set = LAZY_INSTANCE_INITIALIZER; + // Let IsAllowedForProfile() return "false" for any profile. bool g_disallow_for_testing = false; @@ -95,11 +99,27 @@ callback.Run(); } +// Returns true if this is called first time for profile. Used to detect +// duplicate message for the same profile. +bool IsReportingFirstTimeForProfile(const Profile* profile) { + const base::FilePath path = profile->GetPath(); + bool inserted; + std::tie(std::ignore, inserted) = g_profile_declined_set.Get().insert(path); + return inserted; +} + } // namespace bool IsArcAllowedForProfile(const Profile* profile) { + // Silently ignore default and lock screen profiles. + if (!profile || chromeos::ProfileHelper::IsSigninProfile(profile) || + chromeos::ProfileHelper::IsLockScreenAppProfile(profile)) { + return false; + } + if (g_disallow_for_testing) { - VLOG(1) << "ARC is disallowed for testing."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "ARC is disallowed for testing."; return false; } @@ -107,35 +127,35 @@ // In that case IsArcKioskMode() should return true as profile is already // created. if (!IsArcAvailable() && !(IsArcKioskMode() && IsArcKioskAvailable())) { - VLOG(1) << "ARC is not available."; - return false; - } - - if (!profile) { - VLOG(1) << "ARC is not supported for systems without profile."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "ARC is not available."; return false; } if (!chromeos::ProfileHelper::IsPrimaryProfile(profile)) { - VLOG(1) << "Non-primary users are not supported in ARC."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "Non-primary users are not supported in ARC."; return false; } // IsPrimaryProfile can return true for an incognito profile corresponding // to the primary profile, but ARC does not support it. if (profile->IsOffTheRecord()) { - VLOG(1) << "Incognito profile is not supported in ARC."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "Incognito profile is not supported in ARC."; return false; } if (profile->IsLegacySupervised()) { - VLOG(1) << "Supervised users are not supported in ARC."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "Supervised users are not supported in ARC."; return false; } if (!IsArcCompatibleFileSystemUsedForProfile(profile) && !IsArcMigrationAllowedForProfile(profile)) { - VLOG(1) << "Incompatible encryption and migration forbidden."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "Incompatible encryption and migration forbidden."; return false; } @@ -146,7 +166,8 @@ const user_manager::User* user = chromeos::ProfileHelper::Get()->GetUserByProfile(profile); if (!IsArcAllowedForUser(user)) { - VLOG(1) << "ARC is not allowed for the user."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "ARC is not allowed for the user."; return false; } @@ -155,7 +176,8 @@ chromeos::UserFlow* user_flow = chromeos::ChromeUserManager::Get()->GetUserFlow(user->GetAccountId()); if (!user_flow || !user_flow->CanStartArc()) { - VLOG(1) << "ARC is not allowed in the current user flow."; + VLOG_IF(1, IsReportingFirstTimeForProfile(profile)) + << "ARC is not allowed in the current user flow."; return false; }
diff --git a/chrome/browser/renderer_context_menu/open_with_menu_factory_ash.cc b/chrome/browser/chromeos/arc/intent_helper/open_with_menu.cc similarity index 61% rename from chrome/browser/renderer_context_menu/open_with_menu_factory_ash.cc rename to chrome/browser/chromeos/arc/intent_helper/open_with_menu.cc index cf58f91..2141168 100644 --- a/chrome/browser/renderer_context_menu/open_with_menu_factory_ash.cc +++ b/chrome/browser/chromeos/arc/intent_helper/open_with_menu.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/renderer_context_menu/open_with_menu_factory_ash.h" +#include "chrome/browser/chromeos/arc/intent_helper/open_with_menu.h" #include <algorithm> #include <memory> @@ -10,54 +10,42 @@ #include <utility> #include <vector> -#include "ash/link_handler_model.h" -#include "ash/link_handler_model_factory.h" -#include "ash/shell.h" #include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" #include "chrome/app/chrome_command_ids.h" -#include "chrome/browser/renderer_context_menu/open_with_menu_factory.h" #include "chrome/grit/generated_resources.h" #include "components/renderer_context_menu/render_view_context_menu_proxy.h" #include "content/public/common/context_menu_params.h" #include "ui/base/l10n/l10n_util.h" -const int OpenWithMenuObserver::kNumMainMenuCommands = 4; -const int OpenWithMenuObserver::kNumSubMenuCommands = 10; +namespace arc { -bool OpenWithMenuObserver::SubMenuDelegate::IsCommandIdChecked( - int command_id) const { +const int OpenWithMenu::kNumMainMenuCommands = 4; +const int OpenWithMenu::kNumSubMenuCommands = 10; + +bool OpenWithMenu::SubMenuDelegate::IsCommandIdChecked(int command_id) const { return false; } -bool OpenWithMenuObserver::SubMenuDelegate::IsCommandIdEnabled( - int command_id) const { +bool OpenWithMenu::SubMenuDelegate::IsCommandIdEnabled(int command_id) const { return true; } -void OpenWithMenuObserver::SubMenuDelegate::ExecuteCommand(int command_id, - int event_flags) { +void OpenWithMenu::SubMenuDelegate::ExecuteCommand(int command_id, + int event_flags) { parent_->ExecuteCommand(command_id); } -OpenWithMenuObserver::OpenWithMenuObserver(RenderViewContextMenuProxy* proxy) - : proxy_(proxy), - submenu_delegate_(this), +OpenWithMenu::OpenWithMenu(content::BrowserContext* context, + RenderViewContextMenuProxy* proxy) + : context_(context), + proxy_(proxy), more_apps_label_( l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_MORE_APPS)) {} -OpenWithMenuObserver::~OpenWithMenuObserver() {} +OpenWithMenu::~OpenWithMenu() = default; -void OpenWithMenuObserver::InitMenu(const content::ContextMenuParams& params) { - if (!ash::Shell::HasInstance()) - return; - ash::LinkHandlerModelFactory* factory = - ash::Shell::Get()->link_handler_model_factory(); - if (!factory) - return; - - link_url_ = params.link_url; - menu_model_ = factory->CreateModel(link_url_); +void OpenWithMenu::InitMenu(const content::ContextMenuParams& params) { + menu_model_ = LinkHandlerModel::Create(context_, params.link_url); if (!menu_model_) return; @@ -70,30 +58,30 @@ menu_model_->AddObserver(this); } -bool OpenWithMenuObserver::IsCommandIdSupported(int command_id) { +bool OpenWithMenu::IsCommandIdSupported(int command_id) { return command_id >= IDC_CONTENT_CONTEXT_OPEN_WITH1 && command_id <= IDC_CONTENT_CONTEXT_OPEN_WITH_LAST; } -bool OpenWithMenuObserver::IsCommandIdChecked(int command_id) { +bool OpenWithMenu::IsCommandIdChecked(int command_id) { return false; } -bool OpenWithMenuObserver::IsCommandIdEnabled(int command_id) { +bool OpenWithMenu::IsCommandIdEnabled(int command_id) { return true; } -void OpenWithMenuObserver::ExecuteCommand(int command_id) { +void OpenWithMenu::ExecuteCommand(int command_id) { // Note: SubmenuDelegate also calls this method with a command_id for the // submenu. const auto it = handlers_.find(command_id); if (it == handlers_.end()) return; - menu_model_->OpenLinkWithHandler(link_url_, it->second.id); + + menu_model_->OpenLinkWithHandler(it->second.id); } -void OpenWithMenuObserver::ModelChanged( - const std::vector<ash::LinkHandlerInfo>& handlers) { +void OpenWithMenu::ModelChanged(const std::vector<LinkHandlerInfo>& handlers) { auto result = BuildHandlersMap(handlers); handlers_ = std::move(result.first); const int submenu_parent_id = result.second; @@ -108,9 +96,8 @@ proxy_->UpdateMenuItem(command_id, false, true, base::EmptyString16()); } else { // Update the menu with the new model. - const base::string16 label = - l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_OPEN_WITH_APP, - base::UTF8ToUTF16(it->second.name)); + const base::string16 label = l10n_util::GetStringFUTF16( + IDS_CONTENT_CONTEXT_OPEN_WITH_APP, it->second.name); proxy_->UpdateMenuItem(command_id, true, false, label); if (!it->second.icon.IsEmpty()) proxy_->UpdateMenuIcon(command_id, it->second.icon); @@ -118,21 +105,20 @@ } } -void OpenWithMenuObserver::AddPlaceholderItemsForTesting( +void OpenWithMenu::AddPlaceholderItemsForTesting( RenderViewContextMenuProxy* proxy, ui::SimpleMenuModel* submenu) { return AddPlaceholderItems(proxy, submenu); } -std::pair<OpenWithMenuObserver::HandlerMap, int> -OpenWithMenuObserver::BuildHandlersMapForTesting( - const std::vector<ash::LinkHandlerInfo>& handlers) { +std::pair<OpenWithMenu::HandlerMap, int> +OpenWithMenu::BuildHandlersMapForTesting( + const std::vector<LinkHandlerInfo>& handlers) { return BuildHandlersMap(handlers); } -void OpenWithMenuObserver::AddPlaceholderItems( - RenderViewContextMenuProxy* proxy, - ui::SimpleMenuModel* submenu) { +void OpenWithMenu::AddPlaceholderItems(RenderViewContextMenuProxy* proxy, + ui::SimpleMenuModel* submenu) { for (int i = 0; i < kNumSubMenuCommands; ++i) { const int command_id = IDC_CONTENT_CONTEXT_OPEN_WITH1 + kNumMainMenuCommands + i; @@ -146,14 +132,13 @@ proxy->AddSubMenu(++command_id, base::EmptyString16(), submenu); } -std::pair<OpenWithMenuObserver::HandlerMap, int> -OpenWithMenuObserver::BuildHandlersMap( - const std::vector<ash::LinkHandlerInfo>& handlers) { +std::pair<OpenWithMenu::HandlerMap, int> OpenWithMenu::BuildHandlersMap( + const std::vector<LinkHandlerInfo>& handlers) { const int kInvalidCommandId = -1; const int submenu_id_start = IDC_CONTENT_CONTEXT_OPEN_WITH1 + kNumMainMenuCommands; - OpenWithMenuObserver::HandlerMap handler_map; + OpenWithMenu::HandlerMap handler_map; int submenu_parent_command_id = kInvalidCommandId; const int num_apps = handlers.size(); @@ -186,7 +171,4 @@ return std::make_pair(std::move(handler_map), submenu_parent_command_id); } -RenderViewContextMenuObserver* OpenWithMenuFactory::CreateMenu( - RenderViewContextMenuProxy* proxy) { - return new OpenWithMenuObserver(proxy); -} +} // namespace arc
diff --git a/chrome/browser/renderer_context_menu/open_with_menu_factory_ash.h b/chrome/browser/chromeos/arc/intent_helper/open_with_menu.h similarity index 63% rename from chrome/browser/renderer_context_menu/open_with_menu_factory_ash.h rename to chrome/browser/chromeos/arc/intent_helper/open_with_menu.h index fe3209d..ff40ee0 100644 --- a/chrome/browser/renderer_context_menu/open_with_menu_factory_ash.h +++ b/chrome/browser/chromeos/arc/intent_helper/open_with_menu.h
@@ -2,36 +2,42 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_RENDERER_CONTEXT_MENU_OPEN_WITH_MENU_FACTORY_ASH_H_ -#define CHROME_BROWSER_RENDERER_CONTEXT_MENU_OPEN_WITH_MENU_FACTORY_ASH_H_ +#ifndef CHROME_BROWSER_CHROMEOS_ARC_INTENT_HELPER_OPEN_WITH_MENU_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_INTENT_HELPER_OPEN_WITH_MENU_H_ #include <memory> #include <unordered_map> #include <utility> #include <vector> -#include "ash/link_handler_model.h" #include "base/macros.h" +#include "components/arc/intent_helper/link_handler_model.h" #include "components/renderer_context_menu/render_view_context_menu_observer.h" #include "ui/base/models/simple_menu_model.h" #include "url/gurl.h" class RenderViewContextMenuProxy; +namespace content { +class BrowserContext; +} + namespace ui { class SimpleMenuModel; -} // namespace ui +} + +namespace arc { // An observer class which populates the "Open with <app>" menu items either // synchronously or asynchronously. -class OpenWithMenuObserver : public RenderViewContextMenuObserver, - public ash::LinkHandlerModel::Observer { +class OpenWithMenu : public RenderViewContextMenuObserver, + public LinkHandlerModel::Observer { public: - using HandlerMap = std::unordered_map<int, ash::LinkHandlerInfo>; + using HandlerMap = std::unordered_map<int, LinkHandlerInfo>; class SubMenuDelegate : public ui::SimpleMenuModel::Delegate { public: - explicit SubMenuDelegate(OpenWithMenuObserver* parent) : parent_(parent) {} + explicit SubMenuDelegate(OpenWithMenu* parent) : parent_(parent) {} ~SubMenuDelegate() override {} bool IsCommandIdChecked(int command_id) const override; @@ -39,13 +45,14 @@ void ExecuteCommand(int command_id, int event_flags) override; private: - OpenWithMenuObserver* const parent_; + OpenWithMenu* const parent_; DISALLOW_COPY_AND_ASSIGN(SubMenuDelegate); }; - explicit OpenWithMenuObserver(RenderViewContextMenuProxy* proxy); - ~OpenWithMenuObserver() override; + OpenWithMenu(content::BrowserContext* context, + RenderViewContextMenuProxy* proxy); + ~OpenWithMenu() override; // RenderViewContextMenuObserver overrides: void InitMenu(const content::ContextMenuParams& params) override; @@ -54,13 +61,13 @@ bool IsCommandIdEnabled(int command_id) override; void ExecuteCommand(int command_id) override; - // ash::OpenWithItems::Delegate overrides: - void ModelChanged(const std::vector<ash::LinkHandlerInfo>& handlers) override; + // LinkHandlerModel::Observer overrides: + void ModelChanged(const std::vector<LinkHandlerInfo>& handlers) override; static void AddPlaceholderItemsForTesting(RenderViewContextMenuProxy* proxy, ui::SimpleMenuModel* submenu); static std::pair<HandlerMap, int> BuildHandlersMapForTesting( - const std::vector<ash::LinkHandlerInfo>& handlers); + const std::vector<LinkHandlerInfo>& handlers); private: // Adds placeholder items and the |submenu| to the |proxy|. @@ -71,24 +78,26 @@ // LinkHandlerInfo and returns the map. Also returns a command id for the // parent of the submenu. When the submenu is not needed, the function // returns |kInvalidCommandId|. - static std::pair<OpenWithMenuObserver::HandlerMap, int> BuildHandlersMap( - const std::vector<ash::LinkHandlerInfo>& handlers); + static std::pair<OpenWithMenu::HandlerMap, int> BuildHandlersMap( + const std::vector<LinkHandlerInfo>& handlers); static const int kNumMainMenuCommands; static const int kNumSubMenuCommands; + content::BrowserContext* context_; RenderViewContextMenuProxy* const proxy_; - SubMenuDelegate submenu_delegate_; + SubMenuDelegate submenu_delegate_{this}; const base::string16 more_apps_label_; - GURL link_url_; // A menu model received from Ash side. - std::unique_ptr<ash::LinkHandlerModel> menu_model_; - OpenWithMenuObserver::HandlerMap handlers_; + std::unique_ptr<LinkHandlerModel> menu_model_; + OpenWithMenu::HandlerMap handlers_; // A submenu passed to Chrome side. std::unique_ptr<ui::MenuModel> submenu_; - DISALLOW_COPY_AND_ASSIGN(OpenWithMenuObserver); + DISALLOW_COPY_AND_ASSIGN(OpenWithMenu); }; -#endif // CHROME_BROWSER_RENDERER_CONTEXT_MENU_OPEN_WITH_MENU_FACTORY_ASH_H_ +} // namespace arc + +#endif // CHROME_BROWSER_CHROMEOS_ARC_INTENT_HELPER_OPEN_WITH_MENU_H_
diff --git a/chrome/browser/renderer_context_menu/open_with_menu_factory_ash_unittest.cc b/chrome/browser/chromeos/arc/intent_helper/open_with_menu_unittest.cc similarity index 74% rename from chrome/browser/renderer_context_menu/open_with_menu_factory_ash_unittest.cc rename to chrome/browser/chromeos/arc/intent_helper/open_with_menu_unittest.cc index 15c3c5d9..625d352a 100644 --- a/chrome/browser/renderer_context_menu/open_with_menu_factory_ash_unittest.cc +++ b/chrome/browser/chromeos/arc/intent_helper/open_with_menu_unittest.cc
@@ -2,18 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/chromeos/arc/intent_helper/open_with_menu.h" + #include <unordered_map> #include <utility> #include <vector> -#include "ash/link_handler_model.h" #include "base/format_macros.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/renderer_context_menu/mock_render_view_context_menu.h" -#include "chrome/browser/renderer_context_menu/open_with_menu_factory_ash.h" #include "chrome/grit/generated_resources.h" +#include "components/arc/intent_helper/link_handler_model.h" #include "components/renderer_context_menu/render_view_context_menu_observer.h" #include "components/renderer_context_menu/render_view_context_menu_proxy.h" #include "content/public/test/test_browser_thread_bundle.h" @@ -21,8 +22,12 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/image/image_skia.h" +namespace arc { + namespace { +using base::ASCIIToUTF16; + // All tests in this file assume that 4 and 10 IDC command IDs are reserved // for the main and sub menus, respectively. const int kFirstMainMenuId = IDC_CONTENT_CONTEXT_OPEN_WITH1; @@ -33,13 +38,13 @@ static_assert(kNumCommandIds == 14, "invalid number of command IDs reserved for open with"); -std::vector<ash::LinkHandlerInfo> CreateLinkHandlerInfo(size_t num_apps) { - std::vector<ash::LinkHandlerInfo> handlers; +std::vector<LinkHandlerInfo> CreateLinkHandlerInfo(size_t num_apps) { + std::vector<LinkHandlerInfo> handlers; for (size_t i = 0; i < num_apps; ++i) { gfx::ImageSkia image_skia; image_skia.AddRepresentation(gfx::ImageSkiaRep(gfx::Size(1, 1), 1.0f)); - ash::LinkHandlerInfo info = { - base::StringPrintf("App %" PRIuS, i), + LinkHandlerInfo info = { + base::UTF8ToUTF16(base::StringPrintf("App %" PRIuS, i)), // Use an empty image for the first item to test ModelChanged() with // both empty and non-empty icons. (i == 0) ? gfx::Image() : gfx::Image(image_skia), i}; @@ -48,9 +53,8 @@ return handlers; } -std::pair<OpenWithMenuObserver::HandlerMap, int> BuildHandlersMap( - size_t num_apps) { - return OpenWithMenuObserver::BuildHandlersMapForTesting( +std::pair<OpenWithMenu::HandlerMap, int> BuildHandlersMap(size_t num_apps) { + return OpenWithMenu::BuildHandlersMapForTesting( CreateLinkHandlerInfo(num_apps)); } @@ -60,9 +64,7 @@ base::UTF8ToUTF16(base::StringPrintf("App %" PRIuS, i))); } -} // namespace - -TEST(OpenWithMenuObserverTest, TestBuildHandlersMap) { +TEST(OpenWithMenuTest, TestBuildHandlersMap) { auto result = BuildHandlersMap(0); EXPECT_EQ(0U, result.first.size()); EXPECT_EQ(-1, result.second); @@ -71,15 +73,15 @@ ASSERT_EQ(1U, result.first.size()); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); EXPECT_EQ(-1, result.second); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); result = BuildHandlersMap(2); EXPECT_EQ(2U, result.first.size()); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); EXPECT_EQ(-1, result.second); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); - EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 1"), result.first[kFirstMainMenuId + 1].name); result = BuildHandlersMap(3); EXPECT_EQ(3U, result.first.size()); @@ -87,9 +89,9 @@ ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 2)); EXPECT_EQ(-1, result.second); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); - EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); - EXPECT_EQ("App 2", result.first[kFirstMainMenuId + 2].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 1"), result.first[kFirstMainMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 2"), result.first[kFirstMainMenuId + 2].name); // Test if app names will overflow to the sub menu. result = BuildHandlersMap(4); @@ -100,18 +102,18 @@ EXPECT_EQ(kFirstMainMenuId + 3, result.second); ASSERT_EQ(1U, result.first.count(kFirstSubMenuId)); ASSERT_EQ(1U, result.first.count(kFirstSubMenuId + 1)); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); - EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); - EXPECT_EQ("App 2", result.first[kFirstSubMenuId].name); - EXPECT_EQ("App 3", result.first[kFirstSubMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 1"), result.first[kFirstMainMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 2"), result.first[kFirstSubMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 3"), result.first[kFirstSubMenuId + 1].name); result = BuildHandlersMap(11); EXPECT_EQ(11U, result.first.size()); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); EXPECT_EQ(kFirstMainMenuId + 3, result.second); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); - EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 1"), result.first[kFirstMainMenuId + 1].name); for (size_t i = 0; i < 9; ++i) { ASSERT_EQ(1U, result.first.count(kFirstSubMenuId + i)) << i; } @@ -122,12 +124,14 @@ ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); EXPECT_EQ(kFirstMainMenuId + 3, result.second); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); - EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 1"), result.first[kFirstMainMenuId + 1].name); for (size_t i = 0; i < 10; ++i) { const int id = kFirstSubMenuId + i; ASSERT_EQ(1U, result.first.count(id)) << i; - EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i; + EXPECT_EQ(ASCIIToUTF16(base::StringPrintf("App %zu", i + 2)), + result.first[id].name) + << i; } result = BuildHandlersMap(13); @@ -135,12 +139,14 @@ ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); EXPECT_EQ(kFirstMainMenuId + 3, result.second); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); - EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 1"), result.first[kFirstMainMenuId + 1].name); for (size_t i = 0; i < 10; ++i) { // still 10 const int id = kFirstSubMenuId + i; ASSERT_EQ(1U, result.first.count(id)) << i; - EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i; + EXPECT_EQ(ASCIIToUTF16(base::StringPrintf("App %zu", i + 2)), + result.first[id].name) + << i; } result = BuildHandlersMap(1000); @@ -148,24 +154,26 @@ ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); EXPECT_EQ(kFirstMainMenuId + 3, result.second); - EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); - EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); + EXPECT_EQ(ASCIIToUTF16("App 0"), result.first[kFirstMainMenuId].name); + EXPECT_EQ(ASCIIToUTF16("App 1"), result.first[kFirstMainMenuId + 1].name); for (size_t i = 0; i < 10; ++i) { // still 10 const int id = kFirstSubMenuId + i; ASSERT_EQ(1U, result.first.count(id)) << i; - EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i; + EXPECT_EQ(ASCIIToUTF16(base::StringPrintf("App %zu", i + 2)), + result.first[id].name) + << i; } } -TEST(OpenWithMenuObserverTest, TestModelChanged) { +TEST(OpenWithMenuTest, TestModelChanged) { content::TestBrowserThreadBundle thread_bundle; MockRenderViewContextMenu mock_menu(false); - OpenWithMenuObserver observer(&mock_menu); + OpenWithMenu observer(nullptr, &mock_menu); mock_menu.SetObserver(&observer); // Do the initial setup. ui::SimpleMenuModel sub_menu(nullptr); - OpenWithMenuObserver::AddPlaceholderItemsForTesting(&mock_menu, &sub_menu); + OpenWithMenu::AddPlaceholderItemsForTesting(&mock_menu, &sub_menu); CHECK_EQ(static_cast<size_t>(kNumCommandIds), mock_menu.GetMenuSize()); // Check that all menu items are hidden when there is no app to show. @@ -235,3 +243,7 @@ EXPECT_TRUE(item.hidden) << i; } } + +} // namespace + +} // namespace arc
diff --git a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_arc_home_service_browsertest.cc b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_arc_home_service_browsertest.cc index 829bf555..8726786 100644 --- a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_arc_home_service_browsertest.cc +++ b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_arc_home_service_browsertest.cc
@@ -144,9 +144,7 @@ auto result = GetVoiceInteractionStructure( "<html>" " <body>" - " <b id='node1'>foo</b>" - " <b>middle</b>" - " <b id='node2'>bar</b>" + " <b id='node1'>foo</b><b>middle</b><b id='node2'>bar</b>" " <script type='text/javascript'>" " var element1 = document.getElementById('node1');" " var node1 = element1.childNodes.item(0);"
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 3093b1c1..b1be423 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -952,8 +952,6 @@ void ChromeBrowserMainPartsChromeos::PostBrowserStart() { if (!ash_util::IsRunningInMash()) { - system::InputDeviceSettings::Get()->UpdateTouchDevicesStatusFromPrefs(); - // These are dependent on the ash::Shell singleton already having been // initialized. Consequently, these cannot be used when running as a mus // client.
diff --git a/chrome/browser/chromeos/enrollment_dialog_view.cc b/chrome/browser/chromeos/enrollment_dialog_view.cc index 75d6357..0892055 100644 --- a/chrome/browser/chromeos/enrollment_dialog_view.cc +++ b/chrome/browser/chromeos/enrollment_dialog_view.cc
@@ -94,6 +94,8 @@ target_uri_(target_uri), connect_(connect), added_cert_(false) { + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); chrome::RecordDialogCreation(chrome::DialogIdentifier::ENROLLMENT); } @@ -164,7 +166,7 @@ label->SetMultiLine(true); label->SetAllowCharacterBreak(true); - views::GridLayout* grid_layout = views::GridLayout::CreatePanel(this); + views::GridLayout* grid_layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* columns = grid_layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::FILL, // Horizontal resize.
diff --git a/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc b/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc index 534381c..15d8217 100644 --- a/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/enrollment/enrollment_screen_browsertest.cc
@@ -96,6 +96,7 @@ private: // Overridden from InProcessBrowserTest: void SetUpCommandLine(base::CommandLine* command_line) override { + EnrollmentScreenTest::SetUpCommandLine(command_line); command_line->AppendSwitch(switches::kEnterpriseEnableZeroTouchEnrollment); } @@ -168,6 +169,7 @@ private: // Overridden from InProcessBrowserTest: void SetUpCommandLine(base::CommandLine* command_line) override { + EnrollmentScreenTest::SetUpCommandLine(command_line); command_line->AppendSwitchASCII( switches::kEnterpriseEnableZeroTouchEnrollment, "forced"); } @@ -209,6 +211,7 @@ private: // Overridden from InProcessBrowserTest: void SetUpCommandLine(base::CommandLine* command_line) override { + EnrollmentScreenTest::SetUpCommandLine(command_line); command_line->AppendSwitch(switches::kEnterpriseEnableZeroTouchEnrollment); // Kiosk mode will force OAuth enrollment. base::FilePath test_data_dir; @@ -256,6 +259,7 @@ private: // Overridden from InProcessBrowserTest: void SetUpCommandLine(base::CommandLine* command_line) override { + EnrollmentScreenTest::SetUpCommandLine(command_line); base::FilePath test_data_dir; ASSERT_TRUE(chromeos::test_utils::GetTestDataPath( "app_mode", "kiosk_manifest", &test_data_dir));
diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc index 6edf09c..c75bfec 100644 --- a/chrome/browser/chromeos/login/existing_user_controller.cc +++ b/chrome/browser/chromeos/login/existing_user_controller.cc
@@ -575,6 +575,12 @@ ContinuePerformLogin(auth_mode, user_context_ecryptfs); } +void ExistingUserController::RestartLogin(const UserContext& user_context) { + is_login_in_progress_ = false; + login_performer_.reset(); + login_display_->ShowSigninUI(user_context.GetAccountId().GetUserEmail()); +} + void ExistingUserController::MigrateUserData(const std::string& old_password) { // LoginPerformer instance has state of the user so it should exist. if (login_performer_.get()) { @@ -719,6 +725,8 @@ migration_screen->SetContinueLoginCallback(base::BindOnce( &ExistingUserController::ContinuePerformLogin, weak_factory_.GetWeakPtr(), login_performer_->auth_mode())); + migration_screen->SetRestartLoginCallback(base::BindOnce( + &ExistingUserController::RestartLogin, weak_factory_.GetWeakPtr())); migration_screen->SetupInitialView(); } @@ -967,8 +975,14 @@ if (has_incomplete_migration) { // If migration was incomplete, continue migration without checking user // policy. - ShowEncryptionMigrationScreen(user_context, - EncryptionMigrationMode::RESUME_MIGRATION); + // If the last attempted migration was a minimal migration, try to resume + // minimal migration. + const EncryptionMigrationMode mode = + user_manager::known_user::WasUserHomeMinimalMigrationAttempted( + user_context.GetAccountId()) + ? EncryptionMigrationMode::RESUME_MINIMAL_MIGRATION + : EncryptionMigrationMode::RESUME_MIGRATION; + ShowEncryptionMigrationScreen(user_context, mode); return; } @@ -1033,18 +1047,19 @@ switch (action) { case apu::EcryptfsMigrationAction::kMigrate: + user_manager::known_user::SetUserHomeMinimalMigrationAttempted( + user_context.GetAccountId(), false); ShowEncryptionMigrationScreen(user_context, EncryptionMigrationMode::START_MIGRATION); break; case apu::EcryptfsMigrationAction::kAskUser: + user_manager::known_user::SetUserHomeMinimalMigrationAttempted( + user_context.GetAccountId(), false); ShowEncryptionMigrationScreen(user_context, EncryptionMigrationMode::ASK_USER); break; - case apu::EcryptfsMigrationAction::kMinimalMigrate: - // Fall-through intended. Minimal migration behaves as Wipe for Chrome OS - // versions which don't support it yet. case apu::EcryptfsMigrationAction::kWipe: cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove( cryptohome::Identification(user_context.GetAccountId()), @@ -1052,6 +1067,18 @@ weak_factory_.GetWeakPtr(), user_context)); break; + case apu::EcryptfsMigrationAction::kMinimalMigrate: + // Reset the profile ever initialized flag, so that user policy manager + // will block sign-in if no policy can be retrieved for the migrated + // profile. + user_manager::UserManager::Get()->ResetProfileEverInitialized( + user_context.GetAccountId()); + user_manager::known_user::SetUserHomeMinimalMigrationAttempted( + user_context.GetAccountId(), true); + ShowEncryptionMigrationScreen( + user_context, EncryptionMigrationMode::START_MINIMAL_MIGRATION); + break; + case apu::EcryptfsMigrationAction::kAskForEcryptfsArcUsers: // TODO(igorcov): Fall-through intended. This behaves as Disallow Migration // until it's implemented.
diff --git a/chrome/browser/chromeos/login/existing_user_controller.h b/chrome/browser/chromeos/login/existing_user_controller.h index 92bc611a..c27ea82d 100644 --- a/chrome/browser/chromeos/login/existing_user_controller.h +++ b/chrome/browser/chromeos/login/existing_user_controller.h
@@ -229,7 +229,7 @@ void PerformLogin(const UserContext& user_context, LoginPerformer::AuthorizationMode auth_mode); - // calls login() on previously-used |login_performer|. + // Calls login() on previously-used |login_performer_|. void ContinuePerformLogin(LoginPerformer::AuthorizationMode auth_mode, const UserContext& user_context); @@ -239,6 +239,9 @@ LoginPerformer::AuthorizationMode auth_mode, const UserContext& user_context); + // Asks the user to enter their password again. + void RestartLogin(const UserContext& user_context); + // Updates the |login_display_| attached to this controller. void UpdateLoginDisplay(const user_manager::UserList& users);
diff --git a/chrome/browser/chromeos/login/screens/encryption_migration_mode.h b/chrome/browser/chromeos/login/screens/encryption_migration_mode.h index 28da2f5d..0f237a83a 100644 --- a/chrome/browser/chromeos/login/screens/encryption_migration_mode.h +++ b/chrome/browser/chromeos/login/screens/encryption_migration_mode.h
@@ -13,8 +13,12 @@ ASK_USER, // Start migration immediately. START_MIGRATION, + // Start minimal migration immediately. + START_MINIMAL_MIGRATION, // Resume incomplete migration. - RESUME_MIGRATION + RESUME_MIGRATION, + // Resume minimal migration. + RESUME_MINIMAL_MIGRATION }; } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc b/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc index 214c5390..f4a77b5 100644 --- a/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc +++ b/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc
@@ -64,6 +64,12 @@ view_->SetContinueLoginCallback(std::move(callback)); } +void EncryptionMigrationScreen::SetRestartLoginCallback( + RestartLoginCallback callback) { + DCHECK(view_); + view_->SetRestartLoginCallback(std::move(callback)); +} + void EncryptionMigrationScreen::SetupInitialView() { DCHECK(view_); view_->SetupInitialView();
diff --git a/chrome/browser/chromeos/login/screens/encryption_migration_screen.h b/chrome/browser/chromeos/login/screens/encryption_migration_screen.h index de27782..f63416c6 100644 --- a/chrome/browser/chromeos/login/screens/encryption_migration_screen.h +++ b/chrome/browser/chromeos/login/screens/encryption_migration_screen.h
@@ -19,6 +19,7 @@ public EncryptionMigrationScreenView::Delegate { public: using ContinueLoginCallback = base::OnceCallback<void(const UserContext&)>; + using RestartLoginCallback = base::OnceCallback<void(const UserContext&)>; EncryptionMigrationScreen(BaseScreenDelegate* base_screen_delegate, EncryptionMigrationScreenView* view); @@ -42,6 +43,10 @@ // session from the migration UI. void SetContinueLoginCallback(ContinueLoginCallback callback); + // Sets a callback, which should be called when the user should re-enter their + // password. + void SetRestartLoginCallback(RestartLoginCallback callback); + // Setup the initial view in the migration UI. // This should be called after other state like UserContext, etc... are set. void SetupInitialView();
diff --git a/chrome/browser/chromeos/login/screens/encryption_migration_screen_view.h b/chrome/browser/chromeos/login/screens/encryption_migration_screen_view.h index d75e512..c4b0f32 100644 --- a/chrome/browser/chromeos/login/screens/encryption_migration_screen_view.h +++ b/chrome/browser/chromeos/login/screens/encryption_migration_screen_view.h
@@ -16,6 +16,7 @@ class EncryptionMigrationScreenView { public: using ContinueLoginCallback = base::OnceCallback<void(const UserContext&)>; + using RestartLoginCallback = base::OnceCallback<void(const UserContext&)>; class Delegate { public: @@ -40,6 +41,7 @@ virtual void SetUserContext(const UserContext& user_context) = 0; virtual void SetMode(EncryptionMigrationMode mode) = 0; virtual void SetContinueLoginCallback(ContinueLoginCallback callback) = 0; + virtual void SetRestartLoginCallback(RestartLoginCallback callback) = 0; virtual void SetupInitialView() = 0; };
diff --git a/chrome/browser/chromeos/login/screens/update_screen.cc b/chrome/browser/chromeos/login/screens/update_screen.cc index c80d5ec..e039b6cb 100644 --- a/chrome/browser/chromeos/login/screens/update_screen.cc +++ b/chrome/browser/chromeos/login/screens/update_screen.cc
@@ -38,7 +38,7 @@ constexpr const char kContextKeyEstimatedTimeLeftSec[] = "time-left-sec"; constexpr const char kContextKeyShowEstimatedTimeLeft[] = "show-time-left"; -constexpr const char kContextKeyUpdateMessage[] = "update-msg"; +constexpr const char kContextKeyUpdateCompleted[] = "update-completed"; constexpr const char kContextKeyShowCurtain[] = "show-curtain"; constexpr const char kContextKeyShowProgressMessage[] = "show-progress-msg"; constexpr const char kContextKeyProgress[] = "progress"; @@ -504,8 +504,7 @@ void UpdateScreen::OnWaitForRebootTimeElapsed() { LOG(ERROR) << "Unable to reboot - asking user for a manual reboot."; MakeSureScreenIsShown(); - GetContextEditor().SetString(kContextKeyUpdateMessage, - l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED)); + GetContextEditor().SetBoolean(kContextKeyUpdateCompleted, true); } void UpdateScreen::MakeSureScreenIsShown() {
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen.cc b/chrome/browser/chromeos/login/screens/user_selection_screen.cc index 26fc2e7b..76cefcd 100644 --- a/chrome/browser/chromeos/login/screens/user_selection_screen.cc +++ b/chrome/browser/chromeos/login/screens/user_selection_screen.cc
@@ -230,6 +230,15 @@ void Check(const AccountId& account_id) { focused_user_ = account_id; + // If the user may be enterprise-managed, don't display the banner, because + // migration may be blocked by user policy (and user policy is not available + // at this time yet). + if (!policy::BrowserPolicyConnector::IsNonEnterpriseUser( + account_id.GetUserEmail())) { + UpdateUI(account_id, false); + return; + } + auto it = needs_dircrypto_migration_cache_.find(account_id); if (it != needs_dircrypto_migration_cache_.end()) { UpdateUI(account_id, it->second);
diff --git a/chrome/browser/chromeos/login/screens/user_selection_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/user_selection_screen_browsertest.cc index ae8db8d..685f0b6 100644 --- a/chrome/browser/chromeos/login/screens/user_selection_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/screens/user_selection_screen_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/memory/ptr_util.h" #include "base/run_loop.h" +#include "base/strings/stringprintf.h" #include "chrome/browser/chromeos/login/login_manager_test.h" #include "chrome/browser/chromeos/login/startup_utils.h" #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" @@ -21,8 +22,14 @@ namespace { +// Consumer user according to BrowserPolicyConnector::IsNonEnterpriseUser +// (@gmail.com). constexpr char kTestUser1[] = "test-user1@gmail.com"; +// Consumer user according to BrowserPolicyConnector::IsNonEnterpriseUser +// (@gmail.com). constexpr char kTestUser2[] = "test-user2@gmail.com"; +// No consumer user according to BrowserPolicyConnector::IsNonEnterpriseUser. +constexpr char kManagedTestUser[] = "manager@example.com"; } // namespace @@ -48,6 +55,15 @@ return static_cast<OobeUI*>(web_contents()->GetWebUI()->GetController()); } + void FocusUserPod(int pod_id) { + base::RunLoop pod_focus_wait_loop; + GetOobeUI()->signin_screen_handler()->SetFocusPODCallbackForTesting( + pod_focus_wait_loop.QuitClosure()); + js_checker().Evaluate(base::StringPrintf( + "$('pod-row').focusPod($('pod-row').pods[%d])", pod_id)); + pod_focus_wait_loop.Run(); + } + private: // DBusThreadManager owns this. FakeCryptohomeClient* fake_cryptohome_client_ = nullptr; @@ -59,10 +75,12 @@ PRE_ShowDircryptoMigrationBanner) { RegisterUser(kTestUser1); RegisterUser(kTestUser2); + RegisterUser(kManagedTestUser); StartupUtils::MarkOobeCompleted(); } -// Test that a banner shows up for users that need dircrypto migration. +// Test that a banner shows up for known-unmanaged users that need dircrypto +// migration. Also test that no banner shows up for users that may be managed. IN_PROC_BROWSER_TEST_F(UserSelectionScreenTest, ShowDircryptoMigrationBanner) { // Enable ARC. Otherwise, the banner would not show. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( @@ -74,18 +92,23 @@ // Change the needs dircrypto migration response. fake_cryptohome_client()->set_needs_dircrypto_migration(true); - // Focus to the 2nd user pod. - base::RunLoop pod_focus_wait_loop; - GetOobeUI()->signin_screen_handler()->SetFocusPODCallbackForTesting( - pod_focus_wait_loop.QuitClosure()); - js_checker().Evaluate("$('pod-row').focusPod($('pod-row').pods[1])"); - pod_focus_wait_loop.Run(); + // Focus the 2nd user pod (consumer). + FocusUserPod(1); // Wait for FakeCryptohomeClient to send back the check result. base::RunLoop().RunUntilIdle(); - // Banner should be shown for the 2nd user. + // Banner should be shown for the 2nd user (consumer). JSExpect("$('signin-banner').classList.contains('message-set')"); + + // Focus to the 3rd user pod (enterprise). + FocusUserPod(2); + + // Wait for FakeCryptohomeClient to send back the check result. + base::RunLoop().RunUntilIdle(); + + // Banner should not be shown for the enterprise user. + JSExpect("!$('signin-banner').classList.contains('message-set')"); } } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index 0f74b25..3349ae9 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -1057,7 +1057,11 @@ input_method::InputMethodManager::Get(); manager->SetState(GetDefaultIMEState(profile)); } - if (user_manager::UserManager::Get()->IsCurrentUserNew()) { + // Set initial prefs if the user is new, or if the user was already present on + // the device and the profile was re-created. This can happen e.g. in ext4 + // migration in wipe mode. + if (user_manager::UserManager::Get()->IsCurrentUserNew() || + profile->IsNewProfile()) { SetFirstLoginPrefs(profile, user_context.GetPublicSessionLocale(), user_context.GetPublicSessionInputMethod());
diff --git a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc index 5d55bc35..439f432 100644 --- a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc +++ b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
@@ -67,8 +67,7 @@ views::View* forward, views::View* reload, views::View* location_bar) { - GridLayout* layout = new GridLayout(this); - SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(this); const int related_horizontal_spacing = ChromeLayoutProvider::Get()->GetDistanceMetric( @@ -210,8 +209,7 @@ toolbar_row->Init(back_, forward_, reload_, location_bar_); // Layout. - GridLayout* layout = new GridLayout(this); - SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(this); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc index 3a20732..38ad4b2b 100644 --- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc +++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc
@@ -334,7 +334,8 @@ started_load_at_ = base::Time::Now(); if (default_) { - manager->DoSetDefaultWallpaper(account_id_, std::move(on_finish_)); + manager->DoSetDefaultWallpaper(account_id_, true /* update_wallpaper */, + std::move(on_finish_)); } else if (!user_wallpaper_.isNull()) { SetWallpaper(user_wallpaper_, info_); } else if (!wallpaper_path_.empty()) { @@ -347,7 +348,8 @@ base::Passed(std::move(on_finish_)), manager->weak_factory_.GetWeakPtr())); } else if (!info_.location.empty()) { - manager->LoadWallpaper(account_id_, info_, true, std::move(on_finish_)); + manager->LoadWallpaper(account_id_, info_, true /* update_wallpaper */, + std::move(on_finish_)); } else { // PendingWallpaper was created and never initialized? NOTREACHED(); @@ -696,6 +698,7 @@ void WallpaperManager::DoSetDefaultWallpaper( const AccountId& account_id, + bool update_wallpaper, MovableOnDestroyCallbackHolder on_finish) { // There is no visible wallpaper in kiosk mode. if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) @@ -729,21 +732,26 @@ default_wallpaper_image_.reset(); if (!file->empty()) { loaded_wallpapers_for_test_++; - StartLoadAndSetDefaultWallpaper(*file, layout, std::move(on_finish), + StartLoadAndSetDefaultWallpaper(*file, layout, update_wallpaper, + std::move(on_finish), &default_wallpaper_image_); return; } CreateSolidDefaultWallpaper(); } - // 1x1 wallpaper is actually solid color, so it should be stretched. - if (default_wallpaper_image_->image().width() == 1 && - default_wallpaper_image_->image().height() == 1) - layout = wallpaper::WALLPAPER_LAYOUT_STRETCH; - WallpaperInfo info(default_wallpaper_image_->file_path().value(), layout, - wallpaper::DEFAULT, base::Time::Now().LocalMidnight()); - SetWallpaper(default_wallpaper_image_->image(), info); + if (update_wallpaper) { + // 1x1 wallpaper is actually solid color, so it should be stretched. + if (default_wallpaper_image_->image().width() == 1 && + default_wallpaper_image_->image().height() == 1) { + layout = wallpaper::WALLPAPER_LAYOUT_STRETCH; + } + + WallpaperInfo info(default_wallpaper_image_->file_path().value(), layout, + wallpaper::DEFAULT, base::Time::Now().LocalMidnight()); + SetWallpaper(default_wallpaper_image_->image(), info); + } } void WallpaperManager::SetUserWallpaperInfo(const AccountId& account_id, @@ -1263,9 +1271,7 @@ "", wallpaper::WALLPAPER_LAYOUT_CENTER_CROPPED, wallpaper::DEFAULT, base::Time::Now().LocalMidnight()); SetUserWallpaperInfo(account_id, default_info, true); - - if (update_wallpaper) - DoSetDefaultWallpaper(account_id, std::move(on_finish)); + DoSetDefaultWallpaper(account_id, update_wallpaper, std::move(on_finish)); return; } @@ -1404,6 +1410,7 @@ void WallpaperManager::OnDefaultWallpaperDecoded( const base::FilePath& path, const wallpaper::WallpaperLayout layout, + bool update_wallpaper, std::unique_ptr<user_manager::UserImage>* result_out, MovableOnDestroyCallbackHolder on_finish, std::unique_ptr<user_manager::UserImage> user_image) { @@ -1413,21 +1420,24 @@ } *result_out = std::move(user_image); - WallpaperInfo info(path.value(), layout, wallpaper::DEFAULT, - base::Time::Now().LocalMidnight()); - SetWallpaper((*result_out)->image(), info); + if (update_wallpaper) { + WallpaperInfo info(path.value(), layout, wallpaper::DEFAULT, + base::Time::Now().LocalMidnight()); + SetWallpaper((*result_out)->image(), info); + } } void WallpaperManager::StartLoadAndSetDefaultWallpaper( const base::FilePath& path, const wallpaper::WallpaperLayout layout, + bool update_wallpaper, MovableOnDestroyCallbackHolder on_finish, std::unique_ptr<user_manager::UserImage>* result_out) { user_image_loader::StartWithFilePath( task_runner_, path, ImageDecoder::ROBUST_JPEG_CODEC, 0, // Do not crop. base::Bind(&WallpaperManager::OnDefaultWallpaperDecoded, - weak_factory_.GetWeakPtr(), path, layout, + weak_factory_.GetWeakPtr(), path, layout, update_wallpaper, base::Unretained(result_out), base::Passed(std::move(on_finish)))); } @@ -1469,8 +1479,8 @@ } } - if (need_update_screen) - DoSetDefaultWallpaper(EmptyAccountId(), MovableOnDestroyCallbackHolder()); + DoSetDefaultWallpaper(EmptyAccountId(), need_update_screen, + MovableOnDestroyCallbackHolder()); } void WallpaperManager::RecordWallpaperAppType() {
diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h index 3de3f1e..8715439 100644 --- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h +++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h
@@ -82,6 +82,7 @@ void SetDefaultWallpaperDelayed(const AccountId& account_id) override; void DoSetDefaultWallpaper( const AccountId& account_id, + bool update_wallpaper, wallpaper::MovableOnDestroyCallbackHolder on_finish) override; void SetUserWallpaperInfo(const AccountId& account_id, const wallpaper::WallpaperInfo& info, @@ -200,12 +201,14 @@ void OnDefaultWallpaperDecoded( const base::FilePath& path, const wallpaper::WallpaperLayout layout, + bool update_wallpaper, std::unique_ptr<user_manager::UserImage>* result, wallpaper::MovableOnDestroyCallbackHolder on_finish, std::unique_ptr<user_manager::UserImage> user_image) override; void StartLoadAndSetDefaultWallpaper( const base::FilePath& path, const wallpaper::WallpaperLayout layout, + bool update_wallpaper, wallpaper::MovableOnDestroyCallbackHolder on_finish, std::unique_ptr<user_manager::UserImage>* result_out) override; void SetDefaultWallpaperPath(
diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc index 68f80ca..124958b5 100644 --- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc +++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc
@@ -851,4 +851,62 @@ EXPECT_FALSE(WallpaperManager::Get()->IsPendingWallpaper( wallpaper::WallpaperResizer::GetImageId(image))); } + +// Tests that if there are multiple users on the device and if one user lost his +// wallpaper somehow, the wallpapers should still show correctly on lock/login +// screen. +IN_PROC_BROWSER_TEST_F(WallpaperManagerBrowserTest, CustomWallpaperLostTest) { + UpdateDisplay("640x480"); + WallpaperManager* wallpaper_manager = WallpaperManager::Get(); + + LogIn(test_account_id1_, kTestUser1Hash); + wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); + + // Now log in |test_account_id2_| to make it the current active user. + LogIn(test_account_id2_, kTestUser2Hash); + wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); + EXPECT_EQ(user_manager::UserManager::Get()->GetActiveUser()->GetAccountId(), + test_account_id2_); + + // Set a different wallpaper for |test_account_id2_|. + std::string id = std::to_string( + std::abs((base::Time::Now() - base::Time::Now().LocalMidnight()) + .InMilliseconds())); + base::FilePath small_wallpaper_path = GetCustomWallpaperPath( + wallpaper::kSmallWallpaperSubDir, test_account2_wallpaper_files_id_, id); + ASSERT_TRUE(wallpaper_manager_test_utils::WriteJPEGFile( + small_wallpaper_path, kSmallWallpaperWidth, kSmallWallpaperHeight, + wallpaper_manager_test_utils::kCustomWallpaperColor)); + std::string relative_path2 = + base::FilePath(test_account2_wallpaper_files_id_.id()).Append(id).value(); + WallpaperInfo info2 = {relative_path2, WALLPAPER_LAYOUT_CENTER_CROPPED, + wallpaper::CUSTOMIZED, + base::Time::Now().LocalMidnight()}; + wallpaper_manager->SetUserWallpaperInfo(test_account_id2_, info2, true); + wallpaper_manager->SetUserWallpaperNow(test_account_id2_); + wallpaper_manager_test_utils::WaitAsyncWallpaperLoadFinished(); + EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( + controller_->GetWallpaper(), + wallpaper_manager_test_utils::kCustomWallpaperColor)); + + // Now simulate the lost of |test_account_id1_|'s wallpaper by only updating + // its WallpaperInfo but not providing its wallpaper. In this case we just + // fallback to the default wallpaper. + std::string relative_path = + base::FilePath(test_account1_wallpaper_files_id_.id()).Append(id).value(); + // Saves wallpaper info to local state for user |test_account_id1_|. + WallpaperInfo info = {relative_path, WALLPAPER_LAYOUT_CENTER_CROPPED, + wallpaper::CUSTOMIZED, + base::Time::Now().LocalMidnight()}; + wallpaper_manager->SetUserWallpaperInfo(test_account_id1_, info, true); + + // Now simulate lock/login screen. On lock/login screen all users' wallpapers + // will be cached. Test that caching |test_account_id1_| wallpaper won't + // change the current wallpaper (|teset_account_id2_|'s wallpaper). + CacheUserWallpaper(test_account_id1_); + EXPECT_TRUE(wallpaper_manager_test_utils::ImageIsNearColor( + controller_->GetWallpaper(), + wallpaper_manager_test_utils::kCustomWallpaperColor)); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc index 9ab37e6c..242af265 100644 --- a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc +++ b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
@@ -1110,6 +1110,7 @@ // Overridden from InProcessBrowserTest: void SetUpCommandLine(base::CommandLine* command_line) override { + WizardControllerFlowTest::SetUpCommandLine(command_line); base::FilePath test_data_dir; ASSERT_TRUE(chromeos::test_utils::GetTestDataPath( "app_mode", "kiosk_manifest", &test_data_dir)); @@ -1317,6 +1318,7 @@ WizardControllerCellularFirstTest() {} void SetUpCommandLine(base::CommandLine* command_line) override { + WizardControllerFlowTest::SetUpCommandLine(command_line); command_line->AppendSwitch(switches::kCellularFirst); }
diff --git a/chrome/browser/chromeos/net/cert_verify_proc_chromeos.cc b/chrome/browser/chromeos/net/cert_verify_proc_chromeos.cc index 71a0d48..d8670b20 100644 --- a/chrome/browser/chromeos/net/cert_verify_proc_chromeos.cc +++ b/chrome/browser/chromeos/net/cert_verify_proc_chromeos.cc
@@ -8,6 +8,7 @@ #include "net/cert/test_root_certs.h" #include "net/cert/x509_certificate.h" +#include "net/cert/x509_util_nss.h" // NSS doesn't currently define CERT_LIST_TAIL. // See https://bugzilla.mozilla.org/show_bug.cgi?id=962413 @@ -82,7 +83,7 @@ args->additional_trust_anchors.begin(); i != args->additional_trust_anchors.end(); ++i) { - if (net::X509Certificate::IsSameOSCert(cert, (*i)->os_cert_handle())) { + if (net::x509_util::IsSameCertificate(cert, i->get())) { // Certs in the additional_trust_anchors should always be allowed, even if // they aren't stored in a slot that would be allowed by the // profile_filter.
diff --git a/chrome/browser/chromeos/net/cert_verify_proc_chromeos_unittest.cc b/chrome/browser/chromeos/net/cert_verify_proc_chromeos_unittest.cc index 4824ad33..e2e46326 100644 --- a/chrome/browser/chromeos/net/cert_verify_proc_chromeos_unittest.cc +++ b/chrome/browser/chromeos/net/cert_verify_proc_chromeos_unittest.cc
@@ -12,12 +12,26 @@ #include "net/cert/cert_verify_proc.h" #include "net/cert/cert_verify_result.h" #include "net/cert/nss_cert_database_chromeos.h" +#include "net/cert/x509_util_nss.h" #include "net/test/cert_test_util.h" #include "net/test/test_data_directory.h" #include "testing/gtest/include/gtest/gtest.h" namespace chromeos { +namespace { + +std::string GetSubjectCN(net::X509Certificate::OSCertHandle cert_handle) { + scoped_refptr<net::X509Certificate> cert = + net::X509Certificate::CreateFromHandle( + cert_handle, net::X509Certificate::OSCertHandles()); + if (!cert) + return std::string(); + return "CN=" + cert->subject().common_name; +} + +} // namespace + class CertVerifyProcChromeOSTest : public testing::Test { public: CertVerifyProcChromeOSTest() : user_1_("user1"), user_2_("user2") {} @@ -47,32 +61,42 @@ verify_proc_2_ = new CertVerifyProcChromeOS(db_2_->GetPublicSlot()); // Load test cert chains from disk. - certs_1_ = - net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), - "multi-root-chain1.pem", - net::X509Certificate::FORMAT_AUTO); + certs_1_ = net::CreateCERTCertificateListFromFile( + net::GetTestCertsDirectory(), "multi-root-chain1.pem", + net::X509Certificate::FORMAT_AUTO); ASSERT_EQ(4U, certs_1_.size()); - certs_2_ = - net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), - "multi-root-chain2.pem", - net::X509Certificate::FORMAT_AUTO); + certs_2_ = net::CreateCERTCertificateListFromFile( + net::GetTestCertsDirectory(), "multi-root-chain2.pem", + net::X509Certificate::FORMAT_AUTO); ASSERT_EQ(4U, certs_2_.size()); // The chains: // 1. A (end-entity) -> B -> C -> D (self-signed root) // 2. A (end-entity) -> B -> C2 -> E (self-signed root) - ASSERT_TRUE(certs_1_[0]->Equals(certs_2_[0].get())); - ASSERT_TRUE(certs_1_[1]->Equals(certs_2_[1].get())); - ASSERT_FALSE(certs_1_[2]->Equals(certs_2_[2].get())); - ASSERT_EQ("C CA - Multi-root", certs_1_[2]->subject().common_name); - ASSERT_EQ("C CA - Multi-root", certs_2_[2]->subject().common_name); + ASSERT_TRUE(net::x509_util::IsSameCertificate(certs_1_[0].get(), + certs_2_[0].get())); + ASSERT_TRUE(net::x509_util::IsSameCertificate(certs_1_[1].get(), + certs_2_[1].get())); + ASSERT_FALSE(net::x509_util::IsSameCertificate(certs_1_[2].get(), + certs_2_[2].get())); + ASSERT_STREQ("CN=C CA - Multi-root", certs_1_[2]->subjectName); + ASSERT_STREQ("CN=C CA - Multi-root", certs_2_[2]->subjectName); - root_1_.push_back(certs_1_.back()); - root_2_.push_back(certs_2_.back()); + ASSERT_STREQ("CN=D Root CA - Multi-root", certs_1_.back()->subjectName); + ASSERT_STREQ("CN=E Root CA - Multi-root", certs_2_.back()->subjectName); + root_1_.push_back( + net::x509_util::DupCERTCertificate(certs_1_.back().get())); + ASSERT_TRUE(root_1_.back()); + root_2_.push_back( + net::x509_util::DupCERTCertificate(certs_2_.back().get())); + ASSERT_TRUE(root_2_.back()); + ASSERT_STREQ("CN=D Root CA - Multi-root", root_1_.back()->subjectName); + ASSERT_STREQ("CN=E Root CA - Multi-root", root_2_.back()->subjectName); - ASSERT_EQ("D Root CA - Multi-root", root_1_[0]->subject().common_name); - ASSERT_EQ("E Root CA - Multi-root", root_2_[0]->subject().common_name); + server_ = net::x509_util::CreateX509CertificateFromCERTCertificate( + certs_1_[0].get()); + ASSERT_TRUE(server_); } int VerifyWithAdditionalTrustAnchors( @@ -88,7 +112,7 @@ if (!verify_result.verified_cert->GetIntermediateCertificates().empty()) { net::X509Certificate::OSCertHandle root = verify_result.verified_cert->GetIntermediateCertificates().back(); - root_subject_name->assign(root->subjectName); + root_subject_name->assign(GetSubjectCN(root)); } else { root_subject_name->clear(); } @@ -111,26 +135,26 @@ scoped_refptr<net::CertVerifyProc> verify_proc_default_; scoped_refptr<net::CertVerifyProc> verify_proc_1_; scoped_refptr<net::CertVerifyProc> verify_proc_2_; - net::CertificateList certs_1_; - net::CertificateList certs_2_; - net::CertificateList root_1_; - net::CertificateList root_2_; + net::ScopedCERTCertificateList certs_1_; + net::ScopedCERTCertificateList certs_2_; + net::ScopedCERTCertificateList root_1_; + net::ScopedCERTCertificateList root_2_; + scoped_refptr<net::X509Certificate> server_; }; // Test that the CertVerifyProcChromeOS doesn't trusts roots that are in other // user's slots or that have been deleted, and that verifying done by one user // doesn't affect verifications done by others. TEST_F(CertVerifyProcChromeOSTest, TestChainVerify) { - scoped_refptr<net::X509Certificate> server = certs_1_[0]; std::string verify_root; // Before either of the root certs have been trusted, all verifications should // fail with CERT_AUTHORITY_INVALID. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_default_.get(), server.get(), &verify_root)); + Verify(verify_proc_default_.get(), server_.get(), &verify_root)); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_1_.get(), server.get(), &verify_root)); + Verify(verify_proc_1_.get(), server_.get(), &verify_root)); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_2_.get(), server.get(), &verify_root)); + Verify(verify_proc_2_.get(), server_.get(), &verify_root)); // Import and trust the D root for user 1. net::NSSCertDatabase::ImportCertFailureList failed; @@ -140,13 +164,13 @@ // Imported CA certs are not trusted by default verifier. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_default_.get(), server.get(), &verify_root)); + Verify(verify_proc_default_.get(), server_.get(), &verify_root)); // User 1 should now verify successfully through the D root. - EXPECT_EQ(net::OK, Verify(verify_proc_1_.get(), server.get(), &verify_root)); + EXPECT_EQ(net::OK, Verify(verify_proc_1_.get(), server_.get(), &verify_root)); EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); // User 2 should still fail. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_2_.get(), server.get(), &verify_root)); + Verify(verify_proc_2_.get(), server_.get(), &verify_root)); // Import and trust the E root for user 2. failed.clear(); @@ -156,35 +180,35 @@ // Imported CA certs are not trusted by default verifier. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_default_.get(), server.get(), &verify_root)); + Verify(verify_proc_default_.get(), server_.get(), &verify_root)); // User 1 should still verify successfully through the D root. - EXPECT_EQ(net::OK, Verify(verify_proc_1_.get(), server.get(), &verify_root)); + EXPECT_EQ(net::OK, Verify(verify_proc_1_.get(), server_.get(), &verify_root)); EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); // User 2 should now verify successfully through the E root. - EXPECT_EQ(net::OK, Verify(verify_proc_2_.get(), server.get(), &verify_root)); + EXPECT_EQ(net::OK, Verify(verify_proc_2_.get(), server_.get(), &verify_root)); EXPECT_EQ("CN=E Root CA - Multi-root", verify_root); // Delete D root. EXPECT_TRUE(db_1_->DeleteCertAndKey(root_1_[0].get())); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_default_.get(), server.get(), &verify_root)); + Verify(verify_proc_default_.get(), server_.get(), &verify_root)); // User 1 should now fail to verify. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_1_.get(), server.get(), &verify_root)); + Verify(verify_proc_1_.get(), server_.get(), &verify_root)); // User 2 should still verify successfully through the E root. - EXPECT_EQ(net::OK, Verify(verify_proc_2_.get(), server.get(), &verify_root)); + EXPECT_EQ(net::OK, Verify(verify_proc_2_.get(), server_.get(), &verify_root)); EXPECT_EQ("CN=E Root CA - Multi-root", verify_root); // Delete E root. EXPECT_TRUE(db_2_->DeleteCertAndKey(root_2_[0].get())); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_default_.get(), server.get(), &verify_root)); + Verify(verify_proc_default_.get(), server_.get(), &verify_root)); // User 1 should still fail to verify. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_1_.get(), server.get(), &verify_root)); + Verify(verify_proc_1_.get(), server_.get(), &verify_root)); // User 2 should now fail to verify. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_2_.get(), server.get(), &verify_root)); + Verify(verify_proc_2_.get(), server_.get(), &verify_root)); } // Test that roots specified through additional_trust_anchors are trusted for @@ -194,85 +218,71 @@ EXPECT_TRUE(verify_proc_default_->SupportsAdditionalTrustAnchors()); EXPECT_TRUE(verify_proc_1_->SupportsAdditionalTrustAnchors()); - scoped_refptr<net::X509Certificate> server = certs_1_[0]; std::string verify_root; net::CertificateList additional_trust_anchors; + scoped_refptr<net::X509Certificate> d_root_ca = + net::x509_util::CreateX509CertificateFromCERTCertificate( + certs_1_.back().get()); + ASSERT_TRUE(d_root_ca); // Before either of the root certs have been trusted, all verifications should // fail with CERT_AUTHORITY_INVALID. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, VerifyWithAdditionalTrustAnchors(verify_proc_default_.get(), additional_trust_anchors, - server.get(), - &verify_root)); + server_.get(), &verify_root)); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, VerifyWithAdditionalTrustAnchors(verify_proc_1_.get(), additional_trust_anchors, - server.get(), - &verify_root)); + server_.get(), &verify_root)); // Use D Root CA as additional trust anchor. Verifications should succeed now. - additional_trust_anchors.push_back(root_1_[0]); - EXPECT_EQ(net::OK, - VerifyWithAdditionalTrustAnchors(verify_proc_default_.get(), - additional_trust_anchors, - server.get(), - &verify_root)); + additional_trust_anchors.push_back(d_root_ca); + EXPECT_EQ(net::OK, VerifyWithAdditionalTrustAnchors( + verify_proc_default_.get(), additional_trust_anchors, + server_.get(), &verify_root)); EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); - EXPECT_EQ(net::OK, - VerifyWithAdditionalTrustAnchors(verify_proc_1_.get(), - additional_trust_anchors, - server.get(), - &verify_root)); + EXPECT_EQ(net::OK, VerifyWithAdditionalTrustAnchors( + verify_proc_1_.get(), additional_trust_anchors, + server_.get(), &verify_root)); EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); // User 2 should still fail. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, VerifyWithAdditionalTrustAnchors(verify_proc_2_.get(), net::CertificateList(), - server.get(), - &verify_root)); + server_.get(), &verify_root)); // Without additional trust anchors, verification should fail again. additional_trust_anchors.clear(); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, VerifyWithAdditionalTrustAnchors(verify_proc_default_.get(), additional_trust_anchors, - server.get(), - &verify_root)); + server_.get(), &verify_root)); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, VerifyWithAdditionalTrustAnchors(verify_proc_1_.get(), additional_trust_anchors, - server.get(), - &verify_root)); + server_.get(), &verify_root)); // Import and trust the D Root CA for user 2. - net::CertificateList roots; - roots.push_back(root_1_[0]); net::NSSCertDatabase::ImportCertFailureList failed; - EXPECT_TRUE( - db_2_->ImportCACerts(roots, net::NSSCertDatabase::TRUSTED_SSL, &failed)); + EXPECT_TRUE(db_2_->ImportCACerts(root_1_, net::NSSCertDatabase::TRUSTED_SSL, + &failed)); EXPECT_EQ(0U, failed.size()); // Use D Root CA as additional trust anchor. Verifications should still // succeed even if the cert is trusted by a different profile. - additional_trust_anchors.push_back(root_1_[0]); - EXPECT_EQ(net::OK, - VerifyWithAdditionalTrustAnchors(verify_proc_default_.get(), - additional_trust_anchors, - server.get(), - &verify_root)); + additional_trust_anchors.push_back(d_root_ca); + EXPECT_EQ(net::OK, VerifyWithAdditionalTrustAnchors( + verify_proc_default_.get(), additional_trust_anchors, + server_.get(), &verify_root)); EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); - EXPECT_EQ(net::OK, - VerifyWithAdditionalTrustAnchors(verify_proc_1_.get(), - additional_trust_anchors, - server.get(), - &verify_root)); + EXPECT_EQ(net::OK, VerifyWithAdditionalTrustAnchors( + verify_proc_1_.get(), additional_trust_anchors, + server_.get(), &verify_root)); EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); - EXPECT_EQ(net::OK, - VerifyWithAdditionalTrustAnchors(verify_proc_2_.get(), - additional_trust_anchors, - server.get(), - &verify_root)); + EXPECT_EQ(net::OK, VerifyWithAdditionalTrustAnchors( + verify_proc_2_.get(), additional_trust_anchors, + server_.get(), &verify_root)); EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); } @@ -294,18 +304,17 @@ << " trust_bitmask: " << trust_bitmask << " test_order: " << test_order; - scoped_refptr<net::X509Certificate> server = certs_1_[0]; std::string verify_root; if (verify_first) { // Before either of the root certs have been trusted, all verifications // should fail with CERT_AUTHORITY_INVALID. EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_default_.get(), server.get(), &verify_root)); + Verify(verify_proc_default_.get(), server_.get(), &verify_root)); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_1_.get(), server.get(), &verify_root)); + Verify(verify_proc_1_.get(), server_.get(), &verify_root)); EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_2_.get(), server.get(), &verify_root)); + Verify(verify_proc_2_.get(), server_.get(), &verify_root)); } int expected_user1_result = net::ERR_CERT_AUTHORITY_INVALID; @@ -320,7 +329,7 @@ EXPECT_EQ(0U, failed.size()); for (size_t i = 0; i < failed.size(); ++i) { LOG(ERROR) << "import fail " << failed[i].net_error << " for " - << failed[i].certificate->subject().GetDisplayName(); + << failed[i].certificate->subjectName; } } @@ -333,7 +342,7 @@ EXPECT_EQ(0U, failed.size()); for (size_t i = 0; i < failed.size(); ++i) { LOG(ERROR) << "import fail " << failed[i].net_error << " for " - << failed[i].certificate->subject().GetDisplayName(); + << failed[i].certificate->subjectName; } } @@ -348,17 +357,17 @@ // Default verifier should always fail. EXPECT_EQ( net::ERR_CERT_AUTHORITY_INVALID, - Verify(verify_proc_default_.get(), server.get(), &verify_root)); + Verify(verify_proc_default_.get(), server_.get(), &verify_root)); break; case '1': EXPECT_EQ(expected_user1_result, - Verify(verify_proc_1_.get(), server.get(), &verify_root)); + Verify(verify_proc_1_.get(), server_.get(), &verify_root)); if (expected_user1_result == net::OK) EXPECT_EQ("CN=D Root CA - Multi-root", verify_root); break; case '2': EXPECT_EQ(expected_user2_result, - Verify(verify_proc_2_.get(), server.get(), &verify_root)); + Verify(verify_proc_2_.get(), server_.get(), &verify_root)); if (expected_user2_result == net::OK) EXPECT_EQ("CN=E Root CA - Multi-root", verify_root); break;
diff --git a/chrome/browser/chromeos/net/client_cert_filter_chromeos.cc b/chrome/browser/chromeos/net/client_cert_filter_chromeos.cc index 3e890712..30db4c4 100644 --- a/chrome/browser/chromeos/net/client_cert_filter_chromeos.cc +++ b/chrome/browser/chromeos/net/client_cert_filter_chromeos.cc
@@ -8,7 +8,6 @@ #include "base/bind.h" #include "crypto/nss_util_internal.h" -#include "net/cert/x509_certificate.h" namespace chromeos { @@ -55,9 +54,8 @@ return false; } -bool ClientCertFilterChromeOS::IsCertAllowed( - const scoped_refptr<net::X509Certificate>& cert) const { - return nss_profile_filter_.IsCertAllowed(cert->os_cert_handle()); +bool ClientCertFilterChromeOS::IsCertAllowed(CERTCertificate* cert) const { + return nss_profile_filter_.IsCertAllowed(cert); } void ClientCertFilterChromeOS::GotSystemSlot(
diff --git a/chrome/browser/chromeos/net/client_cert_filter_chromeos.h b/chrome/browser/chromeos/net/client_cert_filter_chromeos.h index b39d652..7344de33 100644 --- a/chrome/browser/chromeos/net/client_cert_filter_chromeos.h +++ b/chrome/browser/chromeos/net/client_cert_filter_chromeos.h
@@ -29,8 +29,7 @@ // ClientCertStoreChromeOS::CertFilter: bool Init(const base::Closure& callback) override; - bool IsCertAllowed( - const scoped_refptr<net::X509Certificate>& cert) const override; + bool IsCertAllowed(CERTCertificate* cert) const override; private: // Called back if the system slot was retrieved asynchronously. Continues the
diff --git a/chrome/browser/chromeos/net/client_cert_store_chromeos.cc b/chrome/browser/chromeos/net/client_cert_store_chromeos.cc index 05d577ed..b0f9a54 100644 --- a/chrome/browser/chromeos/net/client_cert_store_chromeos.cc +++ b/chrome/browser/chromeos/net/client_cert_store_chromeos.cc
@@ -23,24 +23,6 @@ namespace chromeos { -namespace { - -class CertNotAllowedPredicate { - public: - explicit CertNotAllowedPredicate( - const ClientCertStoreChromeOS::CertFilter* filter) - : filter_(filter) {} - bool operator()( - const std::unique_ptr<net::ClientCertIdentity>& identity) const { - return !filter_->IsCertAllowed(identity->certificate()); - } - - private: - const ClientCertStoreChromeOS::CertFilter* const filter_; -}; - -} // namespace - ClientCertStoreChromeOS::ClientCertStoreChromeOS( std::unique_ptr<CertificateProvider> cert_provider, std::unique_ptr<CertFilter> cert_filter, @@ -104,12 +86,10 @@ net::ClientCertIdentityList additional_certs) { net::ClientCertIdentityList client_certs; net::ClientCertStoreNSS::GetPlatformCertsOnWorkerThread( - std::move(password_delegate), &client_certs); - - client_certs.erase( - std::remove_if(client_certs.begin(), client_certs.end(), - CertNotAllowedPredicate(cert_filter_.get())), - client_certs.end()); + std::move(password_delegate), + base::BindRepeating(&CertFilter::IsCertAllowed, + base::Unretained(cert_filter_.get())), + &client_certs); client_certs.reserve(client_certs.size() + additional_certs.size()); for (std::unique_ptr<net::ClientCertIdentity>& cert : additional_certs)
diff --git a/chrome/browser/chromeos/net/client_cert_store_chromeos.h b/chrome/browser/chromeos/net/client_cert_store_chromeos.h index bd40960c..f857469 100644 --- a/chrome/browser/chromeos/net/client_cert_store_chromeos.h +++ b/chrome/browser/chromeos/net/client_cert_store_chromeos.h
@@ -11,7 +11,6 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "net/cert/x509_certificate.h" #include "net/ssl/client_cert_store_nss.h" namespace chromeos { @@ -36,8 +35,7 @@ // Returns true if |cert| is allowed to be used as a client certificate // (e.g. for a certain browser context or user). // This is only called once initialization is finished, see Init(). - virtual bool IsCertAllowed( - const scoped_refptr<net::X509Certificate>& cert) const = 0; + virtual bool IsCertAllowed(CERTCertificate* cert) const = 0; }; // This ClientCertStore will return client certs from NSS certificate
diff --git a/chrome/browser/chromeos/net/client_cert_store_chromeos_unittest.cc b/chrome/browser/chromeos/net/client_cert_store_chromeos_unittest.cc index 668d05b..361b15f 100644 --- a/chrome/browser/chromeos/net/client_cert_store_chromeos_unittest.cc +++ b/chrome/browser/chromeos/net/client_cert_store_chromeos_unittest.cc
@@ -19,6 +19,7 @@ #include "chrome/browser/chromeos/certificate_provider/certificate_provider.h" #include "crypto/scoped_test_nss_db.h" #include "net/cert/x509_certificate.h" +#include "net/cert/x509_util_nss.h" #include "net/ssl/client_cert_identity_test_util.h" #include "net/ssl/ssl_cert_request_info.h" #include "net/test/cert_test_util.h" @@ -49,9 +50,9 @@ return false; } - bool IsCertAllowed( - const scoped_refptr<net::X509Certificate>& cert) const override { - if (not_allowed_cert_.get() && cert->Equals(not_allowed_cert_.get())) + bool IsCertAllowed(CERTCertificate* cert) const override { + if (not_allowed_cert_.get() && + net::x509_util::IsSameCertificate(cert, not_allowed_cert_.get())) return false; return true; } @@ -64,15 +65,15 @@ pending_callback_.Reset(); } - void SetNotAllowedCert(scoped_refptr<net::X509Certificate> cert) { - not_allowed_cert_ = cert; + void SetNotAllowedCert(net::ScopedCERTCertificate cert) { + not_allowed_cert_ = std::move(cert); } private: bool init_finished_; bool init_called_ = false; base::Closure pending_callback_; - scoped_refptr<net::X509Certificate> not_allowed_cert_; + net::ScopedCERTCertificate not_allowed_cert_; }; void SaveIdentitiesAndQuitCallback(net::ClientCertIdentityList* out_identities, @@ -91,9 +92,11 @@ scoped_refptr<net::X509Certificate> ImportCertToSlot( const std::string& cert_filename, const std::string& key_filename, - PK11SlotInfo* slot) { - return net::ImportClientCertAndKeyFromFile( - net::GetTestCertsDirectory(), cert_filename, key_filename, slot); + PK11SlotInfo* slot, + net::ScopedCERTCertificate* nss_cert) { + return net::ImportClientCertAndKeyFromFile(net::GetTestCertsDirectory(), + cert_filename, key_filename, + slot, nss_cert); } private: @@ -112,8 +115,9 @@ nullptr /* no additional provider */, base::WrapUnique(cert_filter), ClientCertStoreChromeOS::PasswordDelegateFactory()); - scoped_refptr<net::X509Certificate> cert_1( - ImportCertToSlot("client_1.pem", "client_1.pk8", test_db.slot())); + net::ScopedCERTCertificate nss_cert_1; + scoped_refptr<net::X509Certificate> cert_1(ImportCertToSlot( + "client_1.pem", "client_1.pk8", test_db.slot(), &nss_cert_1)); ASSERT_TRUE(cert_1.get()); // Request any client certificate, which is expected to match client_1. @@ -151,8 +155,9 @@ base::WrapUnique(new TestCertFilter(true /* init synchronously */)), ClientCertStoreChromeOS::PasswordDelegateFactory()); - scoped_refptr<net::X509Certificate> cert_1( - ImportCertToSlot("client_1.pem", "client_1.pk8", test_db.slot())); + net::ScopedCERTCertificate nss_cert_1; + scoped_refptr<net::X509Certificate> cert_1(ImportCertToSlot( + "client_1.pem", "client_1.pk8", test_db.slot(), &nss_cert_1)); ASSERT_TRUE(cert_1.get()); scoped_refptr<net::SSLCertRequestInfo> request_all( @@ -178,11 +183,13 @@ nullptr /* no additional provider */, base::WrapUnique(cert_filter), ClientCertStoreChromeOS::PasswordDelegateFactory()); - scoped_refptr<net::X509Certificate> cert_1( - ImportCertToSlot("client_1.pem", "client_1.pk8", test_db.slot())); + net::ScopedCERTCertificate nss_cert_1; + scoped_refptr<net::X509Certificate> cert_1(ImportCertToSlot( + "client_1.pem", "client_1.pk8", test_db.slot(), &nss_cert_1)); ASSERT_TRUE(cert_1.get()); - scoped_refptr<net::X509Certificate> cert_2( - ImportCertToSlot("client_2.pem", "client_2.pk8", test_db.slot())); + net::ScopedCERTCertificate nss_cert_2; + scoped_refptr<net::X509Certificate> cert_2(ImportCertToSlot( + "client_2.pem", "client_2.pk8", test_db.slot(), &nss_cert_2)); ASSERT_TRUE(cert_2.get()); scoped_refptr<net::SSLCertRequestInfo> request_all( @@ -190,7 +197,8 @@ { base::RunLoop run_loop; - cert_filter->SetNotAllowedCert(cert_2); + cert_filter->SetNotAllowedCert( + net::x509_util::DupCERTCertificate(nss_cert_2.get())); net::ClientCertIdentityList selected_identities; store.GetClientCerts( *request_all, base::Bind(SaveIdentitiesAndQuitCallback, @@ -203,7 +211,8 @@ { base::RunLoop run_loop; - cert_filter->SetNotAllowedCert(cert_1); + cert_filter->SetNotAllowedCert( + net::x509_util::DupCERTCertificate(nss_cert_1.get())); net::ClientCertIdentityList selected_identities; store.GetClientCerts( *request_all, base::Bind(SaveIdentitiesAndQuitCallback, @@ -228,11 +237,13 @@ base::WrapUnique(cert_filter), ClientCertStoreChromeOS::PasswordDelegateFactory()); - scoped_refptr<net::X509Certificate> cert_1( - ImportCertToSlot("client_1.pem", "client_1.pk8", test_db.slot())); + net::ScopedCERTCertificate nss_cert_1; + scoped_refptr<net::X509Certificate> cert_1(ImportCertToSlot( + "client_1.pem", "client_1.pk8", test_db.slot(), &nss_cert_1)); ASSERT_TRUE(cert_1.get()); - scoped_refptr<net::X509Certificate> cert_2( - ImportCertToSlot("client_2.pem", "client_2.pk8", test_db.slot())); + net::ScopedCERTCertificate nss_cert_2; + scoped_refptr<net::X509Certificate> cert_2(ImportCertToSlot( + "client_2.pem", "client_2.pk8", test_db.slot(), &nss_cert_2)); ASSERT_TRUE(cert_2.get()); std::vector<std::string> authority_1(
diff --git a/chrome/browser/chromeos/options/vpn_config_view.cc b/chrome/browser/chromeos/options/vpn_config_view.cc index d0635f6..ee3ed01 100644 --- a/chrome/browser/chromeos/options/vpn_config_view.cc +++ b/chrome/browser/chromeos/options/vpn_config_view.cc
@@ -31,6 +31,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/models/combobox_model.h" #include "ui/events/event.h" +#include "ui/views/border.h" #include "ui/views/controls/button/checkbox.h" #include "ui/views/controls/combobox/combobox.h" #include "ui/views/controls/label.h" @@ -236,7 +237,6 @@ enable_group_name_(false), user_passphrase_required_(false), title_(0), - layout_(NULL), server_textfield_(NULL), service_text_(NULL), service_textfield_(NULL), @@ -495,6 +495,10 @@ } void VPNConfigView::Init() { + const views::LayoutProvider* provider = views::LayoutProvider::Get(); + SetBorder(views::CreateEmptyBorder( + provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS))); + const NetworkState* vpn = NULL; if (!service_path_.empty()) { vpn = NetworkHandler::Get()->network_state_handler()-> @@ -502,13 +506,12 @@ DCHECK(vpn && vpn->type() == shill::kTypeVPN); } - layout_ = views::GridLayout::CreatePanel(this); - views::LayoutProvider* provider = views::LayoutProvider::Get(); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // Observer any changes to the certificate list. CertLibrary::Get()->AddObserver(this); - views::ColumnSet* column_set = layout_->AddColumnSet(0); + views::ColumnSet* column_set = layout->AddColumnSet(0); // Label. column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 1, views::GridLayout::USE_PREF, 0, 0); @@ -538,15 +541,15 @@ enable_group_name_ = true; // Server label and input. - layout_->StartRow(0, 0); + layout->StartRow(0, 0); views::View* server_label = new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVER_HOSTNAME)); - layout_->AddView(server_label); + layout->AddView(server_label); server_textfield_ = new views::Textfield(); server_textfield_->set_controller(this); - layout_->AddView(server_textfield_); - layout_->AddPaddingRow( + layout->AddView(server_textfield_); + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); if (!service_path_.empty()) { server_label->SetEnabled(false); @@ -554,26 +557,26 @@ } // Service label and name or input. - layout_->StartRow(0, 0); - layout_->AddView(new views::Label(l10n_util::GetStringUTF16( + layout->StartRow(0, 0); + layout->AddView(new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVICE_NAME))); if (service_path_.empty()) { service_textfield_ = new views::Textfield(); service_textfield_->set_controller(this); - layout_->AddView(service_textfield_); + layout->AddView(service_textfield_); service_text_ = NULL; } else { service_text_ = new views::Label(); service_text_->SetHorizontalAlignment(gfx::ALIGN_LEFT); - layout_->AddView(service_text_); + layout->AddView(service_text_); service_textfield_ = NULL; } - layout_->AddPaddingRow( + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // Provider type label and select. - layout_->StartRow(0, 0); - layout_->AddView(new views::Label(l10n_util::GetStringUTF16( + layout->StartRow(0, 0); + layout->AddView(new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_PROVIDER_TYPE))); if (service_path_.empty()) { provider_type_combobox_model_.reset( @@ -581,131 +584,129 @@ provider_type_combobox_ = new views::Combobox( provider_type_combobox_model_.get()); provider_type_combobox_->set_listener(this); - layout_->AddView(provider_type_combobox_); + layout->AddView(provider_type_combobox_); provider_type_text_label_ = NULL; } else { provider_type_text_label_ = new views::Label(); provider_type_text_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); - layout_->AddView(provider_type_text_label_); + layout->AddView(provider_type_text_label_); provider_type_combobox_ = NULL; } - layout_->AddPaddingRow( + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // PSK passphrase label, input and visible button. - layout_->StartRow(0, 0); + layout->StartRow(0, 0); psk_passphrase_label_ = new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_PSK_PASSPHRASE)); - layout_->AddView(psk_passphrase_label_); + layout->AddView(psk_passphrase_label_); psk_passphrase_textfield_ = new PassphraseTextfield(); psk_passphrase_textfield_->set_controller(this); - layout_->AddView(psk_passphrase_textfield_); - layout_->AddView( - new ControlledSettingIndicatorView(psk_passphrase_ui_data_)); - layout_->AddPaddingRow( + layout->AddView(psk_passphrase_textfield_); + layout->AddView(new ControlledSettingIndicatorView(psk_passphrase_ui_data_)); + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // Server CA certificate if (service_path_.empty()) { - layout_->StartRow(0, 0); + layout->StartRow(0, 0); server_ca_cert_label_ = new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_SERVER_CA)); - layout_->AddView(server_ca_cert_label_); + layout->AddView(server_ca_cert_label_); server_ca_cert_combobox_model_.reset( new internal::VpnServerCACertComboboxModel()); server_ca_cert_combobox_ = new views::Combobox( server_ca_cert_combobox_model_.get()); - layout_->AddView(server_ca_cert_combobox_); - layout_->AddView(new ControlledSettingIndicatorView(ca_cert_ui_data_)); - layout_->AddPaddingRow(0, provider->GetDistanceMetric( - views::DISTANCE_RELATED_CONTROL_VERTICAL)); + layout->AddView(server_ca_cert_combobox_); + layout->AddView(new ControlledSettingIndicatorView(ca_cert_ui_data_)); + layout->AddPaddingRow(0, provider->GetDistanceMetric( + views::DISTANCE_RELATED_CONTROL_VERTICAL)); } else { server_ca_cert_label_ = NULL; server_ca_cert_combobox_ = NULL; } // User certificate label and input. - layout_->StartRow(0, 0); + layout->StartRow(0, 0); user_cert_label_ = new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USER_CERT)); - layout_->AddView(user_cert_label_); + layout->AddView(user_cert_label_); user_cert_combobox_model_.reset( new internal::VpnUserCertComboboxModel()); user_cert_combobox_ = new views::Combobox(user_cert_combobox_model_.get()); user_cert_combobox_->set_listener(this); - layout_->AddView(user_cert_combobox_); - layout_->AddView(new ControlledSettingIndicatorView(user_cert_ui_data_)); - layout_->AddPaddingRow( + layout->AddView(user_cert_combobox_); + layout->AddView(new ControlledSettingIndicatorView(user_cert_ui_data_)); + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // Username label and input. - layout_->StartRow(0, 0); - layout_->AddView(new views::Label(l10n_util::GetStringUTF16( + layout->StartRow(0, 0); + layout->AddView(new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USERNAME))); username_textfield_ = new views::Textfield(); username_textfield_->set_controller(this); username_textfield_->SetEnabled(username_ui_data_.IsEditable()); - layout_->AddView(username_textfield_); - layout_->AddView(new ControlledSettingIndicatorView(username_ui_data_)); - layout_->AddPaddingRow( + layout->AddView(username_textfield_); + layout->AddView(new ControlledSettingIndicatorView(username_ui_data_)); + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // User passphrase label, input and visble button. - layout_->StartRow(0, 0); - layout_->AddView(new views::Label(l10n_util::GetStringUTF16( + layout->StartRow(0, 0); + layout->AddView(new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USER_PASSPHRASE))); user_passphrase_textfield_ = new PassphraseTextfield(); user_passphrase_textfield_->set_controller(this); user_passphrase_textfield_->SetEnabled(user_passphrase_ui_data_.IsEditable()); - layout_->AddView(user_passphrase_textfield_); - layout_->AddView( - new ControlledSettingIndicatorView(user_passphrase_ui_data_)); - layout_->AddPaddingRow( + layout->AddView(user_passphrase_textfield_); + layout->AddView(new ControlledSettingIndicatorView(user_passphrase_ui_data_)); + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // OTP label and input. - layout_->StartRow(0, 0); + layout->StartRow(0, 0); otp_label_ = new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_OTP)); - layout_->AddView(otp_label_); + layout->AddView(otp_label_); otp_textfield_ = new views::Textfield(); otp_textfield_->set_controller(this); - layout_->AddView(otp_textfield_); - layout_->AddPaddingRow( + layout->AddView(otp_textfield_); + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // Group Name label and input. - layout_->StartRow(0, 0); + layout->StartRow(0, 0); group_name_label_ = new views::Label(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_GROUP_NAME)); - layout_->AddView(group_name_label_); + layout->AddView(group_name_label_); group_name_textfield_ = new views::Textfield(); group_name_textfield_->set_controller(this); - layout_->AddView(group_name_textfield_); - layout_->AddView(new ControlledSettingIndicatorView(group_name_ui_data_)); - layout_->AddPaddingRow( + layout->AddView(group_name_textfield_); + layout->AddView(new ControlledSettingIndicatorView(group_name_ui_data_)); + layout->AddPaddingRow( 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)); // Save credentials - layout_->StartRow(0, 0); + layout->StartRow(0, 0); save_credentials_checkbox_ = new views::Checkbox( l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SAVE_CREDENTIALS)); save_credentials_checkbox_->SetEnabled( save_credentials_ui_data_.IsEditable()); - layout_->SkipColumns(1); - layout_->AddView(save_credentials_checkbox_); - layout_->AddView( + layout->SkipColumns(1); + layout->AddView(save_credentials_checkbox_); + layout->AddView( new ControlledSettingIndicatorView(save_credentials_ui_data_)); // Error label. - layout_->StartRow(0, 0); - layout_->SkipColumns(1); + layout->StartRow(0, 0); + layout->SkipColumns(1); error_label_ = new views::Label(); error_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); error_label_->SetEnabledColor(SK_ColorRED); - layout_->AddView(error_label_); + layout->AddView(error_label_); // Set or hide the UI, update comboboxes and error labels. Refresh();
diff --git a/chrome/browser/chromeos/options/vpn_config_view.h b/chrome/browser/chromeos/options/vpn_config_view.h index b583a731..03d9b4a 100644 --- a/chrome/browser/chromeos/options/vpn_config_view.h +++ b/chrome/browser/chromeos/options/vpn_config_view.h
@@ -26,7 +26,6 @@ namespace views { class Checkbox; -class GridLayout; class Label; } @@ -159,7 +158,6 @@ int title_; - views::GridLayout* layout_; views::Textfield* server_textfield_; views::Label* service_text_; views::Textfield* service_textfield_;
diff --git a/chrome/browser/chromeos/options/wifi_config_view.cc b/chrome/browser/chromeos/options/wifi_config_view.cc index e537dfc..dcea9564 100644 --- a/chrome/browser/chromeos/options/wifi_config_view.cc +++ b/chrome/browser/chromeos/options/wifi_config_view.cc
@@ -36,6 +36,7 @@ #include "ui/base/material_design/material_design_controller.h" #include "ui/base/resource/resource_bundle.h" #include "ui/events/event.h" +#include "ui/views/border.h" #include "ui/views/controls/button/checkbox.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/combobox/combobox.h" @@ -904,6 +905,10 @@ } void WifiConfigView::Init(bool show_8021x) { + views::LayoutProvider* provider = views::LayoutProvider::Get(); + SetBorder(views::CreateEmptyBorder( + provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS))); + const NetworkState* network = GetNetworkState(); if (network) { if (network->type() == shill::kTypeWifi) { @@ -938,8 +943,7 @@ ParseUIProperty(&passphrase_ui_data_, network, ::onc::wifi::kPassphrase); } - views::GridLayout* layout = views::GridLayout::CreatePanel(this); - views::LayoutProvider* provider = views::LayoutProvider::Get(); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); const int column_view_set_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
diff --git a/chrome/browser/chromeos/options/wimax_config_view.cc b/chrome/browser/chromeos/options/wimax_config_view.cc index 00c0e925..26ef1e5 100644 --- a/chrome/browser/chromeos/options/wimax_config_view.cc +++ b/chrome/browser/chromeos/options/wimax_config_view.cc
@@ -27,6 +27,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/events/event.h" +#include "ui/views/border.h" #include "ui/views/controls/button/checkbox.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/label.h" @@ -196,6 +197,10 @@ } void WimaxConfigView::Init() { + const views::LayoutProvider* provider = views::LayoutProvider::Get(); + SetBorder(views::CreateEmptyBorder( + provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS))); + const NetworkState* wimax = NetworkHandler::Get()->network_state_handler()-> GetNetworkState(service_path_); DCHECK(wimax && wimax->type() == shill::kTypeWimax); @@ -207,8 +212,7 @@ WifiConfigView::ParseUIProperty( &passphrase_ui_data_, wimax, ::onc::wifi::kPassphrase); - views::GridLayout* layout = views::GridLayout::CreatePanel(this); - views::LayoutProvider* provider = views::LayoutProvider::Get(); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); const int column_view_set_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
diff --git a/chrome/browser/chromeos/policy/recommendation_restorer.h b/chrome/browser/chromeos/policy/recommendation_restorer.h index 79749cf1..9db62ea2 100644 --- a/chrome/browser/chromeos/policy/recommendation_restorer.h +++ b/chrome/browser/chromeos/policy/recommendation_restorer.h
@@ -7,7 +7,6 @@ #include <string> -#include "base/compiler_specific.h" #include "base/macros.h" #include "base/timer/timer.h" #include "components/keyed_service/core/keyed_service.h"
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc index 0c58744..78cd91a6 100644 --- a/chrome/browser/chromeos/preferences.cc +++ b/chrome/browser/chromeos/preferences.cc
@@ -179,26 +179,29 @@ registry->RegisterBooleanPref(prefs::kLabsMediaplayerEnabled, false); registry->RegisterBooleanPref(prefs::kLabsAdvancedFilesystemEnabled, false); - // TODO(jamescook): Move ownership and registration into ash. + // TODO(jamescook): Move ownership and registration into ash. This will need + // changes to policy::RecommendationRestorer which requires that prefs are + // available immediately during startup. registry->RegisterBooleanPref( ash::prefs::kAccessibilityStickyKeysEnabled, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( ash::prefs::kAccessibilityLargeCursorEnabled, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF | PrefRegistry::PUBLIC); registry->RegisterIntegerPref(ash::prefs::kAccessibilityLargeCursorDipSize, - ash::kDefaultLargeCursorSize); + ash::kDefaultLargeCursorSize, + PrefRegistry::PUBLIC); registry->RegisterBooleanPref(ash::prefs::kAccessibilitySpokenFeedbackEnabled, false); registry->RegisterBooleanPref( ash::prefs::kAccessibilityHighContrastEnabled, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF | PrefRegistry::PUBLIC); registry->RegisterBooleanPref( ash::prefs::kAccessibilityScreenMagnifierCenterFocus, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( ash::prefs::kAccessibilityScreenMagnifierEnabled, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF | PrefRegistry::PUBLIC); registry->RegisterIntegerPref( ash::prefs::kAccessibilityScreenMagnifierType, ash::MAGNIFIER_FULL, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
diff --git a/chrome/browser/chromeos/prefs/pref_connector_service.cc b/chrome/browser/chromeos/prefs/pref_connector_service.cc index 61077d7c..adc464f 100644 --- a/chrome/browser/chromeos/prefs/pref_connector_service.cc +++ b/chrome/browser/chromeos/prefs/pref_connector_service.cc
@@ -20,6 +20,16 @@ AshPrefConnector::~AshPrefConnector() = default; +void AshPrefConnector::GetPrefStoreConnectorForSigninScreen( + prefs::mojom::PrefStoreConnectorRequest request) { + // The signin screen profile is incognito and is not associated with a + // specific user. + Profile* profile = chromeos::ProfileHelper::Get()->GetSigninProfile(); + DCHECK(profile->IsOffTheRecord()); + content::BrowserContext::GetConnectorFor(profile)->BindInterface( + prefs::mojom::kServiceName, std::move(request)); +} + void AshPrefConnector::GetPrefStoreConnectorForUser( const AccountId& account_id, prefs::mojom::PrefStoreConnectorRequest request) {
diff --git a/chrome/browser/chromeos/prefs/pref_connector_service.h b/chrome/browser/chromeos/prefs/pref_connector_service.h index c9ec817..cd3f35a 100644 --- a/chrome/browser/chromeos/prefs/pref_connector_service.h +++ b/chrome/browser/chromeos/prefs/pref_connector_service.h
@@ -29,6 +29,8 @@ private: // ash::mojom::PrefConnector: + void GetPrefStoreConnectorForSigninScreen( + prefs::mojom::PrefStoreConnectorRequest request) override; void GetPrefStoreConnectorForUser( const AccountId& account_id, prefs::mojom::PrefStoreConnectorRequest request) override;
diff --git a/chrome/browser/chromeos/printing/synced_printers_manager.cc b/chrome/browser/chromeos/printing/synced_printers_manager.cc index e9286ac..2a2b8ea 100644 --- a/chrome/browser/chromeos/printing/synced_printers_manager.cc +++ b/chrome/browser/chromeos/printing/synced_printers_manager.cc
@@ -32,6 +32,12 @@ namespace { +// Enumeration values for NativePrintersBulkAccessMode. +constexpr int kBlacklistAccess = 0; +// TODO(crbug.com/758680): Parse the access policy. +// constexpr int kWhitelistAccess = 1; +// constexpr int kAllAccess = 2; + class SyncedPrintersManagerImpl : public SyncedPrintersManager { public: SyncedPrintersManagerImpl(Profile* profile, @@ -238,6 +244,11 @@ registry->RegisterListPref(prefs::kPrintingDevices, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterListPref(prefs::kRecommendedNativePrinters); + // Default value is blacklist. + registry->RegisterIntegerPref(prefs::kRecommendedNativePrintersAccessMode, + kBlacklistAccess); + registry->RegisterListPref(prefs::kRecommendedNativePrintersBlacklist); + registry->RegisterListPref(prefs::kRecommendedNativePrintersWhitelist); } // static
diff --git a/chrome/browser/chromeos/profiles/multiprofiles_session_aborted_dialog.cc b/chrome/browser/chromeos/profiles/multiprofiles_session_aborted_dialog.cc index 3ed1efe..8d742ca 100644 --- a/chrome/browser/chromeos/profiles/multiprofiles_session_aborted_dialog.cc +++ b/chrome/browser/chromeos/profiles/multiprofiles_session_aborted_dialog.cc
@@ -118,8 +118,7 @@ constexpr int kTopInset = 10; constexpr int kOtherInset = 40; // Create the views and layout manager and set them up. - views::GridLayout* grid_layout = new views::GridLayout(this); - SetLayoutManager(grid_layout); + views::GridLayout* grid_layout = views::GridLayout::CreateAndInstall(this); SetBorder(views::CreateEmptyBorder(kTopInset, kOtherInset, kOtherInset, kOtherInset)); @@ -148,7 +147,6 @@ grid_layout->StartRow(0, 0); grid_layout->AddView(label); - SetLayoutManager(grid_layout); Layout(); }
diff --git a/chrome/browser/chromeos/system/input_device_settings.cc b/chrome/browser/chromeos/system/input_device_settings.cc index 79ca7a77..04667a6 100644 --- a/chrome/browser/chromeos/system/input_device_settings.cc +++ b/chrome/browser/chromeos/system/input_device_settings.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/chromeos/system/input_device_settings.h" +#include "ash/public/cpp/touchscreen_enabled_source.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" @@ -268,84 +269,72 @@ } // static -void InputDeviceSettings::RegisterPrefs(PrefRegistrySimple* registry) { - registry->RegisterBooleanPref(::prefs::kTouchscreenEnabledLocal, true); -} - -// static void InputDeviceSettings::RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref(::prefs::kTouchscreenEnabled, true); registry->RegisterBooleanPref(::prefs::kTouchpadEnabled, true); } void InputDeviceSettings::UpdateTouchDevicesStatusFromPrefs() { - UpdateTouchscreenStatusFromPrefs(); + UpdateTouchscreenEnabled(); - PrefService* user_prefs = GetActiveProfilePrefs(); - if (!user_prefs) + PrefService* pref_service = GetActiveProfilePrefs(); + if (!pref_service) return; const bool touchpad_status = - user_prefs->HasPrefPath(::prefs::kTouchpadEnabled) - ? user_prefs->GetBoolean(::prefs::kTouchpadEnabled) + pref_service->HasPrefPath(::prefs::kTouchpadEnabled) + ? pref_service->GetBoolean(::prefs::kTouchpadEnabled) : true; SetInternalTouchpadEnabled(touchpad_status); } -bool InputDeviceSettings::IsTouchscreenEnabledInPrefs( - bool use_local_state) const { - if (use_local_state) { - PrefService* local_state = g_browser_process->local_state(); - DCHECK(local_state); +bool InputDeviceSettings::GetTouchscreenEnabled( + ash::TouchscreenEnabledSource source) const { + if (source == ash::TouchscreenEnabledSource::GLOBAL) + return global_touchscreen_enabled_; - return local_state->HasPrefPath(::prefs::kTouchscreenEnabledLocal) - ? local_state->GetBoolean(::prefs::kTouchscreenEnabledLocal) - : true; - } else { - PrefService* user_prefs = GetActiveProfilePrefs(); - if (!user_prefs) - return true; + PrefService* pref_service = GetActiveProfilePrefs(); + if (!pref_service) + return true; - return user_prefs->HasPrefPath(::prefs::kTouchscreenEnabled) - ? user_prefs->GetBoolean(::prefs::kTouchscreenEnabled) - : true; - } + return pref_service->HasPrefPath(::prefs::kTouchscreenEnabled) + ? pref_service->GetBoolean(::prefs::kTouchscreenEnabled) + : true; } -void InputDeviceSettings::SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) { - if (use_local_state) { - PrefService* local_state = g_browser_process->local_state(); - DCHECK(local_state); - local_state->SetBoolean(::prefs::kTouchscreenEnabledLocal, enabled); +void InputDeviceSettings::SetTouchscreenEnabled( + bool enabled, + ash::TouchscreenEnabledSource source) { + if (source == ash::TouchscreenEnabledSource::GLOBAL) { + global_touchscreen_enabled_ = enabled; } else { - PrefService* user_prefs = GetActiveProfilePrefs(); - if (!user_prefs) - return; - - user_prefs->SetBoolean(::prefs::kTouchscreenEnabled, enabled); + PrefService* pref_service = GetActiveProfilePrefs(); + if (pref_service) + pref_service->SetBoolean(::prefs::kTouchscreenEnabled, enabled); } -} -void InputDeviceSettings::UpdateTouchscreenStatusFromPrefs() { - bool enabled_in_local_state = IsTouchscreenEnabledInPrefs(true); - bool enabled_in_user_prefs = IsTouchscreenEnabledInPrefs(false); - SetTouchscreensEnabled(enabled_in_local_state && enabled_in_user_prefs); + UpdateTouchscreenEnabled(); } void InputDeviceSettings::ToggleTouchpad() { - PrefService* user_prefs = GetActiveProfilePrefs(); - if (!user_prefs) + PrefService* pref_service = GetActiveProfilePrefs(); + if (!pref_service) return; const bool touchpad_status = - user_prefs->HasPrefPath(::prefs::kTouchpadEnabled) - ? user_prefs->GetBoolean(::prefs::kTouchpadEnabled) + pref_service->HasPrefPath(::prefs::kTouchpadEnabled) + ? pref_service->GetBoolean(::prefs::kTouchpadEnabled) : true; - user_prefs->SetBoolean(::prefs::kTouchpadEnabled, !touchpad_status); + pref_service->SetBoolean(::prefs::kTouchpadEnabled, !touchpad_status); SetInternalTouchpadEnabled(!touchpad_status); } +void InputDeviceSettings::UpdateTouchscreenEnabled() { + SetTouchscreensEnabled( + GetTouchscreenEnabled(ash::TouchscreenEnabledSource::GLOBAL) && + GetTouchscreenEnabled(ash::TouchscreenEnabledSource::USER_PREF)); +} + } // namespace system } // namespace chromeos
diff --git a/chrome/browser/chromeos/system/input_device_settings.h b/chrome/browser/chromeos/system/input_device_settings.h index 8d2ba81..bedc1ef 100644 --- a/chrome/browser/chromeos/system/input_device_settings.h +++ b/chrome/browser/chromeos/system/input_device_settings.h
@@ -11,6 +11,10 @@ class PrefRegistrySimple; +namespace ash { +enum class TouchscreenEnabledSource; +} // namespace ash + namespace chromeos { namespace system { @@ -130,9 +134,6 @@ // where other input devices like mouse are absent. static bool ForceKeyboardDrivenUINavigation(); - // Registers local state pref names for touchscreen status. - static void RegisterPrefs(PrefRegistrySimple* registry); - // Registers profile pref names for touchpad and touchscreen statuses. static void RegisterProfilePrefs(PrefRegistrySimple* registry); @@ -140,17 +141,16 @@ // preferences. void UpdateTouchDevicesStatusFromPrefs(); - // If |use_local_state| is true, returns the touchscreen status from local - // state, otherwise from user prefs. - bool IsTouchscreenEnabledInPrefs(bool use_local_state) const; + // Returns the current touchscreen enabled status as specified by |source|. + // Note that the actual state of the touchscreen device is automatically + // determined based on the requests of multiple sources. + bool GetTouchscreenEnabled(ash::TouchscreenEnabledSource source) const; - // Sets the status of touchscreen to |enabled| in prefs. If |use_local_state|, - // pref is set in local state, otherwise in user pref. - void SetTouchscreenEnabledInPrefs(bool enabled, bool use_local_state); - - // Updates the enabled/disabled status of the touchscreen from prefs. Enabled - // if both local state and user prefs are enabled, otherwise disabled. - void UpdateTouchscreenStatusFromPrefs(); + // Sets |source|'s requested touchscreen enabled status to |enabled|. Note + // that the actual state of the touchscreen device is automatically determined + // based on the requests of multiple sources. + void SetTouchscreenEnabled(bool enabled, + ash::TouchscreenEnabledSource source); // Toggles the status of touchpad between enabled and disabled. void ToggleTouchpad(); @@ -211,6 +211,14 @@ private: virtual void SetInternalTouchpadEnabled(bool enabled) {} virtual void SetTouchscreensEnabled(bool enabled) {} + + // Updates the actual enabled/disabled status of the touchscreen. Touchscreen + // is enabled if all the touchscreen enabled sources are enabled. + void UpdateTouchscreenEnabled(); + + // The touchscreen state which is associated with the global touchscreen + // enabled source. + bool global_touchscreen_enabled_ = false; }; } // namespace system
diff --git a/chrome/browser/chromeos/system/timezone_util.cc b/chrome/browser/chromeos/system/timezone_util.cc index c7facbb..31f6e890 100644 --- a/chrome/browser/chromeos/system/timezone_util.cc +++ b/chrome/browser/chromeos/system/timezone_util.cc
@@ -49,26 +49,27 @@ } }; -static base::LazyInstance<base::Lock>::Leaky - g_timezone_bundle_lock = LAZY_INSTANCE_INITIALIZER; +base::LazyInstance<base::Lock>::Leaky g_timezone_bundle_lock = + LAZY_INSTANCE_INITIALIZER; // Returns an exemplary city in the given timezone. base::string16 GetExemplarCity(const icu::TimeZone& zone) { - // TODO(jungshik): After upgrading to ICU 4.6, use U_ICUDATA_ZONE - static const char* zone_bundle_name = NULL; - // These will be leaked at the end. - static UResourceBundle *zone_bundle = NULL; - static UResourceBundle *zone_strings = NULL; + static UResourceBundle* zone_bundle = nullptr; + static UResourceBundle* zone_strings = nullptr; UErrorCode status = U_ZERO_ERROR; { + // TODO(jungshik): After upgrading to ICU 4.6, use U_ICUDATA_ZONE in + // ures_open(). base::AutoLock lock(g_timezone_bundle_lock.Get()); - if (zone_bundle == NULL) - zone_bundle = ures_open(zone_bundle_name, uloc_getDefault(), &status); + if (!zone_bundle) + zone_bundle = ures_open(nullptr, uloc_getDefault(), &status); - if (zone_strings == NULL) - zone_strings = ures_getByKey(zone_bundle, "zone_strings", NULL, &status); + if (!zone_strings) { + zone_strings = + ures_getByKey(zone_bundle, "zone_strings", nullptr, &status); + } } icu::UnicodeString zone_id; @@ -79,7 +80,7 @@ // Resource keys for timezones use ':' in place of '/'. base::ReplaceSubstringsAfterOffset(&zone_id_str, 0, "/", ":"); std::unique_ptr<UResourceBundle, UResClose> zone_item( - ures_getByKey(zone_strings, zone_id_str.c_str(), NULL, &status)); + ures_getByKey(zone_strings, zone_id_str.c_str(), nullptr, &status)); icu::UnicodeString city; if (!U_FAILURE(status)) { city = icu::ures_getUnicodeStringByKey(zone_item.get(), "ec", &status); @@ -154,23 +155,20 @@ namespace system { base::string16 GetCurrentTimezoneName() { - return GetTimezoneName( - chromeos::system::TimezoneSettings::GetInstance()->GetTimezone()); + return GetTimezoneName(TimezoneSettings::GetInstance()->GetTimezone()); } // Creates a list of pairs of each timezone's ID and name. std::unique_ptr<base::ListValue> GetTimezoneList() { - const auto& timezones = - chromeos::system::TimezoneSettings::GetInstance()->GetTimezoneList(); - std::unique_ptr<base::ListValue> timezoneList(new base::ListValue()); + const auto& timezones = TimezoneSettings::GetInstance()->GetTimezoneList(); + auto timezone_list = base::MakeUnique<base::ListValue>(); for (const auto& timezone : timezones) { auto option = base::MakeUnique<base::ListValue>(); - option->AppendString( - chromeos::system::TimezoneSettings::GetTimezoneID(*timezone)); + option->AppendString(TimezoneSettings::GetTimezoneID(*timezone)); option->AppendString(GetTimezoneName(*timezone)); - timezoneList->Append(std::move(option)); + timezone_list->Append(std::move(option)); } - return timezoneList; + return timezone_list; } bool HasSystemTimezonePolicy() { @@ -180,8 +178,7 @@ return false; std::string policy_timezone; - if (chromeos::CrosSettings::Get()->GetString(chromeos::kSystemTimezonePolicy, - &policy_timezone) && + if (CrosSettings::Get()->GetString(kSystemTimezonePolicy, &policy_timezone) && !policy_timezone.empty()) { VLOG(1) << "Refresh TimeZone: TimeZone settings are overridden" << " by DevicePolicy."; @@ -195,8 +192,7 @@ pref_name == prefs::kResolveTimezoneByGeolocation); std::string policy_timezone; - if (chromeos::CrosSettings::Get()->GetString(chromeos::kSystemTimezonePolicy, - &policy_timezone) && + if (CrosSettings::Get()->GetString(kSystemTimezonePolicy, &policy_timezone) && !policy_timezone.empty()) { return true; } @@ -233,28 +229,29 @@ return; } - if (!timezone->timeZoneId.empty()) { - VLOG(1) << "Refresh TimeZone: setting timezone to '" << timezone->timeZoneId - << "'"; + if (timezone->timeZoneId.empty()) + return; - if (PerUserTimezoneEnabled()) { - const user_manager::UserManager* user_manager = - user_manager::UserManager::Get(); - const user_manager::User* primary_user = user_manager->GetPrimaryUser(); + VLOG(1) << "Refresh TimeZone: setting timezone to '" << timezone->timeZoneId + << "'"; - if (primary_user) { - Profile* profile = ProfileHelper::Get()->GetProfileByUser(primary_user); - profile->GetPrefs()->SetString(prefs::kUserTimezone, - timezone->timeZoneId); - // chromeos::Preferences::ApplyPreferences() will automatically change - // system timezone because user is primary. - } else { - SetSystemAndSigninScreenTimezone(timezone->timeZoneId); - } + if (PerUserTimezoneEnabled()) { + const user_manager::UserManager* user_manager = + user_manager::UserManager::Get(); + const user_manager::User* primary_user = user_manager->GetPrimaryUser(); + + if (primary_user) { + Profile* profile = ProfileHelper::Get()->GetProfileByUser(primary_user); + profile->GetPrefs()->SetString(prefs::kUserTimezone, + timezone->timeZoneId); + // chromeos::Preferences::ApplyPreferences() will automatically change + // system timezone because user is primary. } else { - chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( - base::UTF8ToUTF16(timezone->timeZoneId)); + SetSystemAndSigninScreenTimezone(timezone->timeZoneId); } + } else { + TimezoneSettings::GetInstance()->SetTimezoneFromID( + base::UTF8ToUTF16(timezone->timeZoneId)); } }
diff --git a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc index d7e68ab..6579413 100644 --- a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc +++ b/chrome/browser/chromeos/system/tray_accessibility_browsertest.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 "ash/accessibility/accessibility_controller.h" #include "ash/accessibility_types.h" #include "ash/login_status.h" #include "ash/magnifier/magnification_controller.h" @@ -73,8 +74,12 @@ ProfileHelper::GetUserIdHashByUserIdForTesting(account_id.GetUserEmail()); SessionManager::Get()->CreateSession(account_id, user_id_hash); - ProfileHelper::GetProfileByUserIdHashForTest(user_id_hash); + Profile* profile = ProfileHelper::GetProfileByUserIdHashForTest(user_id_hash); + ash::Shell::Get()->accessibility_controller()->SetPrefServiceForTest( + profile->GetPrefs()); SessionManager::Get()->SessionStarted(); + // Flush to ensure the session state reaches ash and updates login status. + SessionControllerClient::FlushForTesting(); } class TrayAccessibilityTest @@ -103,6 +108,8 @@ void SetUpOnMainThread() override { AccessibilityManager::Get()->SetProfileForTest(GetProfile()); MagnificationManager::Get()->SetProfileForTest(GetProfile()); + ash::Shell::Get()->accessibility_controller()->SetPrefServiceForTest( + GetProfile()->GetPrefs()); // Need to mark oobe completed to show detailed views. StartupUtils::MarkOobeCompleted(); } @@ -366,8 +373,6 @@ EXPECT_EQ(ash::LoginStatus::NOT_LOGGED_IN, GetLoginStatus()); CreateAndStartUserSession(AccountId::FromUserEmail("owner@invalid.domain")); - // Flush to ensure the session state reaches ash and updates login status. - SessionControllerClient::FlushForTesting(); EXPECT_EQ(ash::LoginStatus::USER, GetLoginStatus()); } @@ -518,8 +523,6 @@ IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenu) { // Login CreateAndStartUserSession(AccountId::FromUserEmail("owner@invalid.domain")); - // Flush to ensure the session state reaches ash and updates login status. - SessionControllerClient::FlushForTesting(); SetShowAccessibilityOptionsInSystemTrayMenu(false); @@ -656,8 +659,6 @@ IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowMenuOption) { // Login CreateAndStartUserSession(AccountId::FromUserEmail("owner@invalid.domain")); - // Flush to ensure the session state reaches ash and updates login status. - SessionControllerClient::FlushForTesting(); SetShowAccessibilityOptionsInSystemTrayMenu(true); @@ -1645,8 +1646,6 @@ // Simulate login. CreateAndStartUserSession(AccountId::FromUserEmail("owner@invalid.domain")); - // Flush to ensure the session state reaches ash and updates login status. - SessionControllerClient::FlushForTesting(); EXPECT_TRUE(CreateDetailedMenu()); EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu()); EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
diff --git a/chrome/browser/chromeos/ui/request_pin_view.cc b/chrome/browser/chromeos/ui/request_pin_view.cc index fbb2000..21794797 100644 --- a/chrome/browser/chromeos/ui/request_pin_view.cc +++ b/chrome/browser/chromeos/ui/request_pin_view.cc
@@ -162,7 +162,10 @@ } void RequestPinView::Init() { - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); + + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); int column_view_set_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
diff --git a/chrome/browser/conflicts/msi_util_win.h b/chrome/browser/conflicts/msi_util_win.h index 3a5a0f8..87e22b9f 100644 --- a/chrome/browser/conflicts/msi_util_win.h +++ b/chrome/browser/conflicts/msi_util_win.h
@@ -12,6 +12,8 @@ class MsiUtil { public: + virtual ~MsiUtil() {} + // Using the Microsoft Installer API, retrieves the path of all the components // for a given product. This function should be called on a thread that allows // access to the file system. Returns false if any error occured, including if
diff --git a/chrome/browser/devtools/devtools_network_transaction.cc b/chrome/browser/devtools/devtools_network_transaction.cc index 7c16ef3a..6508896 100644 --- a/chrome/browser/devtools/devtools_network_transaction.cc +++ b/chrome/browser/devtools/devtools_network_transaction.cc
@@ -290,6 +290,11 @@ network_transaction_->SetRequestHeadersCallback(std::move(callback)); } +void DevToolsNetworkTransaction::SetResponseHeadersCallback( + net::ResponseHeadersCallback callback) { + network_transaction_->SetResponseHeadersCallback(std::move(callback)); +} + void DevToolsNetworkTransaction::SetBeforeHeadersSentCallback( const BeforeHeadersSentCallback& callback) { network_transaction_->SetBeforeHeadersSentCallback(callback);
diff --git a/chrome/browser/devtools/devtools_network_transaction.h b/chrome/browser/devtools/devtools_network_transaction.h index 7805290..f52ca9f 100644 --- a/chrome/browser/devtools/devtools_network_transaction.h +++ b/chrome/browser/devtools/devtools_network_transaction.h
@@ -89,6 +89,8 @@ void SetBeforeHeadersSentCallback( const BeforeHeadersSentCallback& callback) override; void SetRequestHeadersCallback(net::RequestHeadersCallback callback) override; + void SetResponseHeadersCallback( + net::ResponseHeadersCallback callback) override; int ResumeNetworkStart() override; void GetConnectionAttempts(net::ConnectionAttempts* out) const override;
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc index faf2c46..95c216e 100644 --- a/chrome/browser/devtools/devtools_sanity_browsertest.cc +++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -84,6 +84,7 @@ #include "net/test/spawned_test_server/spawned_test_server.h" #include "net/test/url_request/url_request_mock_http_job.h" #include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_filter.h" #include "net/url_request/url_request_http_job.h" #include "third_party/WebKit/public/platform/WebInputEvent.h" @@ -2116,3 +2117,40 @@ DevToolsWindowTesting::CloseDevToolsWindowSync(window); content::WebUIControllerFactory::UnregisterFactoryForTesting(&test_factory); } + +void AddHSTSHost(scoped_refptr<net::URLRequestContextGetter> context, + std::string host) { + net::TransportSecurityState* transport_security_state = + context->GetURLRequestContext()->transport_security_state(); + base::Time expiry = base::Time::Now() + base::TimeDelta::FromDays(1000); + bool include_subdomains = false; + transport_security_state->AddHSTS(host, expiry, include_subdomains); +} + +IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestRawHeadersWithRedirectAndHSTS) { + net::EmbeddedTestServer https_test_server( + net::EmbeddedTestServer::TYPE_HTTPS); + https_test_server.SetSSLConfig( + net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN); + https_test_server.ServeFilesFromSourceDirectory("chrome/test/data"); + ASSERT_TRUE(https_test_server.Start()); + GURL https_url = https_test_server.GetURL("localhost", "/devtools/image.png"); + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::BindOnce( + AddHSTSHost, + base::RetainedRef(browser()->profile()->GetRequestContext()), + https_url.host())); + ASSERT_TRUE(embedded_test_server()->Start()); + + OpenDevToolsWindow(std::string(), false); + GURL::Replacements replace_scheme; + replace_scheme.SetSchemeStr("http"); + GURL http_url = https_url.ReplaceComponents(replace_scheme); + GURL redirect_url = + embedded_test_server()->GetURL("/server-redirect?" + http_url.spec()); + + DispatchOnTestSuite(window_, "testRawHeadersWithHSTS", + redirect_url.spec().c_str()); + CloseDevToolsWindow(); +}
diff --git a/chrome/browser/devtools/devtools_ui_bindings.cc b/chrome/browser/devtools/devtools_ui_bindings.cc index bd2983f8..a1dd70e 100644 --- a/chrome/browser/devtools/devtools_ui_bindings.cc +++ b/chrome/browser/devtools/devtools_ui_bindings.cc
@@ -314,12 +314,11 @@ return net::OK; } -GURL SanitizeFrontendURL( - const GURL& url, - const std::string& scheme, - const std::string& host, - const std::string& path, - bool allow_query); +GURL SanitizeFrontendURL(const GURL& url, + const std::string& scheme, + const std::string& host, + const std::string& path, + bool allow_query_and_fragment); std::string SanitizeRevision(const std::string& revision) { for (size_t i = 0; i < revision.length(); i++) { @@ -414,14 +413,14 @@ return std::string(); } -GURL SanitizeFrontendURL( - const GURL& url, - const std::string& scheme, - const std::string& host, - const std::string& path, - bool allow_query) { +GURL SanitizeFrontendURL(const GURL& url, + const std::string& scheme, + const std::string& host, + const std::string& path, + bool allow_query_and_fragment) { std::vector<std::string> query_parts; - if (allow_query) { + std::string fragment; + if (allow_query_and_fragment) { for (net::QueryIterator it(url); !it.IsAtEnd(); it.Advance()) { std::string value = SanitizeFrontendQueryParam(it.GetKey(), it.GetValue()); @@ -430,11 +429,14 @@ base::StringPrintf("%s=%s", it.GetKey().c_str(), value.c_str())); } } + if (url.has_ref()) + fragment = '#' + url.ref(); } std::string query = query_parts.empty() ? "" : "?" + base::JoinString(query_parts, "&"); - std::string constructed = base::StringPrintf("%s://%s%s%s", - scheme.c_str(), host.c_str(), path.c_str(), query.c_str()); + std::string constructed = + base::StringPrintf("%s://%s%s%s%s", scheme.c_str(), host.c_str(), + path.c_str(), query.c_str(), fragment.c_str()); GURL result = GURL(constructed); if (!result.is_valid()) return GURL();
diff --git a/chrome/browser/devtools/devtools_ui_bindings_unittest.cc b/chrome/browser/devtools/devtools_ui_bindings_unittest.cc index f1754a3..486d99a 100644 --- a/chrome/browser/devtools/devtools_ui_bindings_unittest.cc +++ b/chrome/browser/devtools/devtools_ui_bindings_unittest.cc
@@ -10,88 +10,85 @@ TEST_F(DevToolsUIBindingsTest, SanitizeFrontendURL) { std::vector<std::pair<std::string, std::string>> tests = { - {"random-string", - "chrome-devtools://devtools/"}, - {"http://valid.url/but/wrong", - "chrome-devtools://devtools/but/wrong"}, - {"chrome-devtools://wrong-domain/", - "chrome-devtools://devtools/"}, - {"chrome-devtools://devtools/bundled/devtools.html", - "chrome-devtools://devtools/bundled/devtools.html"}, - {"chrome-devtools://devtools:1234/bundled/devtools.html#hash", - "chrome-devtools://devtools/bundled/devtools.html"}, - {"chrome-devtools://devtools/some/random/path", - "chrome-devtools://devtools/some/random/path"}, - {"chrome-devtools://devtools/bundled/devtools.html?experiments=true", - "chrome-devtools://devtools/bundled/devtools.html?experiments=true"}, - {"chrome-devtools://devtools/bundled/devtools.html" - "?some-flag=flag&v8only=true&experiments=false&debugFrontend=a" - "&another-flag=another-flag&can_dock=false&isSharedWorker=notreally" - "&remoteFrontend=sure", - "chrome-devtools://devtools/bundled/devtools.html" - "?v8only=true&experiments=true&debugFrontend=true" - "&can_dock=true&isSharedWorker=true&remoteFrontend=true"}, - {"chrome-devtools://devtools/?ws=any-value-is-fine", - "chrome-devtools://devtools/?ws=any-value-is-fine"}, - {"chrome-devtools://devtools/" - "?service-backend=ws://localhost:9222/services", - "chrome-devtools://devtools/" - "?service-backend=ws://localhost:9222/services"}, - {"chrome-devtools://devtools/?dockSide=undocked", - "chrome-devtools://devtools/?dockSide=undocked"}, - {"chrome-devtools://devtools/?dockSide=dock-to-bottom", - "chrome-devtools://devtools/"}, - {"chrome-devtools://devtools/?dockSide=bottom", - "chrome-devtools://devtools/"}, - {"chrome-devtools://devtools/?remoteBase=" - "http://example.com:1234/remote-base#hash", - "chrome-devtools://devtools/?remoteBase=" - "https://chrome-devtools-frontend.appspot.com/" - "serve_file//"}, - {"chrome-devtools://devtools/?ws=1%26evil%3dtrue", - "chrome-devtools://devtools/?ws=1%26evil%3dtrue"}, - {"chrome-devtools://devtools/?remoteBase=" - "https://chrome-devtools-frontend.appspot.com/some/path/" - "@123719741873/more/path.html", - "chrome-devtools://devtools/?remoteBase=" - "https://chrome-devtools-frontend.appspot.com/serve_file/path/"}, - {"chrome-devtools://devtools/?remoteBase=" - "https://chrome-devtools-frontend.appspot.com/serve_file/" - "@123719741873/inspector.html%3FdebugFrontend%3Dfalse", - "chrome-devtools://devtools/?remoteBase=" - "https://chrome-devtools-frontend.appspot.com/serve_file/" - "@123719741873/"}, - {"chrome-devtools://devtools/bundled/inspector.html?" - "&remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/" - "@b4907cc5d602ff470740b2eb6344b517edecb7b9/&can_dock=true", - "chrome-devtools://devtools/bundled/inspector.html?" - "remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/" - "@b4907cc5d602ff470740b2eb6344b517edecb7b9/&can_dock=true"}, - {"chrome-devtools://devtools/?remoteFrontendUrl=" - "https://chrome-devtools-frontend.appspot.com/serve_rev/" - "@12345/inspector.html%3FdebugFrontend%3Dfalse", - "chrome-devtools://devtools/?remoteFrontendUrl=" - "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" - "%2F%4012345%2Finspector.html%3FdebugFrontend%3Dtrue"}, - {"chrome-devtools://devtools/?remoteFrontendUrl=" - "https://chrome-devtools-frontend.appspot.com/serve_rev/" - "@12345/inspector.html%22></iframe>something", - "chrome-devtools://devtools/?remoteFrontendUrl=" - "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" - "%2F%4012345%2Finspector.html"}, - {"chrome-devtools://devtools/?remoteFrontendUrl=" - "http://domain:1234/path/rev/a/filename.html%3Fparam%3Dvalue#hash", - "chrome-devtools://devtools/?remoteFrontendUrl=" - "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" - "%2Frev%2Finspector.html"}, - {"chrome-devtools://devtools/?experiments=whatever&remoteFrontendUrl=" - "https://chrome-devtools-frontend.appspot.com/serve_rev/" - "@12345/devtools.html%3Fws%3Danyvalue%26experiments%3Dlikely" - "&unencoded=value&debugFrontend=true", - "chrome-devtools://devtools/?experiments=true&remoteFrontendUrl=" - "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" - "%2F%4012345%2Fdevtools.html%3Fws%3Danyvalue%26experiments%3Dtrue" - "&debugFrontend=true"}, + {"random-string", "chrome-devtools://devtools/"}, + {"http://valid.url/but/wrong", "chrome-devtools://devtools/but/wrong"}, + {"chrome-devtools://wrong-domain/", "chrome-devtools://devtools/"}, + {"chrome-devtools://devtools/bundled/devtools.html", + "chrome-devtools://devtools/bundled/devtools.html"}, + {"chrome-devtools://devtools:1234/bundled/devtools.html#hash", + "chrome-devtools://devtools/bundled/devtools.html#hash"}, + {"chrome-devtools://devtools/some/random/path", + "chrome-devtools://devtools/some/random/path"}, + {"chrome-devtools://devtools/bundled/devtools.html?experiments=true", + "chrome-devtools://devtools/bundled/devtools.html?experiments=true"}, + {"chrome-devtools://devtools/bundled/devtools.html" + "?some-flag=flag&v8only=true&experiments=false&debugFrontend=a" + "&another-flag=another-flag&can_dock=false&isSharedWorker=notreally" + "&remoteFrontend=sure", + "chrome-devtools://devtools/bundled/devtools.html" + "?v8only=true&experiments=true&debugFrontend=true" + "&can_dock=true&isSharedWorker=true&remoteFrontend=true"}, + {"chrome-devtools://devtools/?ws=any-value-is-fine", + "chrome-devtools://devtools/?ws=any-value-is-fine"}, + {"chrome-devtools://devtools/" + "?service-backend=ws://localhost:9222/services", + "chrome-devtools://devtools/" + "?service-backend=ws://localhost:9222/services"}, + {"chrome-devtools://devtools/?dockSide=undocked", + "chrome-devtools://devtools/?dockSide=undocked"}, + {"chrome-devtools://devtools/?dockSide=dock-to-bottom", + "chrome-devtools://devtools/"}, + {"chrome-devtools://devtools/?dockSide=bottom", + "chrome-devtools://devtools/"}, + {"chrome-devtools://devtools/?remoteBase=" + "http://example.com:1234/remote-base#hash", + "chrome-devtools://devtools/?remoteBase=" + "https://chrome-devtools-frontend.appspot.com/" + "serve_file//#hash"}, + {"chrome-devtools://devtools/?ws=1%26evil%3dtrue", + "chrome-devtools://devtools/?ws=1%26evil%3dtrue"}, + {"chrome-devtools://devtools/?remoteBase=" + "https://chrome-devtools-frontend.appspot.com/some/path/" + "@123719741873/more/path.html", + "chrome-devtools://devtools/?remoteBase=" + "https://chrome-devtools-frontend.appspot.com/serve_file/path/"}, + {"chrome-devtools://devtools/?remoteBase=" + "https://chrome-devtools-frontend.appspot.com/serve_file/" + "@123719741873/inspector.html%3FdebugFrontend%3Dfalse", + "chrome-devtools://devtools/?remoteBase=" + "https://chrome-devtools-frontend.appspot.com/serve_file/" + "@123719741873/"}, + {"chrome-devtools://devtools/bundled/inspector.html?" + "&remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/" + "@b4907cc5d602ff470740b2eb6344b517edecb7b9/&can_dock=true", + "chrome-devtools://devtools/bundled/inspector.html?" + "remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/" + "@b4907cc5d602ff470740b2eb6344b517edecb7b9/&can_dock=true"}, + {"chrome-devtools://devtools/?remoteFrontendUrl=" + "https://chrome-devtools-frontend.appspot.com/serve_rev/" + "@12345/inspector.html%3FdebugFrontend%3Dfalse", + "chrome-devtools://devtools/?remoteFrontendUrl=" + "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" + "%2F%4012345%2Finspector.html%3FdebugFrontend%3Dtrue"}, + {"chrome-devtools://devtools/?remoteFrontendUrl=" + "https://chrome-devtools-frontend.appspot.com/serve_rev/" + "@12345/inspector.html%22></iframe>something", + "chrome-devtools://devtools/?remoteFrontendUrl=" + "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" + "%2F%4012345%2Finspector.html"}, + {"chrome-devtools://devtools/?remoteFrontendUrl=" + "http://domain:1234/path/rev/a/filename.html%3Fparam%3Dvalue#hash", + "chrome-devtools://devtools/?remoteFrontendUrl=" + "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" + "%2Frev%2Finspector.html#hash"}, + {"chrome-devtools://devtools/?experiments=whatever&remoteFrontendUrl=" + "https://chrome-devtools-frontend.appspot.com/serve_rev/" + "@12345/devtools.html%3Fws%3Danyvalue%26experiments%3Dlikely" + "&unencoded=value&debugFrontend=true", + "chrome-devtools://devtools/?experiments=true&remoteFrontendUrl=" + "https%3A%2F%2Fchrome-devtools-frontend.appspot.com%2Fserve_rev" + "%2F%4012345%2Fdevtools.html%3Fws%3Danyvalue%26experiments%3Dtrue" + "&debugFrontend=true"}, }; for (const auto& pair : tests) {
diff --git a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc index a8e7eb4f..5c3f4fc 100644 --- a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc +++ b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc
@@ -123,6 +123,9 @@ case api::feedback_private::LOG_SOURCE_ATRUSLOG: return base::MakeUnique<system_logs::SingleLogFileLogSource>( system_logs::SingleLogFileLogSource::SupportedSource::kAtrusLog); + case api::feedback_private::LOG_SOURCE_NETLOG: + return base::MakeUnique<system_logs::SingleLogFileLogSource>( + system_logs::SingleLogFileLogSource::SupportedSource::kNetLog); case api::feedback_private::LOG_SOURCE_NONE: default: NOTREACHED() << "Unknown log source type.";
diff --git a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc index 1670e55..c87e15d26 100644 --- a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc +++ b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
@@ -181,10 +181,9 @@ GetOutputDeviceDescriptionsOnIOThread() { DCHECK_CURRENTLY_ON(BrowserThread::IO); media::AudioSystem::Get()->GetDeviceDescriptions( - base::BindOnce(&WebrtcAudioPrivateGetSinksFunction:: - ReceiveOutputDeviceDescriptionsOnIOThread, - this), - false); + false, base::BindOnce(&WebrtcAudioPrivateGetSinksFunction:: + ReceiveOutputDeviceDescriptionsOnIOThread, + this)); } void WebrtcAudioPrivateGetSinksFunction:: @@ -237,10 +236,9 @@ GetInputDeviceDescriptionsOnIOThread() { DCHECK_CURRENTLY_ON(BrowserThread::IO); media::AudioSystem::Get()->GetDeviceDescriptions( - base::BindOnce(&WebrtcAudioPrivateGetAssociatedSinkFunction:: - ReceiveInputDeviceDescriptionsOnIOThread, - this), - true); + true, base::BindOnce(&WebrtcAudioPrivateGetAssociatedSinkFunction:: + ReceiveInputDeviceDescriptionsOnIOThread, + this)); } void WebrtcAudioPrivateGetAssociatedSinkFunction::
diff --git a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc index 9f97850..596f5db 100644 --- a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc +++ b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc
@@ -63,14 +63,14 @@ AudioDeviceDescriptions* device_descriptions) { base::RunLoop run_loop; media::AudioSystem::Get()->GetDeviceDescriptions( + for_input, base::BindOnce( [](base::Closure finished_callback, AudioDeviceDescriptions* result, AudioDeviceDescriptions received) { *result = std::move(received); finished_callback.Run(); }, - base::Passed(run_loop.QuitClosure()), device_descriptions), - for_input); + base::Passed(run_loop.QuitClosure()), device_descriptions)); run_loop.Run(); }
diff --git a/chrome/browser/extensions/chrome_extension_web_contents_observer.cc b/chrome/browser/extensions/chrome_extension_web_contents_observer.cc index e4192ba..bbfd11c 100644 --- a/chrome/browser/extensions/chrome_extension_web_contents_observer.cc +++ b/chrome/browser/extensions/chrome_extension_web_contents_observer.cc
@@ -20,7 +20,6 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_view_host.h" #include "content/public/common/content_switches.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" @@ -42,16 +41,16 @@ ChromeExtensionWebContentsObserver::~ChromeExtensionWebContentsObserver() {} -void ChromeExtensionWebContentsObserver::RenderViewCreated( - content::RenderViewHost* render_view_host) { - ReloadIfTerminated(render_view_host); - ExtensionWebContentsObserver::RenderViewCreated(render_view_host); +void ChromeExtensionWebContentsObserver::RenderFrameCreated( + content::RenderFrameHost* render_frame_host) { + ReloadIfTerminated(render_frame_host); + ExtensionWebContentsObserver::RenderFrameCreated(render_frame_host); - const Extension* extension = GetExtension(render_view_host); + const Extension* extension = GetExtensionFromFrame(render_frame_host, false); if (!extension) return; - int process_id = render_view_host->GetProcess()->GetID(); + int process_id = render_frame_host->GetProcess()->GetID(); auto* policy = content::ChildProcessSecurityPolicy::GetInstance(); // Components of chrome that are implemented as extensions or platform apps @@ -135,8 +134,8 @@ } void ChromeExtensionWebContentsObserver::ReloadIfTerminated( - content::RenderViewHost* render_view_host) { - std::string extension_id = GetExtensionId(render_view_host); + content::RenderFrameHost* render_frame_host) { + std::string extension_id = GetExtensionIdFromFrame(render_frame_host); if (extension_id.empty()) return;
diff --git a/chrome/browser/extensions/chrome_extension_web_contents_observer.h b/chrome/browser/extensions/chrome_extension_web_contents_observer.h index 0220e75..d6d97fb6 100644 --- a/chrome/browser/extensions/chrome_extension_web_contents_observer.h +++ b/chrome/browser/extensions/chrome_extension_web_contents_observer.h
@@ -40,7 +40,7 @@ content::RenderFrameHost* render_frame_host) override; // content::WebContentsObserver overrides. - void RenderViewCreated(content::RenderViewHost* render_view_host) override; + void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; void DidFinishNavigation( content::NavigationHandle* navigation_handle) override; @@ -57,7 +57,7 @@ int32_t severity_level); // Reloads an extension if it is on the terminated list. - void ReloadIfTerminated(content::RenderViewHost* render_view_host); + void ReloadIfTerminated(content::RenderFrameHost* render_frame_host); DISALLOW_COPY_AND_ASSIGN(ChromeExtensionWebContentsObserver); };
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 1bb4c02..a9bfaca1 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h
@@ -755,6 +755,9 @@ ManagementPolicyProhibitsEnableOnInstalled); FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, BlockAndUnblockBlacklistedExtension); + FRIEND_TEST_ALL_PREFIXES(BlacklistedExtensionSyncServiceTest, + SyncBlacklistedExtension); + friend class BlacklistedExtensionSyncServiceTest; DISALLOW_COPY_AND_ASSIGN(ExtensionService); };
diff --git a/chrome/browser/extensions/extension_service_sync_unittest.cc b/chrome/browser/extensions/extension_service_sync_unittest.cc index 938b188..cd1ac904 100644 --- a/chrome/browser/extensions/extension_service_sync_unittest.cc +++ b/chrome/browser/extensions/extension_service_sync_unittest.cc
@@ -28,6 +28,7 @@ #include "chrome/browser/extensions/extension_sync_service.h" #include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/scripting_permissions_modifier.h" +#include "chrome/browser/extensions/test_blacklist.h" #include "chrome/browser/extensions/updater/extension_updater.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/themes/theme_service.h" @@ -2695,3 +2696,117 @@ EXPECT_EQ(1u, extensions_processor.data().size()); EXPECT_TRUE(apps_processor.data().empty()); } + +class BlacklistedExtensionSyncServiceTest : public ExtensionServiceSyncTest { + public: + BlacklistedExtensionSyncServiceTest() {} + + void SetUp() override { + ExtensionServiceSyncTest::SetUp(); + + InitializeEmptyExtensionService(); + + // Enable sync. + browser_sync::ProfileSyncService* sync_service = + ProfileSyncServiceFactory::GetForProfile(profile()); + sync_service->SetFirstSetupComplete(); + + test_blacklist_.Attach(service()->blacklist_); + service()->Init(); + + // Load up a simple extension. + extensions::ChromeTestExtensionLoader extension_loader(profile()); + extension_loader.set_pack_extension(true); + extension_ = extension_loader.LoadExtension( + data_dir().AppendASCII("simple_with_file")); + ASSERT_TRUE(extension_); + extension_id_ = extension_->id(); + ASSERT_TRUE(registry()->enabled_extensions().GetByID(extension_id_)); + + { + auto processor = base::MakeUnique<syncer::FakeSyncChangeProcessor>(); + processor_raw_ = processor.get(); + extension_sync_service()->MergeDataAndStartSyncing( + syncer::EXTENSIONS, syncer::SyncDataList(), std::move(processor), + base::MakeUnique<syncer::SyncErrorFactoryMock>()); + } + processor_raw_->changes().clear(); + } + + void ForceBlacklistUpdate() { + service()->OnBlacklistUpdated(); + content::RunAllBlockingPoolTasksUntilIdle(); + } + + syncer::FakeSyncChangeProcessor* processor() { return processor_raw_; } + + const Extension* extension() { return extension_.get(); } + + std::string& extension_id() { return extension_id_; } + + extensions::TestBlacklist& test_blacklist() { return test_blacklist_; } + + private: + syncer::FakeSyncChangeProcessor* processor_raw_; + scoped_refptr<const Extension> extension_; + std::string extension_id_; + extensions::TestBlacklist test_blacklist_; + + DISALLOW_COPY_AND_ASSIGN(BlacklistedExtensionSyncServiceTest); +}; + +// Test that sync cannot enable blacklisted extensions. +TEST_F(BlacklistedExtensionSyncServiceTest, SyncBlacklistedExtension) { + std::string& extension_id = this->extension_id(); + + // Blacklist the extension. + test_blacklist().SetBlacklistState(extension_id, + extensions::BLACKLISTED_MALWARE, true); + ForceBlacklistUpdate(); + + // Try enabling the extension via sync. + EnableExtensionFromSync(*extension()); + + // The extension should not be enabled. + EXPECT_FALSE(registry()->enabled_extensions().GetByID(extension_id)); + EXPECT_TRUE(processor()->changes().empty()); +} + +// Test that some greylisted extensions can be enabled through sync. +TEST_F(BlacklistedExtensionSyncServiceTest, SyncAllowedGreylistedExtension) { + std::string& extension_id = this->extension_id(); + + // Greylist the extension. + test_blacklist().SetBlacklistState( + extension_id, extensions::BLACKLISTED_POTENTIALLY_UNWANTED, true); + ForceBlacklistUpdate(); + + EXPECT_FALSE(registry()->enabled_extensions().GetByID(extension_id)); + { + ASSERT_EQ(1u, processor()->changes().size()); + const SyncChange& change = processor()->changes()[0]; + EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); + std::unique_ptr<ExtensionSyncData> data = + ExtensionSyncData::CreateFromSyncData(change.sync_data()); + EXPECT_EQ(extension_id, data->id()); + EXPECT_EQ(extensions::disable_reason::DISABLE_GREYLIST, + data->disable_reasons()); + EXPECT_FALSE(data->enabled()); + } + processor()->changes().clear(); + + // Manually re-enabling the extension should work. + service()->EnableExtension(extension_id); + EXPECT_TRUE(registry()->enabled_extensions().GetByID(extension_id)); + { + ASSERT_EQ(1u, processor()->changes().size()); + const SyncChange& change = processor()->changes()[0]; + EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); + std::unique_ptr<ExtensionSyncData> data = + ExtensionSyncData::CreateFromSyncData(change.sync_data()); + EXPECT_EQ(extension_id, data->id()); + EXPECT_EQ(0, data->disable_reasons()); + EXPECT_TRUE(data->enabled()); + } + processor()->changes().clear(); +}
diff --git a/chrome/browser/extensions/extension_sync_service.cc b/chrome/browser/extensions/extension_sync_service.cc index 46e92458..27685b7 100644 --- a/chrome/browser/extensions/extension_sync_service.cc +++ b/chrome/browser/extensions/extension_sync_service.cc
@@ -276,9 +276,12 @@ // for the existence of disable reasons instead), we're just setting it here // for older Chrome versions (<M48). bool enabled = (disable_reasons == extensions::disable_reason::DISABLE_NONE); - enabled = enabled && - extension_prefs->GetExtensionBlacklistState(extension.id()) == - extensions::NOT_BLACKLISTED; + if (extension_prefs->GetExtensionBlacklistState(extension.id()) == + extensions::BLACKLISTED_MALWARE) { + enabled = false; + NOTREACHED() << "Blacklisted extensions should not be getting synced."; + } + bool incognito_enabled = extensions::util::IsIncognitoEnabled(id, profile_); bool remote_install = extension_prefs->HasDisableReason( id, extensions::disable_reason::DISABLE_REMOTE_INSTALL);
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index da560e19..2038b17a 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -942,6 +942,12 @@ "Flash Overlay Scrollbars When Mouse Enter a scrollable area. You must also" " enable Overlay Scrollbars."; +const char kUseNewAcceptLanguageHeaderName[] = "Use new Accept-Language header"; +const char kUseNewAcceptLanguageHeaderDescription[] = + "Adds the base language code after other corresponding language+region " + "codes. This ensures that users receive content in their preferred " + "language."; + const char kOverscrollHistoryNavigationName[] = "Overscroll history navigation"; const char kOverscrollHistoryNavigationDescription[] = "Experimental history navigation in response to horizontal overscroll."; @@ -2299,6 +2305,11 @@ "If enabled and the device supports ARC, the user will be asked to update " "the encryption of user data when the user signs in."; +const char kEnableExternalDriveRename[] = "Enable external drive rename"; +const char kEnableExternalDriveRenameDescription[] = + "If enabled, external removable drives will get 'Rename' action in the " + "context menu"; + const char kEnableImeMenuName[] = "Enable opt-in IME menu"; const char kEnableImeMenuDescription[] = "Enable access to the new IME menu in the Language Settings page.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index ecb001d..34a4701 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -583,6 +583,9 @@ extern const char kOverlayScrollbarsFlashWhenMouseEnterName[]; extern const char kOverlayScrollbarsFlashWhenMouseEnterDescription[]; +extern const char kUseNewAcceptLanguageHeaderName[]; +extern const char kUseNewAcceptLanguageHeaderDescription[]; + extern const char kOverscrollHistoryNavigationName[]; extern const char kOverscrollHistoryNavigationDescription[]; extern const char kOverscrollHistoryNavigationSimpleUi[]; @@ -1409,6 +1412,9 @@ extern const char kEnableEncryptionMigrationName[]; extern const char kEnableEncryptionMigrationDescription[]; +extern const char kEnableExternalDriveRename[]; +extern const char kEnableExternalDriveRenameDescription[]; + extern const char kEnableImeMenuName[]; extern const char kEnableImeMenuDescription[];
diff --git a/chrome/browser/generic_sensor/sensor_permission_context.cc b/chrome/browser/generic_sensor/sensor_permission_context.cc index 0e816a1f..31afde2 100644 --- a/chrome/browser/generic_sensor/sensor_permission_context.cc +++ b/chrome/browser/generic_sensor/sensor_permission_context.cc
@@ -4,6 +4,11 @@ #include "chrome/browser/generic_sensor/sensor_permission_context.h" +#include "components/content_settings/core/common/content_settings.h" +#include "components/content_settings/core/common/content_settings_types.h" +#include "third_party/WebKit/public/platform/WebFeaturePolicyFeature.h" +#include "url/gurl.h" + SensorPermissionContext::SensorPermissionContext(Profile* profile) : PermissionContextBase(profile, CONTENT_SETTINGS_TYPE_SENSORS,
diff --git a/chrome/browser/hang_monitor/hang_crash_dump_win.cc b/chrome/browser/hang_monitor/hang_crash_dump_win.cc index 56b9f2ee..9f30288 100644 --- a/chrome/browser/hang_monitor/hang_crash_dump_win.cc +++ b/chrome/browser/hang_monitor/hang_crash_dump_win.cc
@@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/strings/string_util.h" #include "chrome/common/chrome_constants.h" +#include "components/crash/content/app/crash_export_thunks.h" #include "content/public/common/result_codes.h" namespace { @@ -31,24 +32,6 @@ const base::StringPairs& additional_child_crash_keys) { // Before terminating the process we try collecting a dump. Which // a transient thread in the child process will do for us. - typedef HANDLE(__cdecl * DumpFunction)(HANDLE, void*); - typedef HANDLE(__cdecl * DumpFunctionNoCrashKeys)(HANDLE, int); - static DumpFunction request_dump = nullptr; - static DumpFunctionNoCrashKeys request_dump_no_crash_keys = nullptr; - if (!request_dump) { - request_dump = reinterpret_cast<DumpFunction>(GetProcAddress( - GetModuleHandle(chrome::kChromeElfDllName), "InjectDumpForHungInput")); - DCHECK(request_dump) << "Failed loading DumpProcessWithoutCrash: error " << - GetLastError(); - } - if (!request_dump_no_crash_keys) { - request_dump_no_crash_keys = reinterpret_cast<DumpFunctionNoCrashKeys>( - GetProcAddress(GetModuleHandle(chrome::kChromeElfDllName), - "InjectDumpForHungInputNoCrashKeys")); - DCHECK(request_dump_no_crash_keys) - << "Failed loading DumpProcessWithoutCrash: error " << GetLastError(); - } - DWORD crash_key_failure = 0; void* remote_memory = nullptr; bool send_remote_memory = false; @@ -81,10 +64,11 @@ } HANDLE remote_thread = nullptr; - if (request_dump && send_remote_memory) { - remote_thread = request_dump(hprocess, remote_memory); - } else if (request_dump_no_crash_keys) { - remote_thread = request_dump_no_crash_keys(hprocess, crash_key_failure); + if (send_remote_memory) { + remote_thread = InjectDumpForHungInput(hprocess, remote_memory); + } else { + remote_thread = + InjectDumpForHungInputNoCrashKeys(hprocess, crash_key_failure); } DCHECK(remote_thread) << "Failed creating remote thread: error " << GetLastError();
diff --git a/chrome/browser/importer/external_process_importer_client.cc b/chrome/browser/importer/external_process_importer_client.cc index 0bca7e1..26b76c4e 100644 --- a/chrome/browser/importer/external_process_importer_client.cc +++ b/chrome/browser/importer/external_process_importer_client.cc
@@ -10,20 +10,17 @@ #include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "build/build_config.h" -#include "chrome/browser/browser_process.h" #include "chrome/browser/importer/external_process_importer_host.h" #include "chrome/browser/importer/in_process_importer_bridge.h" #include "chrome/common/importer/firefox_importer_utils.h" #include "chrome/common/importer/imported_bookmark_entry.h" #include "chrome/grit/generated_resources.h" #include "components/strings/grit/components_strings.h" -#include "content/public/browser/browser_thread.h" #include "content/public/browser/utility_process_host.h" +#include "content/public/common/service_manager_connection.h" +#include "services/service_manager/public/cpp/connector.h" #include "ui/base/l10n/l10n_util.h" -using content::BrowserThread; -using content::UtilityProcessHost; - ExternalProcessImporterClient::ExternalProcessImporterClient( base::WeakPtr<ExternalProcessImporterHost> importer_host, const importer::SourceProfile& source_profile, @@ -44,12 +41,13 @@ void ExternalProcessImporterClient::Start() { AddRef(); // balanced in Cleanup. - BrowserThread::ID thread_id; - CHECK(BrowserThread::GetCurrentThreadIdentifier(&thread_id)); - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::BindOnce(&ExternalProcessImporterClient::StartProcessOnIOThread, - this, thread_id, mojo::MakeRequest(&profile_import_))); + content::ServiceManagerConnection::GetForProcess() + ->GetConnector() + ->BindInterface(chrome::mojom::kProfileImportServiceName, + &profile_import_); + + profile_import_.set_connection_error_handler( + base::BindOnce(&ExternalProcessImporterClient::OnProcessCrashed, this)); // Dictionary of all localized strings that could be needed by the importer // in the external process. @@ -94,7 +92,7 @@ Release(); } -void ExternalProcessImporterClient::OnProcessCrashed(int exit_code) { +void ExternalProcessImporterClient::OnProcessCrashed() { DLOG(ERROR) << __func__; if (cancelled_) return; @@ -105,11 +103,6 @@ process_importer_host_->Cancel(); } -bool ExternalProcessImporterClient::OnMessageReceived( - const IPC::Message& message) { - return false; -} - void ExternalProcessImporterClient::OnImportStart() { if (cancelled_) return; @@ -286,29 +279,6 @@ Release(); } -void ExternalProcessImporterClient::StartProcessOnIOThread( - BrowserThread::ID thread_id, - chrome::mojom::ProfileImportRequest request) { - // Deletes itself when the external process dies. - UtilityProcessHost* utility_process_host = UtilityProcessHost::Create( - this, BrowserThread::GetTaskRunnerForThread(thread_id).get()); - utility_process_host->SetName( - l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_PROFILE_IMPORTER_NAME)); - utility_process_host->SetSandboxType(content::SANDBOX_TYPE_NO_SANDBOX); - -#if defined(OS_MACOSX) - base::EnvironmentMap env; - std::string dylib_path = GetFirefoxDylibPath().value(); - if (!dylib_path.empty()) - env["DYLD_FALLBACK_LIBRARY_PATH"] = dylib_path; - utility_process_host->SetEnv(env); -#endif - - utility_process_host->Start(); - chrome::mojom::ProfileImportPtr profile_import; - BindInterface(utility_process_host, std::move(request)); -} - void ExternalProcessImporterClient::CloseMojoHandles() { profile_import_.reset(); binding_.Close();
diff --git a/chrome/browser/importer/external_process_importer_client.h b/chrome/browser/importer/external_process_importer_client.h index edf5cc05..864a695 100644 --- a/chrome/browser/importer/external_process_importer_client.h +++ b/chrome/browser/importer/external_process_importer_client.h
@@ -13,6 +13,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" +#include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/strings/string16.h" #include "build/build_config.h" @@ -22,8 +23,6 @@ #include "chrome/common/importer/profile_import.mojom.h" #include "components/favicon_base/favicon_usage_data.h" #include "components/history/core/browser/history_types.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/utility_process_host_client.h" #include "mojo/public/cpp/bindings/binding.h" class ExternalProcessImporterHost; @@ -34,10 +33,6 @@ struct PasswordForm; } -namespace content{ -class UtilityProcessHost; -} - namespace importer { #if defined(OS_WIN) struct ImporterIE7PasswordInfo; @@ -50,8 +45,8 @@ // collects notifications from this process host and feeds data back to the // importer host, who actually does the writing. class ExternalProcessImporterClient - : public content::UtilityProcessHostClient, - public chrome::mojom::ProfileImportObserver { + : public chrome::mojom::ProfileImportObserver, + public base::RefCounted<ExternalProcessImporterClient> { public: ExternalProcessImporterClient( base::WeakPtr<ExternalProcessImporterHost> importer_host, @@ -65,10 +60,6 @@ // Called by the ExternalProcessImporterHost on import cancel. void Cancel(); - // UtilityProcessHostClient implementation: - void OnProcessCrashed(int exit_code) override; - bool OnMessageReceived(const IPC::Message& message) override; - // chrome::mojom::ProfileImportObserver: void OnImportStart() override; void OnImportFinished(bool succeeded, const std::string& error_msg) override; @@ -104,13 +95,14 @@ ~ExternalProcessImporterClient() override; private: + friend class base::RefCounted<ExternalProcessImporterClient>; + + // Invoked if the ProfileImport service process crashes. + void OnProcessCrashed(); + // Notifies the importerhost that import has finished, and calls Release(). void Cleanup(); - // Creates a new UtilityProcessHost, which launches the import process. - void StartProcessOnIOThread(content::BrowserThread::ID thread_id, - chrome::mojom::ProfileImportRequest request); - // The Mojo connections need to be torn down on the same thread that created // them, but the destructor is not guaranteed to be run on that thread so we // tear down the connections explicitly.
diff --git a/chrome/browser/media/android/router/media_router_android_bridge.h b/chrome/browser/media/android/router/media_router_android_bridge.h index eb76fe0..e3c140a 100644 --- a/chrome/browser/media/android/router/media_router_android_bridge.h +++ b/chrome/browser/media/android/router/media_router_android_bridge.h
@@ -20,7 +20,7 @@ class MediaRouterAndroidBridge { public: explicit MediaRouterAndroidBridge(MediaRouterAndroid* router); - ~MediaRouterAndroidBridge(); + virtual ~MediaRouterAndroidBridge(); // Implement the corresponding calls for the MediaRouterAndroid class. // Virtual so could be overridden by tests.
diff --git a/chrome/browser/media/android/router/media_router_android_unittest.cc b/chrome/browser/media/android/router/media_router_android_unittest.cc index 5af89ba..ee07a35 100644 --- a/chrome/browser/media/android/router/media_router_android_unittest.cc +++ b/chrome/browser/media/android/router/media_router_android_unittest.cc
@@ -24,7 +24,7 @@ class MockMediaRouterAndroidBridge : public MediaRouterAndroidBridge { public: MockMediaRouterAndroidBridge() : MediaRouterAndroidBridge(nullptr) {} - ~MockMediaRouterAndroidBridge() = default; + ~MockMediaRouterAndroidBridge() override = default; MOCK_METHOD7(CreateRoute, void(const MediaSource::Id&, @@ -107,9 +107,6 @@ Expectation createRouteExpectation = EXPECT_CALL(*mock_bridge_, CreateRoute(_, _, _, _, _, _, 1)) .WillOnce(Return()); - EXPECT_CALL(*mock_bridge_, DetachRoute("route")) - .After(createRouteExpectation) - .WillOnce(Return()); router_->CreateRoute("source", "sink", url::Origin(), nullptr, std::vector<MediaRouteResponseCallback>(),
diff --git a/chrome/browser/media/cdm_storage_id.cc b/chrome/browser/media/cdm_storage_id.cc deleted file mode 100644 index b88c801..0000000 --- a/chrome/browser/media/cdm_storage_id.cc +++ /dev/null
@@ -1,18 +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 "chrome/browser/media/cdm_storage_id.h" - -#include "base/callback.h" - -namespace cdm_storage_id { - -void ComputeStorageId(const std::vector<uint8_t>& salt, - const url::Origin& origin, - CdmStorageIdCallback callback) { - // Not implemented by default. - std::move(callback).Run(std::vector<uint8_t>()); -} - -} // namespace cdm_storage_id
diff --git a/chrome/browser/media/cdm_storage_id.h b/chrome/browser/media/cdm_storage_id.h deleted file mode 100644 index 3065c41e..0000000 --- a/chrome/browser/media/cdm_storage_id.h +++ /dev/null
@@ -1,31 +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 CHROME_BROWSER_MEDIA_CDM_STORAGE_ID_H_ -#define CHROME_BROWSER_MEDIA_CDM_STORAGE_ID_H_ - -#include <stdint.h> - -#include <vector> - -#include "base/callback_forward.h" -#include "url/origin.h" - -// This handles computing the Storage Id for platform verification. -namespace cdm_storage_id { - -using CdmStorageIdCallback = - base::OnceCallback<void(const std::vector<uint8_t>& storage_id)>; - -// Compute the Storage Id based on |salt| and |origin|. This may be -// asynchronous, so call |callback| with the result. If Storage Id is not -// supported on the current platform, an empty string will be passed to -// |callback|. -void ComputeStorageId(const std::vector<uint8_t>& salt, - const url::Origin& origin, - CdmStorageIdCallback callback); - -} // namespace cdm_storage_id - -#endif // CHROME_BROWSER_MEDIA_CDM_STORAGE_ID_H_
diff --git a/chrome/browser/media/encrypted_media_browsertest.cc b/chrome/browser/media/encrypted_media_browsertest.cc index 39d0f76..ce712f6 100644 --- a/chrome/browser/media/encrypted_media_browsertest.cc +++ b/chrome/browser/media/encrypted_media_browsertest.cc
@@ -86,7 +86,7 @@ const char kWebMVP8VideoOnly[] = "video/webm; codecs=\"vp8\""; #endif #if BUILDFLAG(USE_PROPRIETARY_CODECS) -const char kMP4VideoOnly[] = "video/mp4; codecs=\"avc1.4D000C\""; +const char kMP4VideoOnly[] = "video/mp4; codecs=\"avc1.64001E\""; const char kMP4VideoVp9Only[] = "video/mp4; codecs=\"vp09.00.10.08.01.02.02.02.00\""; #endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
diff --git a/chrome/browser/media/media_engagement_service.cc b/chrome/browser/media/media_engagement_service.cc index 1962253..ade0489 100644 --- a/chrome/browser/media/media_engagement_service.cc +++ b/chrome/browser/media/media_engagement_service.cc
@@ -14,9 +14,11 @@ #include "chrome/browser/media/media_engagement_score.h" #include "chrome/browser/media/media_engagement_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/common/pref_names.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/content_settings.h" #include "components/history/core/browser/history_service.h" +#include "components/prefs/pref_service.h" #include "content/public/browser/web_contents.h" #include "media/base/media_switches.h" @@ -59,6 +61,10 @@ return playback_time >= delete_begin && playback_time <= delete_end; } +// The current schema version of the MEI data. If this value is higher +// than the stored value, all MEI data will be wiped. +static const int kSchemaVersion = 1; + } // namespace const char MediaEngagementService::kHistogramScoreAtStartupName[] = @@ -87,6 +93,12 @@ new MediaEngagementContentsObserver(web_contents, service)); } +// static +void MediaEngagementService::RegisterProfilePrefs( + user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterIntegerPref(prefs::kMediaEngagementSchemaVersion, 0, 0); +} + MediaEngagementService::MediaEngagementService(Profile* profile) : MediaEngagementService(profile, base::MakeUnique<base::DefaultClock>()) {} @@ -102,12 +114,29 @@ if (history) history->AddObserver(this); + // If kSchemaVersion is higher than what we have stored we should wipe + // all Media Engagement data. + if (GetSchemaVersion() < kSchemaVersion) { + HostContentSettingsMapFactory::GetForProfile(profile_) + ->ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_MEDIA_ENGAGEMENT); + SetSchemaVersion(kSchemaVersion); + } + // Record the stored scores to a histogram. RecordStoredScoresToHistogram(); } MediaEngagementService::~MediaEngagementService() = default; +int MediaEngagementService::GetSchemaVersion() const { + return profile_->GetPrefs()->GetInteger(prefs::kMediaEngagementSchemaVersion); +} + +void MediaEngagementService::SetSchemaVersion(int version) { + return profile_->GetPrefs()->SetInteger(prefs::kMediaEngagementSchemaVersion, + version); +} + void MediaEngagementService::ClearDataBetweenTime( const base::Time& delete_begin, const base::Time& delete_end) {
diff --git a/chrome/browser/media/media_engagement_service.h b/chrome/browser/media/media_engagement_service.h index 77861c0e..f0f5e46 100644 --- a/chrome/browser/media/media_engagement_service.h +++ b/chrome/browser/media/media_engagement_service.h
@@ -14,6 +14,7 @@ #include "chrome/browser/media/media_engagement_score_details.mojom.h" #include "components/history/core/browser/history_service_observer.h" #include "components/keyed_service/core/keyed_service.h" +#include "components/pref_registry/pref_registry_syncable.h" class GURL; class MediaEngagementContentsObserver; @@ -45,6 +46,9 @@ // WebContentsObserver. static void CreateWebContentsObserver(content::WebContents* web_contents); + // Register profile prefs in the pref registry. + static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); + explicit MediaEngagementService(Profile* profile); ~MediaEngagementService() override; @@ -113,6 +117,9 @@ // Records all the stored scores to a histogram. void RecordStoredScoresToHistogram(); + int GetSchemaVersion() const; + void SetSchemaVersion(int); + DISALLOW_COPY_AND_ASSIGN(MediaEngagementService); };
diff --git a/chrome/browser/media/media_engagement_service_unittest.cc b/chrome/browser/media/media_engagement_service_unittest.cc index 6aa8f0e..b85ff68 100644 --- a/chrome/browser/media/media_engagement_service_unittest.cc +++ b/chrome/browser/media/media_engagement_service_unittest.cc
@@ -116,8 +116,8 @@ new MediaEngagementService(profile(), base::WrapUnique(test_clock_))); } - void StartNewMediaEngagementService() { - MediaEngagementService::Get(profile()); + MediaEngagementService* StartNewMediaEngagementService() { + return MediaEngagementService::Get(profile()); } void RecordVisitAndPlaybackAndAdvanceClock(GURL url) { @@ -206,6 +206,8 @@ return service_->HasHighEngagement(url); } + void SetSchemaVersion(int version) { service_->SetSchemaVersion(version); } + private: base::SimpleTestClock* test_clock_ = nullptr; @@ -504,3 +506,20 @@ EXPECT_FALSE(HasHighEngagement(url2)); EXPECT_FALSE(HasHighEngagement(url3)); } + +TEST_F(MediaEngagementServiceTest, SchemaVersion_Changed) { + GURL url("https://www.google.com"); + SetScores(url, 1, 2); + + SetSchemaVersion(0); + MediaEngagementService* service = StartNewMediaEngagementService(); + ExpectScores(service, url, 0.0, 0, 0, TimeNotSet()); +} + +TEST_F(MediaEngagementServiceTest, SchemaVersion_Same) { + GURL url("https://www.google.com"); + SetScores(url, 1, 2); + + MediaEngagementService* service = StartNewMediaEngagementService(); + ExpectScores(service, url, 0.0, 1, 2, TimeNotSet()); +}
diff --git a/chrome/browser/media/media_storage_id_salt.cc b/chrome/browser/media/media_storage_id_salt.cc deleted file mode 100644 index 4d51884e..0000000 --- a/chrome/browser/media/media_storage_id_salt.cc +++ /dev/null
@@ -1,46 +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 "chrome/browser/media/media_storage_id_salt.h" - -#include <string> - -#include "base/logging.h" -#include "base/strings/string_number_conversions.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/prefs/pref_service.h" -#include "crypto/random.h" - -namespace { - -const char kMediaStorageIdSalt[] = "media.storage_id_salt"; - -} // namespace - -std::vector<uint8_t> MediaStorageIdSalt::GetSalt(PrefService* pref_service) { - // Salt is stored as hex-encoded string. - std::string encoded_salt = pref_service->GetString(kMediaStorageIdSalt); - std::vector<uint8_t> salt; - if (encoded_salt.length() != kSaltLength * 2 || - !base::HexStringToBytes(encoded_salt, &salt)) { - // If the salt is not the proper format log an error. - if (encoded_salt.length() > 0) { - DLOG(ERROR) << "Saved value for " << kMediaStorageIdSalt - << " is not valid: " << encoded_salt; - // Continue on to generate a new one. - } - - // If the salt doesn't exist, generate a new one. - salt.resize(kSaltLength); - crypto::RandBytes(salt.data(), salt.size()); - encoded_salt = base::HexEncode(salt.data(), salt.size()); - pref_service->SetString(kMediaStorageIdSalt, encoded_salt); - } - - return salt; -} - -void MediaStorageIdSalt::RegisterProfilePrefs(PrefRegistrySimple* registry) { - registry->RegisterStringPref(kMediaStorageIdSalt, std::string()); -}
diff --git a/chrome/browser/media/media_storage_id_salt.h b/chrome/browser/media/media_storage_id_salt.h deleted file mode 100644 index 7b7e1dd8..0000000 --- a/chrome/browser/media/media_storage_id_salt.h +++ /dev/null
@@ -1,32 +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 CHROME_BROWSER_MEDIA_MEDIA_STORAGE_ID_SALT_H_ -#define CHROME_BROWSER_MEDIA_MEDIA_STORAGE_ID_SALT_H_ - -#include <stdint.h> - -#include <vector> - -#include "base/macros.h" - -class PrefRegistrySimple; -class PrefService; - -// MediaStorageIDSalt is responsible for creating and retrieving a salt string -// that is used when creating Storage IDs. -class MediaStorageIdSalt { - public: - enum { kSaltLength = 32 }; - - // Retrieves the current salt. If one does not currently exist it is created. - static std::vector<uint8_t> GetSalt(PrefService* pref_service); - - static void RegisterProfilePrefs(PrefRegistrySimple* registry); - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(MediaStorageIdSalt); -}; - -#endif // CHROME_BROWSER_MEDIA_MEDIA_STORAGE_ID_SALT_H_
diff --git a/chrome/browser/media/media_storage_id_salt_unittest.cc b/chrome/browser/media/media_storage_id_salt_unittest.cc deleted file mode 100644 index e644a2b6..0000000 --- a/chrome/browser/media/media_storage_id_salt_unittest.cc +++ /dev/null
@@ -1,53 +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 "chrome/browser/media/media_storage_id_salt.h" - -#include "components/prefs/testing_pref_service.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -const char kPrefsName[] = "media.storage_id_salt"; - -TEST(MediaStorageIdSalt, Register) { - TestingPrefServiceSimple prefs; - - MediaStorageIdSalt::RegisterProfilePrefs(prefs.registry()); -} - -TEST(MediaStorageIdSalt, Create) { - TestingPrefServiceSimple prefs; - - MediaStorageIdSalt::RegisterProfilePrefs(prefs.registry()); - std::vector<uint8_t> salt = MediaStorageIdSalt::GetSalt(&prefs); - EXPECT_EQ(MediaStorageIdSalt::kSaltLength, salt.size()); -} - -TEST(MediaStorageIdSalt, Recreate) { - TestingPrefServiceSimple prefs; - - MediaStorageIdSalt::RegisterProfilePrefs(prefs.registry()); - std::vector<uint8_t> original_salt = MediaStorageIdSalt::GetSalt(&prefs); - EXPECT_EQ(MediaStorageIdSalt::kSaltLength, original_salt.size()); - - // Now that the salt is created, mess it up and then try fetching it again - // (should generate a new salt and log an error). - prefs.SetString(kPrefsName, "123"); - std::vector<uint8_t> new_salt = MediaStorageIdSalt::GetSalt(&prefs); - EXPECT_EQ(MediaStorageIdSalt::kSaltLength, new_salt.size()); - EXPECT_NE(original_salt, new_salt); -} - -TEST(MediaStorageIdSalt, FetchTwice) { - TestingPrefServiceSimple prefs; - - MediaStorageIdSalt::RegisterProfilePrefs(prefs.registry()); - std::vector<uint8_t> salt1 = MediaStorageIdSalt::GetSalt(&prefs); - EXPECT_EQ(MediaStorageIdSalt::kSaltLength, salt1.size()); - - // Fetch the salt again. Should be the same value. - std::vector<uint8_t> salt2 = MediaStorageIdSalt::GetSalt(&prefs); - EXPECT_EQ(MediaStorageIdSalt::kSaltLength, salt2.size()); - EXPECT_EQ(salt1, salt2); -}
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 8b6fbc21..c5ba8952b 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
@@ -154,6 +154,11 @@ dns_sd_registry_->RegisterDnsSdListener(kCastServiceType); } +void CastMediaSinkService::ForceDiscovery() { + if (dns_sd_registry_) + dns_sd_registry_->ForceDiscovery(); +} + void CastMediaSinkService::OnDnsSdEvent( const std::string& service_type, const DnsSdRegistry::DnsSdServiceList& services) {
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h index 3505b64a..a75ce45 100644 --- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h +++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h
@@ -52,6 +52,10 @@ void SetDnsSdRegistryForTest(DnsSdRegistry* registry); + // Forces a mDNS discovery if the service has been started; No-op otherwise. + // It is invoked by OnUserGesture(). + void ForceDiscovery(); + protected: ~CastMediaSinkService() override;
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 0bd9258..a729f0f 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
@@ -109,6 +109,7 @@ TEST_F(CastMediaSinkServiceTest, TestResetBeforeStop) { EXPECT_CALL(test_dns_sd_registry_, AddObserver(media_sink_service_.get())); EXPECT_CALL(test_dns_sd_registry_, RegisterDnsSdListener(_)); + media_sink_service_->SetDnsSdRegistryForTest(&test_dns_sd_registry_); media_sink_service_->Start(); @@ -153,6 +154,17 @@ base::RunLoop().RunUntilIdle(); } +TEST_F(CastMediaSinkServiceTest, TestForceDiscovery) { + EXPECT_CALL(test_dns_sd_registry_, ForceDiscovery()).Times(0); + media_sink_service_->ForceDiscovery(); + + EXPECT_CALL(test_dns_sd_registry_, AddObserver(media_sink_service_.get())); + EXPECT_CALL(test_dns_sd_registry_, RegisterDnsSdListener(_)); + EXPECT_CALL(test_dns_sd_registry_, ForceDiscovery()); + media_sink_service_->SetDnsSdRegistryForTest(&test_dns_sd_registry_); + media_sink_service_->ForceDiscovery(); +} + TEST_F(CastMediaSinkServiceTest, TestOnDnsSdEvent) { DnsSdService service1 = CreateDnsService(1); DnsSdService service2 = CreateDnsService(2);
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc index bb23bae..abb2218 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
@@ -297,7 +297,11 @@ issue_manager_.ClearIssue(issue_id); } -void MediaRouterMojoImpl::OnUserGesture() {} +void MediaRouterMojoImpl::OnUserGesture() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (cast_media_sink_service_) + cast_media_sink_service_->ForceDiscovery(); +} void MediaRouterMojoImpl::SearchSinks( const MediaSink::Id& sink_id,
diff --git a/chrome/browser/media/webrtc/webrtc_rtp_browsertest.cc b/chrome/browser/media/webrtc/webrtc_rtp_browsertest.cc index a71217a..808f0a6 100644 --- a/chrome/browser/media/webrtc/webrtc_rtp_browsertest.cc +++ b/chrome/browser/media/webrtc/webrtc_rtp_browsertest.cc
@@ -375,3 +375,9 @@ EXPECT_EQ("ok", ExecuteJavascript("createReceiverWithSetRemoteDescription()", left_tab_)); } + +IN_PROC_BROWSER_TEST_F(WebRtcRtpBrowserTest, SwitchRemoteStreamAndBackAgain) { + StartServerAndOpenTabs(); + EXPECT_EQ("ok", + ExecuteJavascript("switchRemoteStreamAndBackAgain()", left_tab_)); +}
diff --git a/chrome/browser/metrics/chrome_stability_metrics_provider_unittest.cc b/chrome/browser/metrics/chrome_stability_metrics_provider_unittest.cc index f098331..528e2f9 100644 --- a/chrome/browser/metrics/chrome_stability_metrics_provider_unittest.cc +++ b/chrome/browser/metrics/chrome_stability_metrics_provider_unittest.cc
@@ -5,8 +5,6 @@ #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" #include "base/macros.h" -#include "base/test/histogram_tester.h" -#include "build/build_config.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" @@ -71,7 +69,6 @@ } TEST_F(ChromeStabilityMetricsProviderTest, NotificationObserver) { - base::HistogramTester histogram_tester; ChromeStabilityMetricsProvider provider(prefs()); std::unique_ptr<TestingProfileManager> profile_manager( new TestingProfileManager(TestingBrowserProcess::GetGlobal())); @@ -131,13 +128,7 @@ // be executed immediately. provider.ProvideStabilityMetrics(&system_profile); -#if defined(OS_ANDROID) - EXPECT_EQ( - 2u, - histogram_tester.GetAllSamples("Stability.Android.RendererCrash").size()); -#else EXPECT_EQ(2, system_profile.stability().renderer_crash_count()); -#endif EXPECT_EQ(1, system_profile.stability().renderer_failed_launch_count()); EXPECT_EQ(0, system_profile.stability().extension_renderer_crash_count());
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter.cc b/chrome/browser/metrics/process_memory_metrics_emitter.cc index 0169163f..5d493e6d 100644 --- a/chrome/browser/metrics/process_memory_metrics_emitter.cc +++ b/chrome/browser/metrics/process_memory_metrics_emitter.cc
@@ -248,8 +248,10 @@ private_footprint_total_kb += pmd->os_dump->private_footprint_kb; switch (pmd->process_type) { case memory_instrumentation::mojom::ProcessType::BROWSER: { - EmitBrowserMemoryMetrics(pmd, ukm::UkmRecorder::GetNewSourceID(), - GetUkmRecorder()); + // Create a separate source for each non-renderer process type. + ukm::SourceId source_id = ukm::UkmRecorder::GetNewSourceID(); + ukm::UkmRecorder::Get()->UpdateSourceURL(source_id, GURL()); + EmitBrowserMemoryMetrics(pmd, source_id, GetUkmRecorder()); break; } case memory_instrumentation::mojom::ProcessType::RENDERER: { @@ -270,8 +272,10 @@ break; } case memory_instrumentation::mojom::ProcessType::GPU: { - EmitGpuMemoryMetrics(pmd, ukm::UkmRecorder::GetNewSourceID(), - GetUkmRecorder()); + // Create a separate source for each non-renderer process type. + ukm::SourceId source_id = ukm::UkmRecorder::GetNewSourceID(); + ukm::UkmRecorder::Get()->UpdateSourceURL(source_id, GURL()); + EmitGpuMemoryMetrics(pmd, source_id, GetUkmRecorder()); break; } case memory_instrumentation::mojom::ProcessType::UTILITY: @@ -286,7 +290,9 @@ UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Total.PrivateMemoryFootprint", private_footprint_total_kb / 1024); - ukm::builders::Memory_Experimental(ukm::UkmRecorder::GetNewSourceID()) + ukm::SourceId source_id = ukm::UkmRecorder::GetNewSourceID(); + ukm::UkmRecorder::Get()->UpdateSourceURL(source_id, GURL()); + ukm::builders::Memory_Experimental(source_id) .SetTotal2_PrivateMemoryFootprint(private_footprint_total_kb / 1024) .Record(GetUkmRecorder()); }
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc index 5fcd59e..5971506 100644 --- a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc +++ b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
@@ -217,41 +217,68 @@ void CheckAllUkmSources(size_t metric_count = 1u) { const std::map<ukm::SourceId, std::unique_ptr<ukm::UkmSource>>& sources = test_ukm_recorder_->GetSources(); + ASSERT_NE(0U, test_ukm_recorder_->entries_count()); + ASSERT_NE(0U, test_ukm_recorder_->sources_count()); + size_t browser_count = 0; + size_t renderer_count = 0; for (auto& pair : sources) { const ukm::UkmSource* source = pair.second.get(); if (ProcessHasTypeForSource(source, ProcessType::BROWSER)) { - CheckUkmBrowserSource(source, metric_count); + CheckUkmBrowserSource(source, 1); + ++browser_count; } else if (ProcessHasTypeForSource(source, ProcessType::RENDERER)) { CheckUkmRendererSource(source, metric_count); + ++renderer_count; + } else if (ProcessHasTypeForSource(source, ProcessType::GPU)) { + CheckMemoryMetricWithName(source, "Malloc", false, 1); + CheckMemoryMetricWithName(source, "PrivateMemoryFootprint", false, 1); } else { // This must be Total2. CheckMemoryMetricWithName(source, "Total2.PrivateMemoryFootprint", - false, metric_count); + false, 1); } } + + // Each browser process is given a new source, so we expect |metric_count| + // of them. + ASSERT_EQ(browser_count, metric_count); + + // Each renderer should be navigated to the same URL, so we expect exactly + // one source. However, temporary renderers might cause there to be multiple + // sources. + ASSERT_GE(renderer_count, 1u); } void CheckMemoryMetricWithName(const ukm::UkmSource* source, const char* name, bool can_be_zero, - size_t metric_count = 1u) { + size_t metric_count = 1u, + bool metric_count_can_double = false) { std::vector<int64_t> metrics = test_ukm_recorder_->GetMetrics(*source, UkmEventName, name); - EXPECT_EQ(metric_count, metrics.size()); + if (metric_count_can_double) { + ASSERT_TRUE(metrics.size() >= metric_count && + metrics.size() <= 2 * metric_count) + << name << " " << metrics.size(); + } else { + ASSERT_EQ(metric_count, metrics.size()) << name; + } EXPECT_GE(metrics[0], can_be_zero ? 0 : 1) << name; EXPECT_LE(metrics[0], 4000) << name; } void CheckUkmRendererSource(const ukm::UkmSource* source, size_t metric_count = 1u) { - CheckMemoryMetricWithName(source, "Malloc", false, metric_count); - CheckMemoryMetricWithName(source, "Resident", false, metric_count); + CheckMemoryMetricWithName(source, "Malloc", false, metric_count, true); + CheckMemoryMetricWithName(source, "Resident", false, metric_count, true); CheckMemoryMetricWithName(source, "PrivateMemoryFootprint", false, - metric_count); - CheckMemoryMetricWithName(source, "BlinkGC", true, metric_count); - CheckMemoryMetricWithName(source, "PartitionAlloc", true, metric_count); - CheckMemoryMetricWithName(source, "V8", true, metric_count); - CheckMemoryMetricWithName(source, "NumberOfExtensions", true, metric_count); + metric_count, true); + CheckMemoryMetricWithName(source, "BlinkGC", true, metric_count, true); + CheckMemoryMetricWithName(source, "PartitionAlloc", true, metric_count, + true); + CheckMemoryMetricWithName(source, "V8", true, metric_count, true); + CheckMemoryMetricWithName(source, "NumberOfExtensions", true, metric_count, + true); } void CheckUkmBrowserSource(const ukm::UkmSource* source,
diff --git a/chrome/browser/net/chrome_http_user_agent_settings.cc b/chrome/browser/net/chrome_http_user_agent_settings.cc index 25e3c7d..5d2f98f9 100644 --- a/chrome/browser/net/chrome_http_user_agent_settings.cc +++ b/chrome/browser/net/chrome_http_user_agent_settings.cc
@@ -4,18 +4,71 @@ #include "chrome/browser/net/chrome_http_user_agent_settings.h" +#include "base/feature_list.h" +#include "base/strings/string_piece.h" +#include "base/strings/string_split.h" +#include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "chrome/common/chrome_content_client.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_thread.h" #include "net/http/http_util.h" +namespace { + +// Helper class that builds the list of languages for the Accept-Language +// headers. +// The output is a comma-separated list of languages as string. +// Duplicates are removed. +class AcceptLanguageBuilder { + public: + // Adds a language to the string. + // Duplicates are ignored. + void AddLanguageCode(const std::string& language) { + if (seen_.find(language) == seen_.end()) { + if (str_.empty()) { + base::StringAppendF(&str_, "%s", language.c_str()); + } else { + base::StringAppendF(&str_, ",%s", language.c_str()); + } + seen_.insert(language); + } + } + + // Returns the string constructed up to this point. + std::string GetString() const { return str_; } + + private: + // The string that contains the list of languages, comma-separated. + std::string str_; + // Set the remove duplicates. + std::unordered_set<std::string> seen_; +}; + +// Extract the base language code from a language code. +// If there is no '-' in the code, the original code is returned. +std::string GetBaseLanguageCode(const std::string& language_code) { + const std::vector<std::string> tokens = base::SplitString( + language_code, "-", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + return tokens.empty() ? "" : tokens[0]; +} + +} // namespace + ChromeHttpUserAgentSettings::ChromeHttpUserAgentSettings(PrefService* prefs) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); pref_accept_language_.Init(prefs::kAcceptLanguages, prefs); last_pref_accept_language_ = *pref_accept_language_; + + const std::string accept_languages_str = + base::FeatureList::IsEnabled(features::kUseNewAcceptLanguageHeader) + ? ExpandLanguageList(last_pref_accept_language_) + : last_pref_accept_language_; last_http_accept_language_ = - net::HttpUtil::GenerateAcceptLanguageHeader(last_pref_accept_language_); + net::HttpUtil::GenerateAcceptLanguageHeader(accept_languages_str); + pref_accept_language_.MoveToThread( content::BrowserThread::GetTaskRunnerForThread( content::BrowserThread::IO)); @@ -25,6 +78,35 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::IO); } +std::string ChromeHttpUserAgentSettings::ExpandLanguageList( + const std::string& language_prefs) { + const std::vector<std::string> languages = base::SplitString( + language_prefs, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + + if (languages.empty()) + return ""; + + AcceptLanguageBuilder builder; + + const int size = languages.size(); + for (int i = 0; i < size; ++i) { + const std::string& language = languages[i]; + builder.AddLanguageCode(language); + + // Extract the base language + const std::string& base_language = GetBaseLanguageCode(language); + + // Look ahead and add the base language if the next language is not part + // of the same family. + const int j = i + 1; + if (j >= size || GetBaseLanguageCode(languages[j]) != base_language) { + builder.AddLanguageCode(base_language); + } + } + + return builder.GetString(); +} + void ChromeHttpUserAgentSettings::CleanupOnUIThread() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); pref_accept_language_.Destroy(); @@ -33,11 +115,17 @@ std::string ChromeHttpUserAgentSettings::GetAcceptLanguage() const { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); std::string new_pref_accept_language = *pref_accept_language_; + if (new_pref_accept_language != last_pref_accept_language_) { + const std::string accept_languages_str = + base::FeatureList::IsEnabled(features::kUseNewAcceptLanguageHeader) + ? ExpandLanguageList(new_pref_accept_language) + : new_pref_accept_language; last_http_accept_language_ = - net::HttpUtil::GenerateAcceptLanguageHeader(new_pref_accept_language); + net::HttpUtil::GenerateAcceptLanguageHeader(accept_languages_str); last_pref_accept_language_ = new_pref_accept_language; } + return last_http_accept_language_; }
diff --git a/chrome/browser/net/chrome_http_user_agent_settings.h b/chrome/browser/net/chrome_http_user_agent_settings.h index 4bef1cd6..031bb2f 100644 --- a/chrome/browser/net/chrome_http_user_agent_settings.h +++ b/chrome/browser/net/chrome_http_user_agent_settings.h
@@ -23,6 +23,9 @@ // Must be called on the IO thread. ~ChromeHttpUserAgentSettings() override; + // Adds the base language if a corresponding language+region code is present. + static std::string ExpandLanguageList(const std::string& language_prefs); + void CleanupOnUIThread(); // net::HttpUserAgentSettings implementation
diff --git a/chrome/browser/net/chrome_http_user_agent_settings_unittest.cc b/chrome/browser/net/chrome_http_user_agent_settings_unittest.cc new file mode 100644 index 0000000..5f4f65f --- /dev/null +++ b/chrome/browser/net/chrome_http_user_agent_settings_unittest.cc
@@ -0,0 +1,39 @@ +// Copyright (c) 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 "chrome/browser/net/chrome_http_user_agent_settings.h" + +#include "testing/gtest/include/gtest/gtest.h" + +// Test the expansion of the Language List. +TEST(ChromeHttpUserAgentSettings, ExpandLanguageList) { + std::string output = ChromeHttpUserAgentSettings::ExpandLanguageList(""); + EXPECT_EQ("", output); + + output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US"); + EXPECT_EQ("en-US,en", output); + + output = ChromeHttpUserAgentSettings::ExpandLanguageList("fr"); + EXPECT_EQ("fr", output); + + // The base language is added after all regional codes... + output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA"); + EXPECT_EQ("en-US,en-CA,en", output); + + // ... but before other language families. + output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA,fr"); + EXPECT_EQ("en-US,en-CA,en,fr", output); + + output = + ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA,fr,en-AU"); + EXPECT_EQ("en-US,en-CA,en,fr,en-AU", output); + + output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA,fr-CA"); + EXPECT_EQ("en-US,en-CA,en,fr-CA,fr", output); + + // Add a base language even if it's already in the list. + output = ChromeHttpUserAgentSettings::ExpandLanguageList( + "en-US,fr-CA,it,fr,es-AR,it-IT"); + EXPECT_EQ("en-US,en,fr-CA,fr,it,es-AR,es,it-IT", output); +}
diff --git a/chrome/browser/net/predictor.cc b/chrome/browser/net/predictor.cc index ef77df0..f7a1eb8f 100644 --- a/chrome/browser/net/predictor.cc +++ b/chrome/browser/net/predictor.cc
@@ -961,16 +961,18 @@ void Predictor::LookupFinished(const GURL& url, bool found) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - UrlInfo* info = &results_[url]; + auto info_it = results_.find(url); + UrlInfo* info = &info_it->second; DCHECK(info->HasUrl(url)); - if (info->is_marked_to_delete()) { - results_.erase(url); - } else { - if (found) - info->SetFoundState(); - else - info->SetNoSuchNameState(); - } + bool is_marked_to_delete = info->is_marked_to_delete(); + + if (found) + info->SetFoundState(); + else + info->SetNoSuchNameState(); + + if (is_marked_to_delete) + results_.erase(info_it); } bool Predictor::WouldLikelyProxyURL(const GURL& url) { @@ -1013,8 +1015,9 @@ StartSomeQueuedResolutions(); } -bool Predictor::CongestionControlPerformed(UrlInfo* info) { +bool Predictor::CongestionControlPerformed(Results::iterator info_it) { DCHECK_CURRENTLY_ON(BrowserThread::IO); + UrlInfo* info = &info_it->second; // Note: queue_duration is ONLY valid after we go to assigned state. if (info->queue_duration() < max_dns_queue_delay_) return false; @@ -1023,9 +1026,11 @@ // resolutions, and not have a bogged down system. while (true) { info->RemoveFromQueue(); + results_.erase(info_it); if (work_queue_.IsEmpty()) break; - info = &results_[work_queue_.Pop()]; + info_it = results_.find(work_queue_.Pop()); + info = &info_it->second; info->SetAssignedState(); } return true; @@ -1037,16 +1042,17 @@ while (!work_queue_.IsEmpty() && num_pending_lookups_ < max_concurrent_dns_lookups_) { const GURL url(work_queue_.Pop()); - UrlInfo* info = &results_[url]; + auto info_it = results_.find(url); + UrlInfo* info = &info_it->second; DCHECK(info->HasUrl(url)); info->SetAssignedState(); - info->SetPendingDeleteState(); - if (CongestionControlPerformed(info)) { + if (CongestionControlPerformed(info_it)) { DCHECK(work_queue_.IsEmpty()); return; } + info->SetPendingDeleteState(); int status = content::PreresolveUrl(url_request_context_getter_.get(), url, base::Bind(&Predictor::OnLookupFinished,
diff --git a/chrome/browser/net/predictor.h b/chrome/browser/net/predictor.h index b0ffba47..f6e964a 100644 --- a/chrome/browser/net/predictor.h +++ b/chrome/browser/net/predictor.h
@@ -390,14 +390,13 @@ // resolution of names. Rather than letting this congestion potentially grow // without bounds, we abandon our queued efforts at pre-resolutions in such a // case. - // To do this, we will recycle |info|, as well as all queued items, back to - // the state they had before they were queued up. We can't do anything about - // the resolutions we've already sent off for processing on another thread, so - // we just let them complete. On a slow system, subject to congestion, this - // will greatly reduce the number of resolutions done, but it will assure that - // any resolutions that are done, are in a timely and hence potentially - // helpful manner. - bool CongestionControlPerformed(UrlInfo* info); + // To do this, we will recycle |info_it|, as well as all queued items. + // We can't do anything about the resolutions we've already sent off for + // processing on another thread, so we just let them complete. On a slow + // system, subject to congestion, this will greatly reduce the number of + // resolutions done, but it will assure that any resolutions that are done, + // are in a timely and hence potentially helpful manner. + bool CongestionControlPerformed(Results::iterator info_it); // Take lookup requests from work_queue_ and tell HostResolver to look them up // asynchronously, provided we don't exceed concurrent resolution limit.
diff --git a/chrome/browser/net/predictor_browsertest.cc b/chrome/browser/net/predictor_browsertest.cc index 15d83059..b12d5bc 100644 --- a/chrome/browser/net/predictor_browsertest.cc +++ b/chrome/browser/net/predictor_browsertest.cc
@@ -507,6 +507,9 @@ "127.0.0.1", 44); rule_based_resolver_proc_->AddRuleWithLatency("gmail.com", "127.0.0.1", 63); rule_based_resolver_proc_->AddSimulatedFailure("*.notfound"); + rule_based_resolver_proc_->AddRuleWithLatency( + "slow*.google.com", "127.0.0.1", + Predictor::kMaxSpeculativeResolveQueueDelayMs + 300); rule_based_resolver_proc_->AddRuleWithLatency("delay.google.com", "127.0.0.1", 1000 * 60); } @@ -877,6 +880,28 @@ EXPECT_FALSE(observer()->HasHostBeenLookedUp(delayed_url)); } +IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, CongestionControlTest) { + const int queue_max_size = Predictor::kMaxSpeculativeParallelResolves; + std::vector<GURL> slow_names; + std::vector<GURL> recycled_names; + for (int i = 0; i < queue_max_size; ++i) + slow_names.emplace_back(base::StringPrintf("http://slow%d.google.com", i)); + for (int i = queue_max_size; i < 5; ++i) { + recycled_names.emplace_back( + base::StringPrintf("http://host%d.notfound", i)); + } + + FloodResolveRequestsOnUIThread(slow_names); + FloodResolveRequestsOnUIThread(recycled_names); + + WaitUntilHostsLookedUp(slow_names); + ExpectFoundUrls(slow_names, {}); + for (const auto& name : recycled_names) + EXPECT_FALSE(observer()->HasHostBeenLookedUp(name)); + ExpectValidPeakPendingLookupsOnUI(slow_names.size()); + ExpectNoLookupsAreInProgressOnUIThread(); +} + IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, SimplePreconnectOne) { predictor()->PreconnectUrl( embedded_test_server()->base_url(), GURL(),
diff --git a/chrome/browser/net/url_info.cc b/chrome/browser/net/url_info.cc index e46eaf555..83a8ae3 100644 --- a/chrome/browser/net/url_info.cc +++ b/chrome/browser/net/url_info.cc
@@ -159,7 +159,7 @@ } void UrlInfo::SetFoundState() { - DCHECK(ASSIGNED == state_); + DCHECK(ASSIGNED == state_ || ASSIGNED_BUT_MARKED == state_); state_ = FOUND; resolve_duration_ = GetDuration(); const TimeDelta max_duration = MaxNonNetworkDnsLookupDuration(); @@ -172,7 +172,7 @@ } void UrlInfo::SetNoSuchNameState() { - DCHECK(ASSIGNED == state_); + DCHECK(ASSIGNED == state_ || ASSIGNED_BUT_MARKED == state_); state_ = NO_SUCH_NAME; resolve_duration_ = GetDuration(); #ifndef NDEBUG
diff --git a/chrome/browser/notifications/login_state_notification_blocker_chromeos.h b/chrome/browser/notifications/login_state_notification_blocker_chromeos.h deleted file mode 100644 index 848da5b..0000000 --- a/chrome/browser/notifications/login_state_notification_blocker_chromeos.h +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2013 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_NOTIFICATIONS_LOGIN_STATE_NOTIFICATION_BLOCKER_CHROMEOS_H_ -#define CHROME_BROWSER_NOTIFICATIONS_LOGIN_STATE_NOTIFICATION_BLOCKER_CHROMEOS_H_ - -#include "base/macros.h" -#include "components/session_manager/core/session_manager_observer.h" -#include "ui/message_center/notification_blocker.h" - -// A notification blocker which checks screen lock / login state for ChromeOS. -// This is different from ScreenLockNotificationBlocker because: -// - ScreenLockNotificationBlocker only cares about lock status but ChromeOS -// needs to care about login-screen. -// - ScreenLockNotificationBlocker needs a timer to check the screen lock state -// periodically, but SessionManagerObserver gets the events directly in -// ChromeOS. -// - In ChromeOS, some system notifications are allowed to be shown as popups. -class LoginStateNotificationBlockerChromeOS - : public message_center::NotificationBlocker, - public session_manager::SessionManagerObserver { - public: - explicit LoginStateNotificationBlockerChromeOS( - message_center::MessageCenter* message_center); - ~LoginStateNotificationBlockerChromeOS() override; - - private: - // message_center::NotificationBlocker overrides: - bool ShouldShowNotificationAsPopup( - const message_center::Notification& notification) const override; - - // session_manager::SessionManagerObserver overrides: - void OnSessionStateChanged() override; - - DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerChromeOS); -}; - -#endif // CHROME_BROWSER_NOTIFICATIONS_LOGIN_STATE_NOTIFICATION_BLOCKER_CHROMEOS_H_
diff --git a/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc b/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc index 5bf5931..3e0043b 100644 --- a/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc +++ b/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc
@@ -10,9 +10,10 @@ #include "chrome/browser/chromeos/login/login_manager_test.h" #include "chrome/browser/chromeos/login/startup_utils.h" #include "chrome/browser/chromeos/login/ui/user_adding_screen.h" -#include "chrome/browser/notifications/login_state_notification_blocker_chromeos.h" +#include "components/user_manager/user_manager.h" #include "content/public/test/test_utils.h" #include "ui/message_center/message_center.h" +#include "ui/message_center/message_center_observer.h" using base::UTF8ToUTF16; using namespace testing; @@ -58,28 +59,24 @@ class LoginStateNotificationBlockerChromeOSBrowserTest : public chromeos::LoginManagerTest, - public message_center::NotificationBlocker::Observer { + public message_center::MessageCenterObserver { public: LoginStateNotificationBlockerChromeOSBrowserTest() - : chromeos::LoginManagerTest(false), - state_changed_count_(0) {} + : chromeos::LoginManagerTest(false) {} ~LoginStateNotificationBlockerChromeOSBrowserTest() override {} + void SetUpOnMainThread() override { + message_center::MessageCenter::Get()->AddObserver(this); + chromeos::LoginManagerTest::SetUpOnMainThread(); + } + void TearDownOnMainThread() override { - if (blocker_) - blocker_->RemoveObserver(this); - blocker_.reset(); + message_center::MessageCenter::Get()->RemoveObserver(this); chromeos::LoginManagerTest::TearDownOnMainThread(); } protected: - void CreateBlocker() { - blocker_.reset(new LoginStateNotificationBlockerChromeOS( - message_center::MessageCenter::Get())); - blocker_->AddObserver(this); - } - - // message_center::NotificationBlocker::Observer ovverrides: + // message_center::MessageCenterObserver: void OnBlockingStateChanged( message_center::NotificationBlocker* blocker) override { state_changed_count_++; @@ -91,19 +88,27 @@ return result; } + // Compares the number of notifications before and after adding a notification + // to verify whether the new one is shown. bool ShouldShowNotificationAsPopup( const message_center::NotifierId& notifier_id) { - message_center::Notification notification( - message_center::NOTIFICATION_TYPE_SIMPLE, "browser-id", - UTF8ToUTF16("browser-title"), UTF8ToUTF16("browser-message"), - gfx::Image(), UTF8ToUTF16("browser-source"), GURL(), - notifier_id, message_center::RichNotificationData(), NULL); - return blocker_->ShouldShowNotificationAsPopup(notification); + size_t initial_count = + message_center::MessageCenter::Get()->GetPopupNotifications().size(); + std::string id("browser-id"); + message_center::MessageCenter::Get()->AddNotification( + base::MakeUnique<message_center::Notification>( + message_center::NOTIFICATION_TYPE_SIMPLE, id, + UTF8ToUTF16("browser-title"), UTF8ToUTF16("browser-message"), + gfx::Image(), UTF8ToUTF16("browser-source"), GURL(), notifier_id, + message_center::RichNotificationData(), nullptr)); + size_t new_count = + message_center::MessageCenter::Get()->GetPopupNotifications().size(); + message_center::MessageCenter::Get()->RemoveNotification(id, false); + return new_count == initial_count + 1; } private: - int state_changed_count_; - std::unique_ptr<message_center::NotificationBlocker> blocker_; + int state_changed_count_ = 0; DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerChromeOSBrowserTest); }; @@ -117,9 +122,9 @@ IN_PROC_BROWSER_TEST_F(LoginStateNotificationBlockerChromeOSBrowserTest, BaseTest) { - CreateBlocker(); message_center::NotifierId notifier_id( message_center::NotifierId::APPLICATION, "test-notifier"); + notifier_id.profile_id = kTestUsers[0]; // Logged in as a normal user. LoginUser(kTestUsers[0]); @@ -152,12 +157,11 @@ IN_PROC_BROWSER_TEST_F(LoginStateNotificationBlockerChromeOSBrowserTest, AlwaysAllowedNotifier) { - CreateBlocker(); - // NOTIFIER_DISPLAY is allowed to shown in the login screen. message_center::NotifierId notifier_id( message_center::NotifierId::SYSTEM_COMPONENT, ash::system_notifier::kNotifierDisplay); + notifier_id.profile_id = kTestUsers[0]; // Logged in as a normal user. LoginUser(kTestUsers[0]);
diff --git a/chrome/browser/notifications/message_center_notification_manager.cc b/chrome/browser/notifications/message_center_notification_manager.cc index e2620ce..46c8dbd 100644 --- a/chrome/browser/notifications/message_center_notification_manager.cc +++ b/chrome/browser/notifications/message_center_notification_manager.cc
@@ -29,9 +29,7 @@ #include "ui/message_center/message_center_types.h" #include "ui/message_center/notifier_settings.h" -#if defined(OS_CHROMEOS) -#include "chrome/browser/notifications/login_state_notification_blocker_chromeos.h" -#else +#if !defined(OS_CHROMEOS) #include "chrome/browser/notifications/screen_lock_notification_blocker.h" #endif @@ -47,10 +45,7 @@ message_center_->AddObserver(this); message_center_->SetNotifierSettingsProvider(settings_provider_.get()); -#if defined(OS_CHROMEOS) - blockers_.push_back( - base::MakeUnique<LoginStateNotificationBlockerChromeOS>(message_center)); -#else +#if !defined(OS_CHROMEOS) blockers_.push_back( base::MakeUnique<ScreenLockNotificationBlocker>(message_center)); #endif @@ -268,17 +263,7 @@ void MessageCenterNotificationManager::OnNotificationRemoved( const std::string& id, bool by_user) { - auto iter = profile_notifications_.find(id); - if (iter != profile_notifications_.end()) - RemoveProfileNotification(iter->first); -} - -void MessageCenterNotificationManager::OnCenterVisibilityChanged( - message_center::Visibility visibility) { -} - -void MessageCenterNotificationManager::OnNotificationUpdated( - const std::string& id) { + RemoveProfileNotification(id); } void MessageCenterNotificationManager::SetMessageCenterTrayDelegateForTest(
diff --git a/chrome/browser/notifications/message_center_notification_manager.h b/chrome/browser/notifications/message_center_notification_manager.h index 008e03b6..bfa73ad 100644 --- a/chrome/browser/notifications/message_center_notification_manager.h +++ b/chrome/browser/notifications/message_center_notification_manager.h
@@ -69,8 +69,6 @@ // MessageCenterObserver void OnNotificationRemoved(const std::string& notification_id, bool by_user) override; - void OnCenterVisibilityChanged(message_center::Visibility) override; - void OnNotificationUpdated(const std::string& notification_id) override; // Takes ownership of |delegate|. void SetMessageCenterTrayDelegateForTest(
diff --git a/chrome/browser/notifications/notification_channels_provider_android.cc b/chrome/browser/notifications/notification_channels_provider_android.cc index a3aa827..6a4ba0a 100644 --- a/chrome/browser/notifications/notification_channels_provider_android.cc +++ b/chrome/browser/notifications/notification_channels_provider_android.cc
@@ -169,7 +169,7 @@ std::unique_ptr<NotificationChannelsBridge> bridge, std::unique_ptr<base::Clock> clock) : bridge_(std::move(bridge)), - should_use_channels_(bridge_->ShouldUseChannelSettings()), + platform_supports_channels_(bridge_->ShouldUseChannelSettings()), clock_(std::move(clock)), initialized_cached_channels_(false), weak_factory_(this) {} @@ -180,7 +180,7 @@ void NotificationChannelsProviderAndroid::MigrateToChannelsIfNecessary( PrefService* prefs, content_settings::ProviderInterface* pref_provider) { - if (!should_use_channels_ || + if (!platform_supports_channels_ || prefs->GetBoolean(prefs::kMigratedToSiteNotificationChannels)) { return; } @@ -196,7 +196,7 @@ void NotificationChannelsProviderAndroid::UnmigrateChannelsIfNecessary( PrefService* prefs, content_settings::ProviderInterface* pref_provider) { - if (!should_use_channels_ || + if (!platform_supports_channels_ || !prefs->GetBoolean(prefs::kMigratedToSiteNotificationChannels)) { return; } @@ -224,7 +224,7 @@ const content_settings::ResourceIdentifier& resource_identifier, bool incognito) const { if (content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS || incognito || - !should_use_channels_) { + !platform_supports_channels_) { return nullptr; } std::vector<NotificationChannel> channels = UpdateCachedChannels(); @@ -264,7 +264,7 @@ const content_settings::ResourceIdentifier& resource_identifier, base::Value* value) { if (content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS || - !should_use_channels_) { + !platform_supports_channels_) { return false; } // This provider only handles settings for specific origins. @@ -309,7 +309,7 @@ void NotificationChannelsProviderAndroid::ClearAllContentSettingsRules( ContentSettingsType content_type) { if (content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS || - !should_use_channels_) { + !platform_supports_channels_) { return; } std::vector<NotificationChannel> channels = bridge_->GetChannels(); @@ -332,7 +332,7 @@ ContentSettingsType content_type, const content_settings::ResourceIdentifier& resource_identifier) { if (content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS || - !should_use_channels_) { + !platform_supports_channels_) { return base::Time(); } url::Origin origin = url::Origin(GURL(primary_pattern.ToString()));
diff --git a/chrome/browser/notifications/notification_channels_provider_android.h b/chrome/browser/notifications/notification_channels_provider_android.h index 27ef04f4..6b1df2b 100644 --- a/chrome/browser/notifications/notification_channels_provider_android.h +++ b/chrome/browser/notifications/notification_channels_provider_android.h
@@ -115,7 +115,7 @@ std::unique_ptr<NotificationChannelsBridge> bridge_; - bool should_use_channels_; + bool platform_supports_channels_; std::unique_ptr<base::Clock> clock_;
diff --git a/chrome/browser/notifications/screen_lock_notification_blocker.h b/chrome/browser/notifications/screen_lock_notification_blocker.h index 7644955c..be1e3951 100644 --- a/chrome/browser/notifications/screen_lock_notification_blocker.h +++ b/chrome/browser/notifications/screen_lock_notification_blocker.h
@@ -10,7 +10,9 @@ #include "base/timer/timer.h" #include "ui/message_center/notification_blocker.h" -// A notification blocker which checks the screen lock state constantly. +// A notification blocker which checks the screen lock state for desktop +// platforms other than ChromeOS. The ChromeOS equivalent for this is +// LoginStateNotificationBlocker. class ScreenLockNotificationBlocker : public message_center::NotificationBlocker { public:
diff --git a/chrome/browser/ntp_snippets/content_suggestions_notifier_service_factory.cc b/chrome/browser/ntp_snippets/content_suggestions_notifier_service_factory.cc index 9c80dc45..f240c24 100644 --- a/chrome/browser/ntp_snippets/content_suggestions_notifier_service_factory.cc +++ b/chrome/browser/ntp_snippets/content_suggestions_notifier_service_factory.cc
@@ -65,7 +65,7 @@ ntp_snippets::ContentSuggestionsService* suggestions = ContentSuggestionsServiceFactory::GetForProfile(profile); return new ContentSuggestionsNotifierService( - profile, suggestions, + profile->GetPrefs(), suggestions, base::MakeUnique<AndroidContentSuggestionsNotifier>()); } #endif
diff --git a/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc b/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc index d1de0fc..aaa8b51 100644 --- a/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc +++ b/chrome/browser/ntp_snippets/content_suggestions_service_factory.cc
@@ -68,6 +68,7 @@ #if defined(OS_ANDROID) #include "chrome/browser/android/chrome_feature_list.h" +#include "chrome/browser/android/feature_utilities.h" #include "chrome/browser/android/ntp/ntp_snippets_launcher.h" #include "chrome/browser/download/download_core_service.h" #include "chrome/browser/download/download_core_service_factory.h" @@ -118,6 +119,7 @@ using syncer::SyncService; #if defined(OS_ANDROID) +using chrome::android::GetIsChromeHomeEnabled; using content::DownloadManager; using ntp_snippets::BreakingNewsGCMAppHandler; using ntp_snippets::GetPushUpdatesSubscriptionEndpoint; @@ -150,14 +152,6 @@ namespace { -bool IsChromeHomeEnabled() { -#if defined(OS_ANDROID) - return base::FeatureList::IsEnabled(chrome::android::kChromeHomeFeature); -#else - return false; -#endif -} - #if BUILDFLAG(ENABLE_OFFLINE_PAGES) bool IsRecentTabProviderEnabled() { @@ -199,13 +193,13 @@ #if defined(OS_ANDROID) bool AreAssetDownloadsEnabled() { - return !IsChromeHomeEnabled() && + return !GetIsChromeHomeEnabled() && base::FeatureList::IsEnabled( features::kAssetDownloadSuggestionsFeature); } bool AreOfflinePageDownloadsEnabled() { - return !IsChromeHomeEnabled() && + return !GetIsChromeHomeEnabled() && base::FeatureList::IsEnabled( features::kOfflinePageDownloadSuggestionsFeature); } @@ -244,7 +238,7 @@ return base::FeatureList::IsEnabled( ntp_snippets::kBookmarkSuggestionsFeature) && bookmark_model && // |bookmark_model| can be null in tests. - !IsChromeHomeEnabled(); + !GetIsChromeHomeEnabled(); } void RegisterBookmarkProviderIfEnabled(ContentSuggestionsService* service,
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc index 0b3f940..8348c010 100644 --- a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc
@@ -17,6 +17,8 @@ #include "chrome/common/page_load_metrics/page_load_metrics_constants.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" +#include "extensions/common/constants.h" +#include "url/gurl.h" namespace page_load_metrics { @@ -337,6 +339,12 @@ const mojom::PageLoadTiming& new_timing, const mojom::PageLoadMetadata& new_metadata, const mojom::PageLoadFeatures& new_features) { + if (render_frame_host->GetLastCommittedURL().SchemeIs( + extensions::kExtensionScheme)) { + // Ignore updates from Chrome extensions. + return; + } + if (render_frame_host->GetParent() == nullptr) { UpdateMainFrameMetadata(new_metadata); UpdateMainFrameTiming(new_timing);
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc index 9fad2de..c7504e2 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
@@ -177,6 +177,8 @@ logging_state_active_ = false; } + void BlacklistedFormFound() override {} + private: // autofill::mojom::PasswordAutofillAgent: void FillPasswordForm(
diff --git a/chrome/browser/plugins/pdf_iframe_navigation_throttle.cc b/chrome/browser/plugins/pdf_iframe_navigation_throttle.cc index 3f0c7f88..83445e14 100644 --- a/chrome/browser/plugins/pdf_iframe_navigation_throttle.cc +++ b/chrome/browser/plugins/pdf_iframe_navigation_throttle.cc
@@ -4,7 +4,9 @@ #include "chrome/browser/plugins/pdf_iframe_navigation_throttle.h" +#include "base/feature_list.h" #include "chrome/common/chrome_content_client.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/pdf_uma.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/navigation_handle.h" @@ -63,13 +65,23 @@ content::NavigationThrottle::ThrottleCheckResult PDFIFrameNavigationThrottle::WillProcessResponse() { + const net::HttpResponseHeaders* response_headers = + navigation_handle()->GetResponseHeaders(); + if (!response_headers) + return content::NavigationThrottle::PROCEED; + std::string mime_type; - navigation_handle()->GetResponseHeaders()->GetMimeType(&mime_type); + response_headers->GetMimeType(&mime_type); if (mime_type != kPDFMimeType) return content::NavigationThrottle::PROCEED; + ReportPDFLoadStatus(PDFLoadStatus::kLoadedIframePdfWithNoPdfViewer); + + if (!base::FeatureList::IsEnabled(features::kClickToOpenPDFPlaceholder)) + return content::NavigationThrottle::PROCEED; + std::string html = base::StringPrintf( - R"(<body style="margin: 0;"><object data="%s" type="application/pdf" )" + R"(<body style="margin: 0;"><object data="%s" type="application/pdf" )" R"(style="width: 100%%; height: 100%%;"></object></body>)", navigation_handle()->GetURL().spec().c_str()); GURL data_url("data:text/html," + net::EscapePath(html));
diff --git a/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc b/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc index 2494604..162fef6 100644 --- a/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc +++ b/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc
@@ -5,6 +5,8 @@ #include "chrome/browser/plugins/pdf_iframe_navigation_throttle.h" #include "base/run_loop.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/common/chrome_features.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_profile.h" #include "content/public/browser/navigation_handle.h" @@ -68,8 +70,11 @@ ->InitializeRenderFrameIfNeeded(); subframe_ = content::RenderFrameHostTester::For(main_rfh()) ->AppendChild("subframe"); + + feature_list_.InitAndEnableFeature(features::kClickToOpenPDFPlaceholder); } + base::test::ScopedFeatureList feature_list_; content::RenderFrameHost* subframe_; };
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index c37f982..68315b1 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -589,6 +589,15 @@ { key::kEcryptfsMigrationStrategy, prefs::kEcryptfsMigrationStrategy, base::Value::Type::INTEGER }, + { key::kNativePrintersBulkAccessMode, + prefs::kRecommendedNativePrintersAccessMode, + base::Value::Type::INTEGER }, + { key::kNativePrintersBulkBlacklist, + prefs::kRecommendedNativePrintersBlacklist, + base::Value::Type::LIST }, + { key::kNativePrintersBulkWhitelist, + prefs::kRecommendedNativePrintersWhitelist, + base::Value::Type::LIST }, #endif // defined(OS_CHROMEOS) // Metrics reporting is controlled by a platform specific policy for ChromeOS @@ -1055,6 +1064,8 @@ base::MakeUnique<ExternalDataPolicyHandler>(key::kDeviceWallpaperImage)); handlers->AddHandler( base::MakeUnique<ExternalDataPolicyHandler>(key::kWallpaperImage)); + handlers->AddHandler(base::MakeUnique<ExternalDataPolicyHandler>( + key::kNativePrintersBulkConfiguration)); handlers->AddHandler(base::WrapUnique(new SimpleSchemaValidatingPolicyHandler( key::kSessionLocales, NULL, chrome_schema, SCHEMA_STRICT, SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED,
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 2eb57f0..1263f275 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -27,7 +27,7 @@ #include "chrome/browser/intranet_redirect_detector.h" #include "chrome/browser/io_thread.h" #include "chrome/browser/media/media_device_id_salt.h" -#include "chrome/browser/media/media_storage_id_salt.h" +#include "chrome/browser/media/media_engagement_service.h" #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" #include "chrome/browser/media/webrtc/media_stream_devices_controller.h" #include "chrome/browser/metrics/chrome_metrics_service_client.h" @@ -286,17 +286,6 @@ namespace { -// Deprecated 8/2016. -constexpr char kRecentlySelectedEncoding[] = - "profile.recently_selected_encodings"; -constexpr char kStaticEncodings[] = "intl.static_encodings"; - -// Deprecated 9/2016. -constexpr char kWebKitUsesUniversalDetector[] = - "webkit.webprefs.uses_universal_detector"; -constexpr char kWebKitAllowDisplayingInsecureContent[] = - "webkit.webprefs.allow_displaying_insecure_content"; - #if BUILDFLAG(ENABLE_EXTENSIONS) // Deprecated 2/2017. constexpr char kToolbarMigratedComponentActionStatus[] = @@ -425,7 +414,6 @@ chromeos::SigninScreenHandler::RegisterPrefs(registry); chromeos::StartupUtils::RegisterPrefs(registry); chromeos::system::AutomaticRebootManager::RegisterPrefs(registry); - chromeos::system::InputDeviceSettings::RegisterPrefs(registry); chromeos::TimeZoneResolver::RegisterPrefs(registry); chromeos::UserImageManager::RegisterPrefs(registry); chromeos::UserSessionManager::RegisterPrefs(registry); @@ -489,7 +477,7 @@ language::UrlLanguageHistogram::RegisterProfilePrefs(registry); MediaCaptureDevicesDispatcher::RegisterProfilePrefs(registry); MediaDeviceIDSalt::RegisterProfilePrefs(registry); - MediaStorageIdSalt::RegisterProfilePrefs(registry); + MediaEngagementService::RegisterProfilePrefs(registry); MediaStreamDevicesController::RegisterProfilePrefs(registry); NavigationCorrectionTabObserver::RegisterProfilePrefs(registry); NotifierStateTracker::RegisterProfilePrefs(registry); @@ -667,12 +655,6 @@ // Preferences registered only for migration (clearing or moving to a new key) // go here. - registry->RegisterStringPref(kStaticEncodings, std::string()); - registry->RegisterStringPref(kRecentlySelectedEncoding, std::string()); - registry->RegisterBooleanPref(kWebKitUsesUniversalDetector, true); - - registry->RegisterBooleanPref(kWebKitAllowDisplayingInsecureContent, true); - #if BUILDFLAG(ENABLE_EXTENSIONS) registry->RegisterDictionaryPref(kToolbarMigratedComponentActionStatus); #endif @@ -734,14 +716,6 @@ void MigrateObsoleteProfilePrefs(Profile* profile) { PrefService* profile_prefs = profile->GetPrefs(); - // Added 8/2016. - profile_prefs->ClearPref(kStaticEncodings); - profile_prefs->ClearPref(kRecentlySelectedEncoding); - - // Added 9/2016. - profile_prefs->ClearPref(kWebKitUsesUniversalDetector); - profile_prefs->ClearPref(kWebKitAllowDisplayingInsecureContent); - #if BUILDFLAG(ENABLE_EXTENSIONS) // Added 2/2017. // NOTE(takumif): When removing this code, also remove the following tests:
diff --git a/chrome/browser/printing/pwg_raster_converter_browsertest.cc b/chrome/browser/printing/pwg_raster_converter_browsertest.cc deleted file mode 100644 index 264e0ff..0000000 --- a/chrome/browser/printing/pwg_raster_converter_browsertest.cc +++ /dev/null
@@ -1,104 +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 "chrome/test/base/in_process_browser_test.h" - -#include "base/files/file_util.h" -#include "base/memory/ref_counted_memory.h" -#include "base/path_service.h" -#include "base/run_loop.h" -#include "base/threading/thread_restrictions.h" -#include "chrome/browser/printing/pwg_raster_converter.h" -#include "printing/pdf_render_settings.h" -#include "printing/pwg_raster_settings.h" - -namespace printing { - -namespace { - -void ResultCallbackImpl(bool* called, - bool* success_out, - base::FilePath* temp_file_out, - base::Closure quit_closure, - bool success_in, - const base::FilePath& temp_file_in) { - *called = true; - *success_out = success_in; - *temp_file_out = temp_file_in; - quit_closure.Run(); -} - -class PDFToPWGRasterBrowserTest : public InProcessBrowserTest { - public: - PDFToPWGRasterBrowserTest() - : converter_(PWGRasterConverter::CreateDefault()) {} - ~PDFToPWGRasterBrowserTest() override {} - - void Convert(base::RefCountedMemory* pdf_data, - const PdfRenderSettings& conversion_settings, - const PwgRasterSettings& bitmap_settings, - bool expect_success, - base::FilePath* temp_file) { - bool called = false; - bool success = false; - base::RunLoop run_loop; - converter_->Start(pdf_data, conversion_settings, bitmap_settings, - base::Bind(&ResultCallbackImpl, &called, &success, - temp_file, run_loop.QuitClosure())); - run_loop.Run(); - ASSERT_TRUE(called); - EXPECT_EQ(success, expect_success); - } - - private: - std::unique_ptr<PWGRasterConverter> converter_; -}; - -} // namespace - -IN_PROC_BROWSER_TEST_F(PDFToPWGRasterBrowserTest, TestFailure) { - scoped_refptr<base::RefCountedStaticMemory> bad_pdf_data = - base::MakeRefCounted<base::RefCountedStaticMemory>("0123456789", 10); - base::FilePath temp_file; - Convert(bad_pdf_data.get(), PdfRenderSettings(), PwgRasterSettings(), - /*expect_success=*/false, &temp_file); -} - -IN_PROC_BROWSER_TEST_F(PDFToPWGRasterBrowserTest, TestSuccess) { - base::ThreadRestrictions::ScopedAllowIO allow_io; - - base::FilePath test_data_dir; - ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir)); - base::FilePath pdf_file = test_data_dir.AppendASCII( - "chrome/test/data/printing/pdf_to_pwg_raster_test.pdf"); - std::string pdf_data_str; - ASSERT_TRUE(base::ReadFileToString(pdf_file, &pdf_data_str)); - ASSERT_GT(pdf_data_str.length(), 0U); - scoped_refptr<base::RefCountedString> pdf_data( - base::RefCountedString::TakeString(&pdf_data_str)); - - PdfRenderSettings pdf_settings(gfx::Rect(0, 0, 500, 500), gfx::Point(0, 0), - /*dpi=*/1000, /*autorotate=*/false, - PdfRenderSettings::Mode::NORMAL); - PwgRasterSettings pwg_settings; - pwg_settings.odd_page_transform = PwgRasterTransformType::TRANSFORM_NORMAL; - pwg_settings.rotate_all_pages = false; - pwg_settings.reverse_page_order = false; - - base::FilePath temp_file; - Convert(pdf_data.get(), pdf_settings, pwg_settings, - /*expect_success=*/true, &temp_file); - ASSERT_FALSE(temp_file.empty()); - - base::FilePath pwg_file = test_data_dir.AppendASCII( - "chrome/test/data/printing/pdf_to_pwg_raster_test.pwg"); - - std::string pwg_expected_data_str; - ASSERT_TRUE(base::ReadFileToString(pwg_file, &pwg_expected_data_str)); - std::string pwg_actual_data_str; - ASSERT_TRUE(base::ReadFileToString(temp_file, &pwg_actual_data_str)); - ASSERT_EQ(pwg_expected_data_str, pwg_actual_data_str); -} - -} // namespace printing
diff --git a/chrome/browser/profiling_host/BUILD.gn b/chrome/browser/profiling_host/BUILD.gn index 588301f..533bbbf 100644 --- a/chrome/browser/profiling_host/BUILD.gn +++ b/chrome/browser/profiling_host/BUILD.gn
@@ -19,3 +19,27 @@ "//content/public/common", ] } + +if (!is_android) { + source_set("profiling_browsertests") { + testonly = true + + sources = [ + "memlog_browsertest.cc", + ] + + defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] + + deps = [ + "//base", + "//base/allocator:features", + "//chrome/test:test_support_ui", + "//testing/gmock", + "//testing/gtest", + ] + } +} else { + # In-process browser tests aren't supported on Android. + group("profiling_browsertests") { + } +}
diff --git a/chrome/browser/profiling_host/chrome_browser_main_extra_parts_profiling.cc b/chrome/browser/profiling_host/chrome_browser_main_extra_parts_profiling.cc index 7d4fd28..933605e 100644 --- a/chrome/browser/profiling_host/chrome_browser_main_extra_parts_profiling.cc +++ b/chrome/browser/profiling_host/chrome_browser_main_extra_parts_profiling.cc
@@ -18,5 +18,5 @@ profiling::ProfilingProcessHost::Mode mode = profiling::ProfilingProcessHost::GetCurrentMode(); if (mode != profiling::ProfilingProcessHost::Mode::kNone) - profiling::ProfilingProcessHost::EnsureStarted(connection, mode); + profiling::ProfilingProcessHost::Start(connection, mode); }
diff --git a/chrome/browser/profiling_host/memlog_browsertest.cc b/chrome/browser/profiling_host/memlog_browsertest.cc new file mode 100644 index 0000000..2098ad9 --- /dev/null +++ b/chrome/browser/profiling_host/memlog_browsertest.cc
@@ -0,0 +1,49 @@ +// Copyright (c) 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 "base/allocator/features.h" +#include "chrome/browser/profiling_host/profiling_process_host.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "content/public/test/browser_test.h" +#include "testing/gtest/include/gtest/gtest.h" + +// Some builds don't support the allocator shim in which case the memory long +// won't function. +#if BUILDFLAG(USE_ALLOCATOR_SHIM) + +namespace { + +class MemlogBrowserTest : public InProcessBrowserTest, + public testing::WithParamInterface<const char*> { + protected: + void SetUpDefaultCommandLine(base::CommandLine* command_line) override { + InProcessBrowserTest::SetUpDefaultCommandLine(command_line); + if (GetParam()) + command_line->AppendSwitchASCII(switches::kMemlog, GetParam()); + } +}; + +IN_PROC_BROWSER_TEST_P(MemlogBrowserTest, EndToEnd) { + if (!GetParam()) { + // Test that nothing has been started if the flag is not passed. + ASSERT_FALSE(profiling::ProfilingProcessHost::has_started()); + } else { + ASSERT_TRUE(profiling::ProfilingProcessHost::has_started()); + } +} + +INSTANTIATE_TEST_CASE_P(NoMemlog, + MemlogBrowserTest, + ::testing::Values(static_cast<const char*>(nullptr))); +INSTANTIATE_TEST_CASE_P(BrowserOnly, + MemlogBrowserTest, + ::testing::Values(switches::kMemlogModeBrowser)); +INSTANTIATE_TEST_CASE_P(AllProcesses, + MemlogBrowserTest, + ::testing::Values(switches::kMemlogModeAll)); + +} // namespace + +#endif // BUILDFLAG(USE_ALLOCATOR_SHIM)
diff --git a/chrome/browser/profiling_host/profiling_process_host.cc b/chrome/browser/profiling_host/profiling_process_host.cc index 6fd08ae..82aa9fe 100644 --- a/chrome/browser/profiling_host/profiling_process_host.cc +++ b/chrome/browser/profiling_host/profiling_process_host.cc
@@ -52,6 +52,8 @@ namespace profiling { +bool ProfilingProcessHost::has_started_ = false; + namespace { const size_t kMaxTraceSizeUploadInBytes = 10 * 1024 * 1024; @@ -251,10 +253,12 @@ } // static -ProfilingProcessHost* ProfilingProcessHost::EnsureStarted( +ProfilingProcessHost* ProfilingProcessHost::Start( content::ServiceManagerConnection* connection, Mode mode) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); + CHECK(!has_started_); + has_started_ = true; ProfilingProcessHost* host = GetInstance(); host->SetMode(mode); host->MakeConnector(connection);
diff --git a/chrome/browser/profiling_host/profiling_process_host.h b/chrome/browser/profiling_host/profiling_process_host.h index 4a45f34..c79535736 100644 --- a/chrome/browser/profiling_host/profiling_process_host.h +++ b/chrome/browser/profiling_host/profiling_process_host.h
@@ -61,11 +61,14 @@ // Returns the mode set on the current process' command line. static Mode GetCurrentMode(); - // Launches the profiling process if necessary and returns a pointer to it. - static ProfilingProcessHost* EnsureStarted( + // Launches the profiling process and returns a pointer to it. + static ProfilingProcessHost* Start( content::ServiceManagerConnection* connection, Mode mode); + // Returns true if Start() has been called. + static bool has_started() { return has_started_; } + // Returns a pointer to the current global profiling process host. static ProfilingProcessHost* GetInstance(); @@ -138,6 +141,8 @@ // The mode determines which processes should be profiled. Mode mode_; + static bool has_started_; + DISALLOW_COPY_AND_ASSIGN(ProfilingProcessHost); };
diff --git a/chrome/browser/renderer_context_menu/DEPS b/chrome/browser/renderer_context_menu/DEPS deleted file mode 100644 index dc9a2d7..0000000 --- a/chrome/browser/renderer_context_menu/DEPS +++ /dev/null
@@ -1,6 +0,0 @@ -include_rules = [ - # TODO(mash): Remove. http://crbug.com/724142 - "+ash/link_handler_model.h", - "+ash/link_handler_model_factory.h", - "+ash/shell.h", -]
diff --git a/chrome/browser/renderer_context_menu/open_with_menu_factory.cc b/chrome/browser/renderer_context_menu/open_with_menu_factory.cc deleted file mode 100644 index 426e45be3..0000000 --- a/chrome/browser/renderer_context_menu/open_with_menu_factory.cc +++ /dev/null
@@ -1,12 +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 "chrome/browser/renderer_context_menu/open_with_menu_factory.h" - -#if !defined(USE_ASH) -RenderViewContextMenuObserver* OpenWithMenuFactory::CreateMenu( - RenderViewContextMenuProxy* proxy) { - return nullptr; -} -#endif // !defined(USE_ASH)
diff --git a/chrome/browser/renderer_context_menu/open_with_menu_factory.h b/chrome/browser/renderer_context_menu/open_with_menu_factory.h deleted file mode 100644 index 74e9b02..0000000 --- a/chrome/browser/renderer_context_menu/open_with_menu_factory.h +++ /dev/null
@@ -1,22 +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 CHROME_BROWSER_RENDERER_CONTEXT_MENU_OPEN_WITH_MENU_FACTORY_H_ -#define CHROME_BROWSER_RENDERER_CONTEXT_MENU_OPEN_WITH_MENU_FACTORY_H_ - -#include "base/macros.h" - -class RenderViewContextMenuObserver; -class RenderViewContextMenuProxy; - -class OpenWithMenuFactory { - public: - static RenderViewContextMenuObserver* CreateMenu( - RenderViewContextMenuProxy* proxy); - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(OpenWithMenuFactory); -}; - -#endif // CHROME_BROWSER_RENDERER_CONTEXT_MENU_OPEN_WITH_MENU_FACTORY_H_
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index b0190d7..aaea9a1 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -46,7 +46,6 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_window.h" #include "chrome/browser/renderer_context_menu/context_menu_content_type_factory.h" -#include "chrome/browser/renderer_context_menu/open_with_menu_factory.h" #include "chrome/browser/renderer_context_menu/spelling_menu_observer.h" #include "chrome/browser/search/search.h" #include "chrome/browser/search_engines/template_url_service_factory.h" @@ -153,6 +152,10 @@ #include "ui/base/resource/resource_bundle.h" #endif +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/arc/intent_helper/open_with_menu.h" +#endif + using base::UserMetricsAction; using blink::WebContextMenuData; using blink::WebMediaPlayerAction; @@ -1077,11 +1080,12 @@ } void RenderViewContextMenu::AppendOpenWithLinkItems() { - open_with_menu_observer_.reset(OpenWithMenuFactory::CreateMenu(this)); - if (open_with_menu_observer_) { - observers_.AddObserver(open_with_menu_observer_.get()); - open_with_menu_observer_->InitMenu(params_); - } +#if defined(OS_CHROMEOS) + open_with_menu_observer_ = + std::make_unique<arc::OpenWithMenu>(browser_context_, this); + observers_.AddObserver(open_with_menu_observer_.get()); + open_with_menu_observer_->InitMenu(params_); +#endif } void RenderViewContextMenu::AppendImageItems() {
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.h b/chrome/browser/renderer_context_menu/render_view_context_menu.h index 726881a..1c1461d 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.h +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.h
@@ -231,8 +231,10 @@ spelling_options_submenu_observer_; #endif +#if defined(OS_CHROMEOS) // An observer that handles "Open with <app>" items. std::unique_ptr<RenderViewContextMenuObserver> open_with_menu_observer_; +#endif #if BUILDFLAG(ENABLE_PRINT_PREVIEW) // An observer that disables menu items when print preview is active.
diff --git a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc index a21917c..95a482c 100644 --- a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.cc
@@ -5,13 +5,9 @@ #include "chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h" #include "base/bind_helpers.h" -#include "chrome/browser/media/cdm_storage_id.h" -#include "chrome/browser/media/media_storage_id_salt.h" -#include "chrome/browser/profiles/profile.h" #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" -#include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" #include "ppapi/c/pp_errors.h" #include "ppapi/host/dispatch_host_message.h" @@ -21,17 +17,6 @@ namespace chrome { -namespace { - -std::vector<uint8_t> GetSalt(content::RenderFrameHost* rfh) { - DCHECK(rfh); - Profile* profile = - Profile::FromBrowserContext(rfh->GetProcess()->GetBrowserContext()); - return MediaStorageIdSalt::GetSalt(profile->GetPrefs()); -} - -} // namespace - PepperPlatformVerificationMessageFilter:: PepperPlatformVerificationMessageFilter(content::BrowserPpapiHost* host, PP_Instance instance) @@ -130,31 +115,14 @@ int32_t PepperPlatformVerificationMessageFilter::OnGetStorageId( ppapi::host::HostMessageContext* context) { - content::RenderFrameHost* rfh = - content::RenderFrameHost::FromID(render_process_id_, render_frame_id_); - if (!rfh) { - // Won't be able to get the salt, so return empty buffer. - GetStorageIdCallback(context->MakeReplyMessageContext(), - std::vector<uint8_t>()); - return PP_OK_COMPLETIONPENDING; - } - - std::vector<uint8_t> salt = GetSalt(rfh); - DCHECK(salt.size()); - cdm_storage_id::ComputeStorageId( - salt, rfh->GetLastCommittedOrigin(), - base::BindOnce( - &PepperPlatformVerificationMessageFilter::GetStorageIdCallback, this, - context->MakeReplyMessageContext())); - return PP_OK_COMPLETIONPENDING; -} - -void PepperPlatformVerificationMessageFilter::GetStorageIdCallback( - ppapi::host::ReplyMessageContext reply_context, - const std::vector<uint8_t>& storage_id) { + // TODO(jrummell): Implement Storage ID. For now simply returns empty string. + // http://crbug.com/478960. + ppapi::host::ReplyMessageContext reply_context = + context->MakeReplyMessageContext(); reply_context.params.set_result(PP_OK); SendReply(reply_context, - PpapiHostMsg_PlatformVerification_GetStorageIdReply(storage_id)); + PpapiHostMsg_PlatformVerification_GetStorageIdReply(std::string())); + return PP_OK_COMPLETIONPENDING; } } // namespace chrome
diff --git a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h index 23961a9..0b54a380 100644 --- a/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h +++ b/chrome/browser/renderer_host/pepper/pepper_platform_verification_message_filter.h
@@ -7,9 +7,6 @@ #include <stdint.h> -#include <string> -#include <vector> - #include "base/macros.h" #include "ppapi/c/pp_instance.h" #include "ppapi/host/resource_message_filter.h" @@ -61,8 +58,6 @@ #endif int32_t OnGetStorageId(ppapi::host::HostMessageContext* context); - void GetStorageIdCallback(ppapi::host::ReplyMessageContext reply_context, - const std::vector<uint8_t>& storage_id); // Used to lookup the WebContents associated with this PP_Instance. int render_process_id_;
diff --git a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc index 5045eba5..c209e484 100644 --- a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc +++ b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.cc
@@ -28,10 +28,6 @@ DEFINE_WEB_CONTENTS_USER_DATA_KEY(ResourceCoordinatorWebContentsObserver); -// We delay the sending of favicon/title update signal to GRC for 5 minutes -// after the main frame navigation is committed. -const base::TimeDelta kFaviconAndTitleUpdateIgnoredTimeout = - base::TimeDelta::FromMinutes(5); bool ResourceCoordinatorWebContentsObserver::ukm_recorder_initialized = false; ResourceCoordinatorWebContentsObserver::ResourceCoordinatorWebContentsObserver( @@ -147,9 +143,10 @@ } if (navigation_handle->IsInMainFrame()) { - UpdateUkmRecorder(navigation_handle->GetNavigationId()); + UpdateUkmRecorder(navigation_handle); ResetFlag(); - navigation_finished_time_ = base::TimeTicks::Now(); + tab_resource_coordinator_->SendEvent( + resource_coordinator::mojom::Event::kNavigationCommitted); } content::RenderFrameHost* render_frame_host = @@ -171,13 +168,6 @@ first_time_title_set_ = true; return; } - // Ignore update when the tab is in foreground or the update happens within 5 - // minutes after the main frame is committed. - if (web_contents()->IsVisible() || - base::TimeTicks::Now() - navigation_finished_time_ < - kFaviconAndTitleUpdateIgnoredTimeout) { - return; - } tab_resource_coordinator_->SendEvent( resource_coordinator::mojom::Event::kTitleUpdated); } @@ -188,25 +178,21 @@ first_time_favicon_set_ = true; return; } - // Ignore update when the tab is in foreground or the update happens within 5 - // minutes after the main frame is committed. - if (web_contents()->IsVisible() || - base::TimeTicks::Now() - navigation_finished_time_ < - kFaviconAndTitleUpdateIgnoredTimeout) { - return; - } tab_resource_coordinator_->SendEvent( resource_coordinator::mojom::Event::kFaviconUpdated); } void ResourceCoordinatorWebContentsObserver::UpdateUkmRecorder( - int64_t navigation_id) { + content::NavigationHandle* handle) { if (!base::FeatureList::IsEnabled(ukm::kUkmFeature)) { return; } - ukm_source_id_ = - ukm::ConvertToSourceId(navigation_id, ukm::SourceIdType::NAVIGATION_ID); + ukm_source_id_ = ukm::ConvertToSourceId(handle->GetNavigationId(), + ukm::SourceIdType::NAVIGATION_ID); + ukm::UkmRecorder* ukm_recorder = ukm::UkmRecorder::Get(); + if (ukm_recorder) + ukm_recorder->UpdateSourceURL(ukm_source_id_, handle->GetURL()); tab_resource_coordinator_->SetProperty( resource_coordinator::mojom::PropertyType::kUKMSourceId, ukm_source_id_); }
diff --git a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.h b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.h index 7fb8945..3365c8e 100644 --- a/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.h +++ b/chrome/browser/resource_coordinator/resource_coordinator_web_contents_observer.h
@@ -44,7 +44,7 @@ void EnsureUkmRecorderInterface(); void MaybeSetUkmRecorderInterface(bool ukm_recorder_already_initialized); - void UpdateUkmRecorder(int64_t navigation_id); + void UpdateUkmRecorder(content::NavigationHandle* handle); private: explicit ResourceCoordinatorWebContentsObserver( @@ -61,12 +61,6 @@ tab_resource_coordinator_; ukm::SourceId ukm_source_id_; - // We only want to send signals to GRC 5 minutes after the main frame is - // committed. Thus we record the time when navigation of main frame is - // finished, when title/favicon is changed, we check whether it's already more - // than 5 minutes from the time navigation of main frame is finished. - base::TimeTicks navigation_finished_time_; - // Favicon and title are set when a page is loaded, we only want to send // signals to GRC about title and favicon update from the previous title and // favicon, thus we want to ignore the very first update since it is always
diff --git a/chrome/browser/resource_coordinator/tab_manager_stats_collector.cc b/chrome/browser/resource_coordinator/tab_manager_stats_collector.cc index 5362061..d2b287fb 100644 --- a/chrome/browser/resource_coordinator/tab_manager_stats_collector.cc +++ b/chrome/browser/resource_coordinator/tab_manager_stats_collector.cc
@@ -252,14 +252,16 @@ return; if (is_session_restore_loading_tabs_ && !IsInOverlappedSession()) { - UMA_HISTOGRAM_TIMES(kHistogramSessionRestoreTabSwitchLoadTime, - base::TimeTicks::Now() - - foreground_contents_switched_to_times_[contents]); + UMA_HISTOGRAM_MEDIUM_TIMES( + kHistogramSessionRestoreTabSwitchLoadTime, + base::TimeTicks::Now() - + foreground_contents_switched_to_times_[contents]); } if (is_in_background_tab_opening_session_ && !IsInOverlappedSession()) { - UMA_HISTOGRAM_TIMES(kHistogramBackgroundTabOpeningTabSwitchLoadTime, - base::TimeTicks::Now() - - foreground_contents_switched_to_times_[contents]); + UMA_HISTOGRAM_MEDIUM_TIMES( + kHistogramBackgroundTabOpeningTabSwitchLoadTime, + base::TimeTicks::Now() - + foreground_contents_switched_to_times_[contents]); } foreground_contents_switched_to_times_.erase(contents); @@ -310,12 +312,14 @@ // static const char TabManagerStatsCollector::kHistogramSessionRestoreTabSwitchLoadTime[] = - "TabManager.Experimental.SessionRestore.TabSwitchLoadTime"; + "TabManager.Experimental.SessionRestore.TabSwitchLoadTime." + "UntilTabIsLoaded"; // static const char TabManagerStatsCollector:: kHistogramBackgroundTabOpeningTabSwitchLoadTime[] = - "TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime"; + "TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime." + "UntilTabIsLoaded"; // static const char TabManagerStatsCollector::kHistogramBackgroundTabOpeningTabCount[] =
diff --git a/chrome/browser/resources/chromeos/internet_detail_dialog.html b/chrome/browser/resources/chromeos/internet_detail_dialog.html index 760ab03..826c17fa 100644 --- a/chrome/browser/resources/chromeos/internet_detail_dialog.html +++ b/chrome/browser/resources/chromeos/internet_detail_dialog.html
@@ -17,10 +17,26 @@ <dom-module id="internet-detail-dialog"> <template> <style include="network-shared iron-flex"> - div.property-box { + .section { + @apply(--cr-section); margin-bottom: 10px; } + .section.first { + border-top: none; + } + + .section.single-column { + align-items: stretch; + flex-direction: column; + justify-content: center; + } + + .section > .start { + align-items: center; + flex: auto; + } + .title { -webkit-margin-start: 20px; font-size: 107.69%; /* 14px / 13px */ @@ -33,7 +49,7 @@ </style> <!-- Title section: Icon + name + connection state. --> - <div class="property-box first"> + <div class="section first"> <div class="start layout horizontal center"> <cr-network-icon network-state="[[networkProperties]]"> </cr-network-icon> @@ -57,7 +73,7 @@ </div> <!-- Proxy --> - <div class="property-box single-column stretch"> + <div class="section single-column"> <network-proxy editable use-shared-proxies on-proxy-change="onProxyChange_" network-properties="[[networkProperties]]"> @@ -67,14 +83,14 @@ <template is="dom-if" if="[[isRememberedOrConnected_(networkProperties)]]"> <!-- IP Config --> - <div class="property-box single-column stretch"> + <div class="section single-column"> <network-ip-config editable on-ip-change="onIPConfigChange_" network-properties="[[networkProperties]]"> </network-ip-config> </div> <!-- IP Config, Nameservers --> - <div class="property-box single-column stretch"> + <div class="section single-column"> <network-nameservers editable on-nameservers-change="onIPConfigChange_" network-properties="[[networkProperties]]"> @@ -84,7 +100,7 @@ <!-- APN --> <template is="dom-if" if="[[isCellular_(networkProperties)]]"> - <div class="property-box single-column stretch"> + <div class="section single-column"> <network-apnlist editable on-apn-change="onNetworkPropertyChange_" network-properties="[[networkProperties]]"> </network-apnlist> @@ -93,7 +109,7 @@ <!-- Other properties to show if present. --> <template is="dom-if" if="[[hasInfoFields_(networkProperties)]]"> - <div class="property-box single-column stretch indented"> + <div class="section single-column indented"> <network-property-list fields="[[getInfoFields_(networkProperties)]]" property-dict="[[networkProperties]]"
diff --git a/chrome/browser/resources/chromeos/login/encryption_migration.html b/chrome/browser/resources/chromeos/login/encryption_migration.html index 540e238..7fd8119 100644 --- a/chrome/browser/resources/chromeos/login/encryption_migration.html +++ b/chrome/browser/resources/chromeos/login/encryption_migration.html
@@ -16,6 +16,13 @@ <template is="dom-if" if="[[isInitial_(uiState)]]"> <oobe-dialog tabindex="0" has-buttons></oobe-dialog> </template> + <template is="dom-if" if="[[isMigratingMinimal_(uiState)]]"> + <oobe-dialog tabindex="0" has-buttons> + <div class="footer layout vertical"> + <throbber-notice text="$i18n{gaiaLoading}"></throbber-notice> + </div> + </oobe-dialog> + </template> <template is="dom-if" if="[[isReady_(uiState)]]"> <oobe-dialog tabindex="0" has-buttons> <iron-icon class="oobe-icon chrome-logo"></iron-icon>
diff --git a/chrome/browser/resources/chromeos/login/encryption_migration.js b/chrome/browser/resources/chromeos/login/encryption_migration.js index eb750895..84a5ccc2 100644 --- a/chrome/browser/resources/chromeos/login/encryption_migration.js +++ b/chrome/browser/resources/chromeos/login/encryption_migration.js
@@ -17,7 +17,8 @@ READY: 1, MIGRATING: 2, MIGRATION_FAILED: 3, - NOT_ENOUGH_SPACE: 4 + NOT_ENOUGH_SPACE: 4, + MIGRATING_MINIMAL: 5 }; Polymer({ @@ -115,6 +116,15 @@ }, /** + * Returns true if we're in minimal migration mode. + * @param {EncryptionMigrationUIState} state Current UI state + * @priave + */ + isMigratingMinimal_: function(state) { + return state == EncryptionMigrationUIState.MIGRATING_MINIMAL; + }, + + /** * Returns true if the current migration progress is unknown. * @param {number} progress * @private
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_update.html b/chrome/browser/resources/chromeos/login/oobe_screen_update.html index 98fc921..1795938 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screen_update.html +++ b/chrome/browser/resources/chromeos/login/oobe_screen_update.html
@@ -15,7 +15,8 @@ </div> </div> <div id="update-screen-main" hidden> - <p id="update-upper-label"></p> + <p id="update-upper-label" i18n-content="updateCompeletedMsg" hidden> + </p> <p id="update-bottom-label" i18n-content="installingUpdateDesc"></p> <progress id="update-progress-bar" max="100" value="0"></progress> <p id="estimated-time-left" class="progress-message" hidden></p>
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_update.js b/chrome/browser/resources/chromeos/login/oobe_screen_update.js index 4edfccf..3550451 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screen_update.js +++ b/chrome/browser/resources/chromeos/login/oobe_screen_update.js
@@ -10,7 +10,7 @@ var USER_ACTION_CANCEL_UPDATE_SHORTCUT = 'cancel-update'; var CONTEXT_KEY_TIME_LEFT_SEC = 'time-left-sec'; var CONTEXT_KEY_SHOW_TIME_LEFT = 'show-time-left'; - var CONTEXT_KEY_UPDATE_MESSAGE = 'update-msg'; + var CONTEXT_KEY_UPDATE_COMPLETED = 'update-completed'; var CONTEXT_KEY_SHOW_CURTAIN = 'show-curtain'; var CONTEXT_KEY_SHOW_PROGRESS_MESSAGE = 'show-progress-msg'; var CONTEXT_KEY_PROGRESS = 'progress'; @@ -33,8 +33,8 @@ self.showEstimatedTimeLeft(show_time_left); }); this.context.addObserver( - CONTEXT_KEY_UPDATE_MESSAGE, function(update_msg) { - self.setUpdateMessage(update_msg); + CONTEXT_KEY_UPDATE_COMPLETED, function(is_completed) { + self.setUpdateCompleted(is_completed); }); this.context.addObserver( CONTEXT_KEY_SHOW_CURTAIN, function(show_curtain) { @@ -146,12 +146,12 @@ }, /** - * Sets update message, which is shown above the progress bar. - * @param {text} message Message which is shown by the label. + * Marks update completed. Shows "update completed" message. + * @param {boolean} is_completed True if update process is completed. */ - setUpdateMessage: function(message) { - $('update-upper-label').textContent = message; - $('oobe-update-md').updateUpperLabel = message; + setUpdateCompleted: function(is_completed) { + $('update-upper-label').hidden = is_completed; + $('oobe-update-md').updateCompleted = is_completed; }, /**
diff --git a/chrome/browser/resources/chromeos/login/oobe_update.css b/chrome/browser/resources/chromeos/login/oobe_update.css index 3bd705c..4e69b8e 100644 --- a/chrome/browser/resources/chromeos/login/oobe_update.css +++ b/chrome/browser/resources/chromeos/login/oobe_update.css
@@ -8,6 +8,12 @@ line-height: 18px; } +.subtitle.update-subtitle { + color: #333; + font: 13px Roboto, sans-serif; + line-height: 18px; +} + #estimated-time-left, #progress-message { padding-top: 31px; /* = 44 - font size */
diff --git a/chrome/browser/resources/chromeos/login/oobe_update.html b/chrome/browser/resources/chromeos/login/oobe_update.html index adf0bf386..079b887 100644 --- a/chrome/browser/resources/chromeos/login/oobe_update.html +++ b/chrome/browser/resources/chromeos/login/oobe_update.html
@@ -32,7 +32,7 @@ <iron-icon icon="oobe-update:googleg" class="oobe-icon"></iron-icon> <div class="header"> <h1 class="title" i18n-content="checkingForUpdates"></h1> - <div class="subtitle" id="checkingForUpdateCancelHint" + <div class="subtitle update-subtitle" id="checkingForUpdateCancelHint" i18n-content="cancelUpdateHint" hidden="[[!cancelAllowed]]"> </div> </div> @@ -49,19 +49,31 @@ <iron-icon icon="oobe-update:googleg" class="oobe-icon"></iron-icon> <div class="header"> <h1 class="title" i18n-content="updatingScreenTitle"></h1> - <div class="subtitle" i18n-content="installingUpdateDesc"></div> - <div class="subtitle" id="updatingCancelHint" - i18n-content="cancelUpdateHint" hidden="[[!cancelAllowed]]"> + <div class="subtitle update-subtitle" + i18n-content="installingUpdateDesc" + hidden="[[updateCompleted]]"></div> + <div class="subtitle update-subtitle" id="updatingCancelHint" + i18n-content="cancelUpdateHint" + hidden="[[isNotAllowedOrUpdateCompleted_(cancelAllowed, + updateCompleted)]]"> </div> + <div class="subtitle update-subtitle" i18n-content="updateCompeletedMsg" + hidden="[[!updateCompleted]]"></div> </div> <div class="footer flex layout vertical"> - <div id="update-upper-label" class="text">[[updateUpperLabel]]</div> - <paper-progress min="0" max="100" value="[[progressValue]]"> + <paper-progress min="0" max="100" value="[[progressValue]]" + hidden="[[updateCompleted]]"> </paper-progress> <div id="estimated-time-left" class="progress-message text" - hidden="[[!estimatedTimeLeftShown]]">[[estimatedTimeLeft]]</div> + hidden="[[isNotAllowedOrUpdateCompleted_(estimatedTimeLeftShown, + updateCompleted)]]"> + [[estimatedTimeLeft]] + </div> <div id="progress-message" class="progress-message text" - hidden="[[!progressMessageShown]]">[[progressMessage]]</div> + hidden="[[isNotAllowedOrUpdateCompleted_(progressMessageShown, + updateCompleted)]]"> + [[progressMessage]] + </div> <div class="flex"></div> <img class="update-illustration" srcset="images/1x/updating_1x.png 1x,
diff --git a/chrome/browser/resources/chromeos/login/oobe_update.js b/chrome/browser/resources/chromeos/login/oobe_update.js index 20bb852..31aff4b 100644 --- a/chrome/browser/resources/chromeos/login/oobe_update.js +++ b/chrome/browser/resources/chromeos/login/oobe_update.js
@@ -55,10 +55,12 @@ }, /** - * Message above the progress bar. + * True if update is fully completed and, probably manual action is + * required. */ - updateUpperLabel: { - type: String, + updateCompleted: { + type: Boolean, + value: false, }, /** @@ -77,4 +79,14 @@ this.$.checkingForUpdateCancelHint.textContent = message; this.$.updatingCancelHint.textContent = message; }, + + /** + * Calculates visibility of UI element. Returns true if element is hidden. + * @param {Boolean} isAllowed Element flag that marks it visible. + * @param {Boolean} updateCompleted If update is completed and all + * intermediate status elements are hidden. + */ + isNotAllowedOrUpdateCompleted_: function(isAllowed, updateCompleted) { + return !isAllowed || updateCompleted; + }, });
diff --git a/chrome/browser/resources/md_extensions/compiled_resources2.gyp b/chrome/browser/resources/md_extensions/compiled_resources2.gyp index 555897e..7dc43376 100644 --- a/chrome/browser/resources/md_extensions/compiled_resources2.gyp +++ b/chrome/browser/resources/md_extensions/compiled_resources2.gyp
@@ -21,6 +21,7 @@ '<(EXTERNS_GYP):developer_private', 'item', 'item_util', + 'navigation_helper', ], 'includes': ['../../../../third_party/closure_compiler/compile_js2.gypi'], }, @@ -41,6 +42,8 @@ '<(DEPTH)/third_party/polymer/v1_0/components-chromium/paper-menu/compiled_resources2.gyp:paper-menu-extracted', '<(EXTERNS_GYP):developer_private', 'code_section', + 'item_util', + 'navigation_helper', ], 'includes': ['../../../../third_party/closure_compiler/compile_js2.gypi'], }, @@ -62,6 +65,7 @@ '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:load_time_data', '<(EXTERNS_GYP):developer_private', 'item_util', + 'navigation_helper', ], 'includes': ['../../../../third_party/closure_compiler/compile_js2.gypi'], }, @@ -84,6 +88,7 @@ '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:cr', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:load_time_data', '<(EXTERNS_GYP):developer_private', + 'navigation_helper', ], 'includes': ['../../../../third_party/closure_compiler/compile_js2.gypi'], }, @@ -116,6 +121,7 @@ 'detail_view', 'item', 'item_list', + 'item_util', 'load_error', 'keyboard_shortcuts', 'navigation_helper', @@ -139,6 +145,7 @@ '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:cr', '<(EXTERNS_GYP):developer_private', + 'navigation_helper', ], 'includes': ['../../../../third_party/closure_compiler/compile_js2.gypi'], },
diff --git a/chrome/browser/resources/md_extensions/detail_view.html b/chrome/browser/resources/md_extensions/detail_view.html index 29371c44..3a23f8a 100644 --- a/chrome/browser/resources/md_extensions/detail_view.html +++ b/chrome/browser/resources/md_extensions/detail_view.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-styles/color.html"> <link rel="import" href="chrome://extensions/item_util.html"> +<link rel="import" href="chrome://extensions/navigation_helper.html"> <dom-module id="extensions-detail-view"> <template>
diff --git a/chrome/browser/resources/md_extensions/detail_view.js b/chrome/browser/resources/md_extensions/detail_view.js index d98d860..0ea6870e 100644 --- a/chrome/browser/resources/md_extensions/detail_view.js +++ b/chrome/browser/resources/md_extensions/detail_view.js
@@ -26,7 +26,8 @@ /** @private */ onCloseButtonTap_: function() { - this.fire('close'); + extensions.navigation.navigateTo( + {page: Page.LIST, type: extensions.getItemListType(this.data)}); }, /**
diff --git a/chrome/browser/resources/md_extensions/error_page.html b/chrome/browser/resources/md_extensions/error_page.html index b4c2c1f..b3103aaa 100644 --- a/chrome/browser/resources/md_extensions/error_page.html +++ b/chrome/browser/resources/md_extensions/error_page.html
@@ -8,6 +8,8 @@ <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-styles/color.html"> <link rel="import" href="chrome://extensions/code_section.html"> +<link rel="import" href="chrome://extensions/item_util.html"> +<link rel="import" href="chrome://extensions/navigation_helper.html"> <dom-module id="extensions-error-page"> <template>
diff --git a/chrome/browser/resources/md_extensions/error_page.js b/chrome/browser/resources/md_extensions/error_page.js index e5fe405..01bcf79 100644 --- a/chrome/browser/resources/md_extensions/error_page.js +++ b/chrome/browser/resources/md_extensions/error_page.js
@@ -69,7 +69,11 @@ /** @private */ onCloseButtonTap_: function() { - this.fire('close'); + extensions.navigation.navigateTo({ + page: Page.LIST, + type: extensions.getItemListType( + /** @type {!chrome.developerPrivate.ExtensionInfo} */ (this.data)) + }); }, /**
diff --git a/chrome/browser/resources/md_extensions/item.html b/chrome/browser/resources/md_extensions/item.html index cbe35e8..c396d2e 100644 --- a/chrome/browser/resources/md_extensions/item.html +++ b/chrome/browser/resources/md_extensions/item.html
@@ -19,6 +19,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-styles/shadow.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-toggle-button/paper-toggle-button.html"> +<link rel="import" href="chrome://extensions/navigation_helper.html"> <dom-module id="extensions-item"> <template>
diff --git a/chrome/browser/resources/md_extensions/item.js b/chrome/browser/resources/md_extensions/item.js index 9968073..eb7c4c4 100644 --- a/chrome/browser/resources/md_extensions/item.js +++ b/chrome/browser/resources/md_extensions/item.js
@@ -125,12 +125,14 @@ /** @private */ onErrorsTap_: function() { - this.fire('extension-item-show-errors', {data: this.data}); + extensions.navigation.navigateTo( + {page: Page.ERRORS, extensionId: this.data.id}); }, /** @private */ onDetailsTap_: function() { - this.fire('extension-item-show-details', {data: this.data}); + extensions.navigation.navigateTo( + {page: Page.DETAILS, extensionId: this.data.id}); }, /** @@ -143,7 +145,8 @@ /** @private */ onExtraInspectTap_: function() { - this.fire('extension-item-show-details', {data: this.data}); + extensions.navigation.navigateTo( + {page: Page.DETAILS, extensionId: this.data.id}); }, /** @private */
diff --git a/chrome/browser/resources/md_extensions/item_util.js b/chrome/browser/resources/md_extensions/item_util.js index 8a65d2c2..5997a53 100644 --- a/chrome/browser/resources/md_extensions/item_util.js +++ b/chrome/browser/resources/md_extensions/item_util.js
@@ -123,10 +123,33 @@ return label; } + /** + * Returns the list type that the item belongs to. + * @param {!chrome.developerPrivate.ExtensionInfo} item + * @return {extensions.ShowingType} + */ + function getItemListType(item) { + const ExtensionType = chrome.developerPrivate.ExtensionType; + switch (item.type) { + case ExtensionType.HOSTED_APP: + case ExtensionType.LEGACY_PACKAGED_APP: + case ExtensionType.PLATFORM_APP: + return extensions.ShowingType.APPS; + case ExtensionType.EXTENSION: + case ExtensionType.SHARED_MODULE: + return extensions.ShowingType.EXTENSIONS; + case ExtensionType.THEME: + assertNotReached('Don\'t send themes to the chrome://extensions page'); + break; + } + assertNotReached(); + } + return { isControlled: isControlled, isEnabled: isEnabled, userCanChangeEnablement: userCanChangeEnablement, + getItemListType: getItemListType, getItemSource: getItemSource, getItemSourceString: getItemSourceString, computeInspectableViewLabel: computeInspectableViewLabel
diff --git a/chrome/browser/resources/md_extensions/manager.html b/chrome/browser/resources/md_extensions/manager.html index fc2090b..6b401d1 100644 --- a/chrome/browser/resources/md_extensions/manager.html +++ b/chrome/browser/resources/md_extensions/manager.html
@@ -13,6 +13,7 @@ <link rel="import" href="chrome://extensions/drop_overlay.html"> <link rel="import" href="chrome://extensions/error_page.html"> <link rel="import" href="chrome://extensions/item_list.html"> +<link rel="import" href="chrome://extensions/item_util.html"> <link rel="import" href="chrome://extensions/keyboard_shortcuts.html"> <link rel="import" href="chrome://extensions/load_error.html"> <link rel="import" href="chrome://extensions/navigation_helper.html"> @@ -74,17 +75,16 @@ </extensions-item-list> <extensions-detail-view id="details-view" delegate="[[delegate]]" in-dev-mode="[[inDevMode]]" data="[[detailViewItem_]]" - on-close="onDetailsViewClose_" slot="view"> + slot="view"> </extensions-detail-view> <extensions-keyboard-shortcuts id="keyboard-shortcuts" items="[[extensions]]" slot="view"> </extensions-keyboard-shortcuts> - <extensions-error-page id="error-page" on-close="onErrorPageClose_" + <extensions-error-page id="error-page" data="[[errorPageItem_]]" delegate="[[delegate]]" slot="view"> </extensions-error-page> </extensions-view-manager> - <extensions-options-dialog id="options-dialog" - on-close="onOptionsDialogClose_"> + <extensions-options-dialog id="options-dialog"> </extensions-options-dialog> <extensions-pack-dialog id="pack-dialog" delegate="[[delegate]]"> </extensions-pack-dialog>
diff --git a/chrome/browser/resources/md_extensions/manager.js b/chrome/browser/resources/md_extensions/manager.js index 675a8eb..9ac31f6 100644 --- a/chrome/browser/resources/md_extensions/manager.js +++ b/chrome/browser/resources/md_extensions/manager.js
@@ -106,11 +106,6 @@ }, }, - listeners: { - 'items-list.extension-item-show-details': 'onShouldShowItemDetails_', - 'items-list.extension-item-show-errors': 'onShouldShowItemErrors_', - }, - /** * The current page being shown. Default to null, and initPage will figure * out the initial page based on url. @@ -127,7 +122,7 @@ /** @type {extensions.Toolbar} */ (this.$$('extensions-toolbar')); this.readyPromiseResolver.resolve(); extensions.navigation.onRouteChanged(newPage => { - this.changePage(newPage, true); + this.changePage_(newPage); }); }, @@ -157,7 +152,7 @@ */ initPage: function() { this.didInitPage_ = true; - this.changePage(extensions.navigation.getCurrentPage(), true); + this.changePage_(extensions.navigation.getCurrentPage()); }, /** @@ -174,30 +169,18 @@ }, /** - * @param {chrome.developerPrivate.ExtensionType} type The type of item. + * @param {chrome.developerPrivate.ExtensionInfo} item * @return {string} The ID of the list that the item belongs in. * @private */ - getListId_: function(type) { - let listId; - const ExtensionType = chrome.developerPrivate.ExtensionType; - switch (type) { - case ExtensionType.HOSTED_APP: - case ExtensionType.LEGACY_PACKAGED_APP: - case ExtensionType.PLATFORM_APP: - listId = 'apps'; - break; - case ExtensionType.EXTENSION: - case ExtensionType.SHARED_MODULE: - listId = 'extensions'; - break; - case ExtensionType.THEME: - assertNotReached( - 'Don\'t send themes to the chrome://extensions page'); - break; - } - assert(listId); - return listId; + getListId_: function(item) { + const type = extensions.getItemListType(item); + if (type == extensions.ShowingType.APPS) + return 'apps'; + else if (type == extensions.ShowingType.EXTENSIONS) + return 'extensions'; + + assertNotReached(); }, /** @@ -228,7 +211,7 @@ * the new element is representing. */ addItem: function(item) { - const listId = this.getListId_(item.type); + const listId = this.getListId_(item); // We should never try and add an existing item. assert(this.getIndexInList_(listId, item.id) == -1); let insertBeforeChild = this[listId].findIndex(function(listEl) { @@ -244,7 +227,7 @@ * item to update. */ updateItem: function(item) { - const listId = this.getListId_(item.type); + const listId = this.getListId_(item); const index = this.getIndexInList_(listId, item.id); // We should never try and update a non-existent item. assert(index >= 0); @@ -270,7 +253,7 @@ * item to remove. */ removeItem: function(item) { - const listId = this.getListId_(item.type); + const listId = this.getListId_(item); const index = this.getIndexInList_(listId, item.id); // We should never try and remove a non-existent item. assert(index >= 0); @@ -301,19 +284,9 @@ /** * Changes the active page selection. * @param {PageState} newPage - * @param {boolean=} isSilent If true, does not notify the navigation helper - * of the change. + * @private */ - changePage: function(newPage, isSilent) { - // TODO(scottchen): Remove this once all calls go through - // extensions.navigateTo. - if (this.currentPage_ && this.currentPage_.page == newPage.page && - this.currentPage_.type == newPage.type && - this.currentPage_.subpage == newPage.subpage && - this.currentPage_.extensionId == newPage.extensionId) { - return; - } - + changePage_: function(newPage) { this.$.drawer.closeDrawer(); if (this.optionsDialog.open) this.optionsDialog.close(); @@ -347,43 +320,6 @@ } this.currentPage_ = newPage; - - // TODO(scottchen): Remove this once all calls go through - // extensions.navigateTo. - if (!isSilent) - extensions.navigation.updateHistory(newPage); - }, - - /** - * Handles the event for the user clicking on a details button. - * @param {!CustomEvent} e - * @private - */ - onShouldShowItemDetails_: function(e) { - this.changePage({page: Page.DETAILS, extensionId: e.detail.data.id}); - }, - - /** - * Handles the event for the user clicking on the errors button. - * @param {!CustomEvent} e - * @private - */ - onShouldShowItemErrors_: function(e) { - this.changePage({page: Page.ERRORS, id: e.detail.data.id}); - }, - - /** @private */ - onDetailsViewClose_: function() { - // Note: we don't reset detailViewItem_ here because doing so just causes - // extra work for the data-bound details view. - this.changePage({page: Page.LIST, type: this.listType_}); - }, - - /** @private */ - onErrorPageClose_: function() { - // Note: we don't reset errorPageItem_ here because doing so just causes - // extra work for the data-bound error page. - this.changePage({page: Page.LIST, type: this.listType_}); }, /** @private */ @@ -391,21 +327,6 @@ this.$['pack-dialog'].show(); }, - /** @private */ - onOptionsDialogClose_: function() { - // We update the page when the options dialog closes, but only if we're - // still on the details page. We could be on a different page if the - // user hit back while the options dialog was visible; in that case, the - // new page is already correct. - if (this.currentPage_ && this.currentPage_.page == Page.DETAILS) { - // This will update the currentPage_ and the NavigationHelper; since - // the active page is already the details page, no main page - // transition occurs. - this.changePage( - {page: Page.DETAILS, extensionId: this.currentPage_.extensionId}); - } - }, - /** * @param {!extensions.ShowingType} listType * @private
diff --git a/chrome/browser/resources/md_extensions/options_dialog.html b/chrome/browser/resources/md_extensions/options_dialog.html index 9ac04c3..e7029bf8 100644 --- a/chrome/browser/resources/md_extensions/options_dialog.html +++ b/chrome/browser/resources/md_extensions/options_dialog.html
@@ -3,6 +3,7 @@ <link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> <link rel="import" href="chrome://resources/html/assert.html"> <link rel="import" href="chrome://resources/html/cr.html"> +<link rel="import" href="chrome://extensions/navigation_helper.html"> <dom-module id="extensions-options-dialog"> <template> @@ -27,7 +28,8 @@ } </style> - <dialog is="cr-dialog" id="dialog" close-text="$i18n{close}"> + <dialog is="cr-dialog" id="dialog" close-text="$i18n{close}" + on-close="onClose_"> <div slot="title"> <div id="icon-and-name-wrapper"> <img id="icon" src="[[data_.iconUrl]]">
diff --git a/chrome/browser/resources/md_extensions/options_dialog.js b/chrome/browser/resources/md_extensions/options_dialog.js index eaed4c9..591c4b70 100644 --- a/chrome/browser/resources/md_extensions/options_dialog.js +++ b/chrome/browser/resources/md_extensions/options_dialog.js
@@ -60,6 +60,22 @@ close: function() { this.$$('dialog').close(); }, + + /** @private */ + onClose_: function() { + const currentPage = extensions.navigation.getCurrentPage(); + // We update the page when the options dialog closes, but only if we're + // still on the details page. We could be on a different page if the + // user hit back while the options dialog was visible; in that case, the + // new page is already correct. + if (currentPage && currentPage.page == Page.DETAILS) { + // This will update the currentPage_ and the NavigationHelper; since + // the active page is already the details page, no main page + // transition occurs. + extensions.navigation.navigateTo( + {page: Page.DETAILS, extensionId: currentPage.extensionId}); + } + }, }); return {OptionsDialog: OptionsDialog};
diff --git a/chrome/browser/resources/md_extensions/service.html b/chrome/browser/resources/md_extensions/service.html index fe1be3f..dd8617e 100644 --- a/chrome/browser/resources/md_extensions/service.html +++ b/chrome/browser/resources/md_extensions/service.html
@@ -2,4 +2,5 @@ <link rel="import" href="chrome://resources/html/cr.html"> <link rel="import" href="chrome://extensions/service.html"> <link rel="import" href="chrome://extensions/item.html"> +<link rel="import" href="chrome://extensions/navigation_helper.html"> <script src="chrome://extensions/service.js"></script>
diff --git a/chrome/browser/resources/md_extensions/service.js b/chrome/browser/resources/md_extensions/service.js index 24a7130..a7c09cb 100644 --- a/chrome/browser/resources/md_extensions/service.js +++ b/chrome/browser/resources/md_extensions/service.js
@@ -255,7 +255,7 @@ if (extension.optionsPage.openInTab) { chrome.developerPrivate.showOptions(id); } else { - this.manager_.changePage( + extensions.navigation.navigateTo( {page: Page.DETAILS, subpage: Dialog.OPTIONS, extensionId: id}); } }
diff --git a/chrome/browser/resources/print_preview/data/print_ticket_store.js b/chrome/browser/resources/print_preview/data/print_ticket_store.js index 8b8f16b..63a42bc 100644 --- a/chrome/browser/resources/print_preview/data/print_ticket_store.js +++ b/chrome/browser/resources/print_preview/data/print_ticket_store.js
@@ -420,10 +420,11 @@ /** @return {boolean} Whether the ticket is valid for preview generation. */ isTicketValidForPreview: function() { return ( - !this.marginsType_.isCapabilityAvailable() || - !this.marginsType_.isValueEqual( - print_preview.ticket_items.MarginsTypeValue.CUSTOM) || - this.customMargins_.isValid()); + (!this.marginsType_.isCapabilityAvailable() || + !this.marginsType_.isValueEqual( + print_preview.ticket_items.MarginsTypeValue.CUSTOM) || + this.customMargins_.isValid()) && + (!this.scaling_.isCapabilityAvailable() || this.scaling_.isValid())); }, /**
diff --git a/chrome/browser/resources/print_preview/data/ticket_items/scaling.js b/chrome/browser/resources/print_preview/data/ticket_items/scaling.js index e1099da..e51252f 100644 --- a/chrome/browser/resources/print_preview/data/ticket_items/scaling.js +++ b/chrome/browser/resources/print_preview/data/ticket_items/scaling.js
@@ -28,12 +28,12 @@ /** @override */ wouldValueBeValid: function(value) { - return true; + return value != ''; }, /** @override */ isValueEqual: function(value) { - return this.getValueAsNumber() == value; + return this.getValue() == value; }, /** @override */ @@ -51,7 +51,9 @@ /** @return {number} The scaling percentage indicated by the ticket item. */ getValueAsNumber: function() { - return parseInt(this.getValue(), 10); + var value = this.getValue() == '' ? 0 : parseInt(this.getValue(), 10); + assert(!isNaN(value)); + return value; }, /** @override */
diff --git a/chrome/browser/resources/print_preview/data/ticket_items/ticket_item.js b/chrome/browser/resources/print_preview/data/ticket_items/ticket_item.js index 7805a10..ce3da11 100644 --- a/chrome/browser/resources/print_preview/data/ticket_items/ticket_item.js +++ b/chrome/browser/resources/print_preview/data/ticket_items/ticket_item.js
@@ -145,7 +145,9 @@ var sendUpdateEvent = !this.isValueEqual(value); // Don't lose requested value if capability is not available. this.updateValueInternal(value); - if (this.appState_ && (this.field_ != null)) { + if (this.appState_ && (this.field_ != null) && + (this.field_ != print_preview.AppStateField.SCALING || + this.wouldValueBeValid(value))) { this.appState_.persistField(this.field_, value); } if (sendUpdateEvent)
diff --git a/chrome/browser/resources/print_preview/print_header.js b/chrome/browser/resources/print_preview/print_header.js index 901718c..810e286 100644 --- a/chrome/browser/resources/print_preview/print_header.js +++ b/chrome/browser/resources/print_preview/print_header.js
@@ -133,6 +133,10 @@ this.printTicketStore_.pageRange, print_preview.ticket_items.TicketItem.EventType.CHANGE, this.onTicketChange_.bind(this)); + this.tracker.add( + this.printTicketStore_.scaling, + print_preview.ticket_items.TicketItem.EventType.CHANGE, + this.updatePrintButtonEnabledState_.bind(this)); }, /**
diff --git a/chrome/browser/resources/print_preview/print_preview.css b/chrome/browser/resources/print_preview/print_preview.css index 81dc7cb..bb69ab6e 100644 --- a/chrome/browser/resources/print_preview/print_preview.css +++ b/chrome/browser/resources/print_preview/print_preview.css
@@ -104,6 +104,11 @@ padding-top: 5px; } +.two-column.visible .left-column.multirow { + padding-top: 16px; + vertical-align: top; +} + .two-column:not(.visible) .left-column, .two-column:not(.visible) .right-column { padding-bottom: 0;
diff --git a/chrome/browser/resources/print_preview/print_preview.html b/chrome/browser/resources/print_preview/print_preview.html index df7bc9f..1f8ae600 100644 --- a/chrome/browser/resources/print_preview/print_preview.html +++ b/chrome/browser/resources/print_preview/print_preview.html
@@ -22,7 +22,7 @@ <link rel="stylesheet" href="settings/media_size_settings.css"> <link rel="stylesheet" href="settings/layout_settings.css"> <link rel="stylesheet" href="settings/dpi_settings.css"> - <link rel="stylesheet" href="settings/other_options_settings.css"> + <link rel="stylesheet" href="settings/scaling_settings.css"> <link rel="stylesheet" href="settings/advanced_options_settings.css"> <link rel="stylesheet" href="settings/advanced_settings/advanced_settings.css"> <link rel="stylesheet" href="settings/advanced_settings/advanced_settings_item.css">
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js index 80105b0..c1c74d0 100644 --- a/chrome/browser/resources/print_preview/print_preview.js +++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -206,8 +206,7 @@ * @private */ this.otherOptionsSettings_ = new print_preview.OtherOptionsSettings( - this.printTicketStore_.duplex, this.printTicketStore_.fitToPage, - this.printTicketStore_.cssBackground, + this.printTicketStore_.duplex, this.printTicketStore_.cssBackground, this.printTicketStore_.selectionOnly, this.printTicketStore_.headerFooter, this.printTicketStore_.rasterize); this.addChild(this.otherOptionsSettings_);
diff --git a/chrome/browser/resources/print_preview/settings/other_options_settings.css b/chrome/browser/resources/print_preview/settings/other_options_settings.css deleted file mode 100644 index a155d62..0000000 --- a/chrome/browser/resources/print_preview/settings/other_options_settings.css +++ /dev/null
@@ -1,8 +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. */ - -#other-options-settings .left-column { - padding-top: 16px; - vertical-align: top; -} \ No newline at end of file
diff --git a/chrome/browser/resources/print_preview/settings/other_options_settings.html b/chrome/browser/resources/print_preview/settings/other_options_settings.html index 0514368..e6906cdd 100644 --- a/chrome/browser/resources/print_preview/settings/other_options_settings.html +++ b/chrome/browser/resources/print_preview/settings/other_options_settings.html
@@ -1,6 +1,6 @@ <div id="other-options-settings" class="other-options-settings two-column" hidden> - <div class="left-column"> + <div class="left-column multirow"> <h1>$i18n{optionsLabel}</h1> </div> <div class="right-column checkbox"> @@ -11,12 +11,6 @@ <span>$i18n{optionHeaderFooter}</span> </label> </div> - <div id="fit-to-page-container"> - <label aria-live="polite"> - <input class="checkbox" type="checkbox"> - <span>$i18n{optionFitToPage}</span> - </label> - </div> <div id="duplex-container"> <label aria-live="polite"> <input class="checkbox" type="checkbox">
diff --git a/chrome/browser/resources/print_preview/settings/other_options_settings.js b/chrome/browser/resources/print_preview/settings/other_options_settings.js index 24e04b2..56c10e2 100644 --- a/chrome/browser/resources/print_preview/settings/other_options_settings.js +++ b/chrome/browser/resources/print_preview/settings/other_options_settings.js
@@ -120,8 +120,6 @@ /** * UI component that renders checkboxes for various print options. * @param {!print_preview.ticket_items.Duplex} duplex Duplex ticket item. - * @param {!print_preview.ticket_items.FitToPage} fitToPage Fit-to-page ticket - * item. * @param {!print_preview.ticket_items.CssBackground} cssBackground CSS * background ticket item. * @param {!print_preview.ticket_items.SelectionOnly} selectionOnly Selection @@ -134,8 +132,7 @@ * @extends {print_preview.SettingsSection} */ function OtherOptionsSettings( - duplex, fitToPage, cssBackground, selectionOnly, headerFooter, - rasterize) { + duplex, cssBackground, selectionOnly, headerFooter, rasterize) { print_preview.SettingsSection.call(this); /** * @private {boolean} rasterizeEnabled Whether the print as image feature is @@ -152,7 +149,6 @@ this.elements_ = [ new CheckboxTicketItemElement( headerFooter, true, 'header-footer-container'), - new CheckboxTicketItemElement(fitToPage, false, 'fit-to-page-container'), new CheckboxTicketItemElement(duplex, false, 'duplex-container'), new CheckboxTicketItemElement( cssBackground, true, 'css-background-container'), @@ -161,7 +157,7 @@ ]; if (this.rasterizeEnabled_) { this.elements_.splice( - 4, 0, + this.elements_.length - 1, 0, new CheckboxTicketItemElement( rasterize, true, 'rasterize-container')); }
diff --git a/chrome/browser/resources/print_preview/settings/page_settings.css b/chrome/browser/resources/print_preview/settings/page_settings.css index e239f93..2e3b0a54 100644 --- a/chrome/browser/resources/print_preview/settings/page_settings.css +++ b/chrome/browser/resources/print_preview/settings/page_settings.css
@@ -2,11 +2,6 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#page-settings .left-column { - padding-top: 16px; - vertical-align: top; -} - #page-settings .page-settings-print-pages-div { -webkit-box-align: center; display: -webkit-box;
diff --git a/chrome/browser/resources/print_preview/settings/page_settings.html b/chrome/browser/resources/print_preview/settings/page_settings.html index c40114b..cad226e 100644 --- a/chrome/browser/resources/print_preview/settings/page_settings.html +++ b/chrome/browser/resources/print_preview/settings/page_settings.html
@@ -1,5 +1,5 @@ <div id="page-settings" class="two-column page-settings" hidden> - <div class="left-column"> + <div class="left-column multirow"> <h1>$i18n{pagesLabel}</h1> </div> <div class="right-column">
diff --git a/chrome/browser/resources/print_preview/settings/scaling_settings.css b/chrome/browser/resources/print_preview/settings/scaling_settings.css new file mode 100644 index 0000000..e39db53 --- /dev/null +++ b/chrome/browser/resources/print_preview/settings/scaling_settings.css
@@ -0,0 +1,7 @@ +/* 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. */ + +#scaling-settings .settings-box { + padding-top: 5px; +}
diff --git a/chrome/browser/resources/print_preview/settings/scaling_settings.html b/chrome/browser/resources/print_preview/settings/scaling_settings.html index 668f765..e2ee53f3 100644 --- a/chrome/browser/resources/print_preview/settings/scaling_settings.html +++ b/chrome/browser/resources/print_preview/settings/scaling_settings.html
@@ -1,8 +1,14 @@ <div id="scaling-settings" class="two-column" hidden> - <div class="left-column"> + <div class="left-column multirow"> <h1 id="scaling-label">$i18n{scalingLabel}</h1> </div> - <div class="right-column"> + <div class="right-column checkbox"> + <div id="fit-to-page-container"> + <label aria-live="polite"> + <input class="checkbox" type="checkbox"> + <span>$i18n{optionFitToPage}</span> + </label> + </div> <div class="settings-box"> <!-- The max and min value should match the ones in headless_devtools_manager_delegate.cc.
diff --git a/chrome/browser/resources/print_preview/settings/scaling_settings.js b/chrome/browser/resources/print_preview/settings/scaling_settings.js index 2db68ad..2b12f41 100644 --- a/chrome/browser/resources/print_preview/settings/scaling_settings.js +++ b/chrome/browser/resources/print_preview/settings/scaling_settings.js
@@ -48,10 +48,23 @@ this.isEnabled_ = true; /** + * Last valid scaling value. Used to restore value when fit to page is + * unchecked. Must always be a valid scaling value. + * @private {string} + */ + this.lastValidScaling_ = '100'; + + /** * The textfield input element - * @private {HTMLElement} + * @private {?HTMLElement} */ this.inputField_ = null; + + /** + * The fit to page checkbox. + * @private {?HTMLElement} + */ + this.fitToPageCheckbox_ = null; } /** @@ -66,25 +79,36 @@ /** @override */ isAvailable: function() { - return this.scalingTicketItem_.isCapabilityAvailable(); + return this.scalingTicketItem_.isCapabilityAvailable() || + this.fitToPageTicketItem_.isCapabilityAvailable(); }, /** @override */ hasCollapsibleContent: function() { - return this.isAvailable(); + return this.scalingTicketItem_.isCapabilityAvailable(); }, /** @override */ set isEnabled(isEnabled) { this.inputField_.disabled = !isEnabled; + this.fitToPageCheckbox_.disabled = !isEnabled; this.isEnabled_ = isEnabled; - if (isEnabled) - this.updateState_(); + }, + + /** + * @return {boolean} Whether fit to page is available and selected. + * @private + */ + isFitToPageSelected_: function() { + return this.fitToPageTicketItem_.isCapabilityAvailable() && + /** @type {boolean} */ (this.fitToPageTicketItem_.getValue()); }, /** @override */ enterDocument: function() { this.inputField_ = assert(this.getChildElement('input.user-value')); + this.fitToPageCheckbox_ = + assert(this.getChildElement('input[type=checkbox]')); print_preview.SettingsSection.prototype.enterDocument.call(this); this.tracker.add( this.inputField_, 'keydown', this.onTextfieldKeyDown_.bind(this)); @@ -93,30 +117,16 @@ this.tracker.add( this.inputField_, 'blur', this.onTextfieldBlur_.bind(this)); this.tracker.add( + this.fitToPageCheckbox_, 'click', + this.onFitToPageClicked_.bind(this)); + this.tracker.add( this.scalingTicketItem_, print_preview.ticket_items.TicketItem.EventType.CHANGE, - this.updateState_.bind(this)); + this.updateState_.bind(this, false)); this.tracker.add( this.fitToPageTicketItem_, print_preview.ticket_items.TicketItem.EventType.CHANGE, - this.onFitToPageChange_.bind(this)); - }, - - /** - * @return {boolean} true if fit to page is available and selected. - * @private - */ - isFitToPageSelected: function() { - return this.fitToPageTicketItem_.isCapabilityAvailable() && - !!this.fitToPageTicketItem_.getValue(); - }, - - /** - * @return {number} The current input field value as an integer. - * @private - */ - getInputAsNumber: function() { - return this.inputField_.valueAsNumber; + this.updateState_.bind(this, true)); }, /** @@ -126,29 +136,19 @@ * @private */ displayFitToPageScaling: function() { + this.fitToPageCheckbox_.checked = true; this.inputField_.value = this.fitToPageScaling_ || ''; this.removeHint_(); }, /** - * Whether the displayed scaling value matches the fit to page scaling. - * @private - */ - displayMatchesFitToPage: function() { - return ( - this.getInputAsNumber() == this.fitToPageScaling_ || - (this.inputField_.value == '' && !this.fitToPageScaling_)); - }, - - /** * Updates the fit to page scaling value of the scalings settings UI. * @param {number} fitToPageScaling The updated percentage scaling required * to fit the document to page. */ updateFitToPageScaling: function(fitToPageScaling) { this.fitToPageScaling_ = fitToPageScaling; - // Display the new value if fit to page is checked. - if (this.isFitToPageSelected()) + if (this.isFitToPageSelected_()) this.displayFitToPageScaling(); }, @@ -161,50 +161,60 @@ fadeOutElement(this.getChildElement('.hint')); }, - /** - * Updates the state of the scaling settings UI controls. - * @private - */ - updateState_: function() { - if (this.isAvailable()) { - // If fit to page is selected and the display matches, mark valid - // and return. - if (this.isFitToPageSelected() && this.displayMatchesFitToPage()) { - this.removeHint_(); - this.updateUiStateInternal(); - return; - } + /** @override */ + updateUiStateInternal: function() { + setIsVisible( + this.getChildElement('#fit-to-page-container'), + this.fitToPageTicketItem_.isCapabilityAvailable()); + setIsVisible( + this.getChildElement('.settings-box'), + this.scalingTicketItem_.isCapabilityAvailable() && + !this.collapseContent); + print_preview.SettingsSection.prototype.updateUiStateInternal.call(this); + }, - if (!this.inputField_.validity.valid) { - this.inputField_.classList.add('invalid'); - fadeInElement(this.getChildElement('.hint')); - this.updateUiStateInternal(); - return; - } - - this.inputField_.value = this.scalingTicketItem_.getValue(); - this.removeHint_(); - } - this.updateUiStateInternal(); + /** @override */ + isSectionVisibleInternal: function() { + return this.fitToPageTicketItem_.isCapabilityAvailable() || + (!this.collapseContent_ && + this.scalingTicketItem_.isCapabilityAvailable()); }, /** - * Helper function to adjust the scaling display if fit to page is checked - * by the user. + * Updates the state of the scaling settings UI controls. + * @param {boolean} fitToPageChange Whether this update is due to a change + * to the fit to page ticket item. * @private */ - onFitToPageChange_: function() { - if (this.isFitToPageSelected()) { - // Fit to page was checked. Set scaling to the fit to page scaling. - this.displayFitToPageScaling(); - } else if ( - this.fitToPageTicketItem_.isCapabilityAvailable() && - (this.displayMatchesFitToPage() || - !this.inputField_.validity.valid)) { - // Fit to page unchecked. Return to last scaling. - this.inputField_.value = this.scalingTicketItem_.getValue(); - this.removeHint_(); + updateState_: function(fitToPageChange) { + if (this.isAvailable()) { + if (fitToPageChange && this.isFitToPageSelected_()) { + // Fit to page was checked. Set scaling to the fit to page scaling. + this.displayFitToPageScaling(); + this.scalingTicketItem_.updateValue(this.lastValidScaling_); + } else if ( + fitToPageChange && + this.fitToPageTicketItem_.isCapabilityAvailable()) { + // Fit to page unchecked. Return to last valid scaling. + this.fitToPageCheckbox_.checked = false; + if (this.scalingTicketItem_.getValue() == this.lastValidScaling_) + this.inputField_.value = this.lastValidScaling_; + else + this.scalingTicketItem_.updateValue(this.lastValidScaling_); + } else if (!this.scalingTicketItem_.isValid()) { + // User entered invalid scaling value, display error message. + this.inputField_.classList.add('invalid'); + fadeInElement(this.getChildElement('.hint')); + } else { + // User entered valid scaling. Update the field and last valid. + if (!this.isFitToPageSelected_()) + this.inputField_.value = this.scalingTicketItem_.getValue(); + this.lastValidScaling_ = + /** @type {string} */ (this.scalingTicketItem_.getValue()); + this.removeHint_(); + } } + this.updateUiStateInternal(); }, /** @@ -213,26 +223,17 @@ */ onTextfieldTimeout_: function() { this.textfieldTimeout_ = null; - if (!this.inputField_.validity.valid) { - this.updateState_(); - return; - } - if (this.isFitToPageSelected() && !this.displayMatchesFitToPage() && - this.inputField_.value != '') { - // User modified value away from fit to page. - this.fitToPageTicketItem_.updateValue(false); - } - // Check this after checking for fit to page in case the user went - // back to their old value. - if (this.inputField_.valueAsNumber.toString() === - this.scalingTicketItem_.getValue()) { - this.updateState_(); - return; - } if (this.inputField_.value == '') return; - this.scalingTicketItem_.updateValue( - this.inputField_.valueAsNumber.toString()); + // Convert value to a valid number or ''. The scaling ticket item assumes + // the only invalid value is ''. + var value = + (this.inputField_.validity.valid && this.inputField_.value != '') ? + this.inputField_.valueAsNumber.toString() : + ''; + if (value != '' && this.isFitToPageSelected_()) + this.fitToPageTicketItem_.updateValue(false); + this.scalingTicketItem_.updateValue(value); }, /** @@ -251,10 +252,12 @@ /** * Called when a input event occurs on the textfield. Starts an input - * timeout. + * timeout and unchecks fit to page. * @private */ onTextfieldInput_: function() { + this.fitToPageCheckbox_.checked = false; + if (this.textfieldTimeout_) { clearTimeout(this.textfieldTimeout_); } @@ -270,19 +273,33 @@ * @private */ onTextfieldBlur_: function() { - if (this.inputField_.value == '' && this.inputField_.validity.valid) { - if (this.isFitToPageSelected()) { - this.displayFitToPageScaling(); - } else if (this.scalingTicketItem_.getValue() == '100') { + if (this.inputField_.value == '') { + if (this.isFitToPageSelected_() && this.fitToPageCheckbox_.checked) + return; + if (this.isFitToPageSelected_() && this.inputField_.validity.valid) + this.fitToPageTicketItem_.updateValue(false); + if (this.scalingTicketItem_.getValue() == '100') { // No need to update the ticket, but change the display to match. - this.inputField_.value = '100'; - this.removeHint_(); + this.updateState_(false); } else { this.scalingTicketItem_.updateValue('100'); } } }, + /** + * Called when the fit to page checkbox is clicked. Updates the fit to page + * ticket item and the display. + * @private + */ + onFitToPageClicked_: function() { + if (this.fitToPageTicketItem_.getValue() == + this.fitToPageCheckbox_.checked) { + this.updateState_(true); + } else { + this.fitToPageTicketItem_.updateValue(this.fitToPageCheckbox_.checked); + } + }, }; // Export
diff --git a/chrome/browser/resources/settings/about_page/about_page.html b/chrome/browser/resources/settings/about_page/about_page.html index 62f639b..903457b2 100644 --- a/chrome/browser/resources/settings/about_page/about_page.html +++ b/chrome/browser/resources/settings/about_page/about_page.html
@@ -77,7 +77,7 @@ <if expr="_google_chrome and is_macosx"> #promoteUpdater[disabled] { - @apply(--settings-secondary); + @apply(--cr-secondary-text); } </if> </style>
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html index 45b028b..3a8bee6 100644 --- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html +++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html
@@ -1,15 +1,12 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html"> -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/polymer/v1_0/neon-animation/neon-animatable.html"> <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-toggle-button/paper-toggle-button.html"> -<link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../i18n_setup.html"> <link rel="import" href="../icons.html"> <link rel="import" href="../prefs/prefs.html"> -<link rel="import" href="../prefs/prefs_behavior.html"> <link rel="import" href="../settings_page/settings_animated_pages.html"> <link rel="import" href="../settings_page/settings_subpage.html"> <link rel="import" href="../settings_shared_css.html"> @@ -22,45 +19,34 @@ <settings-animated-pages id="pages" section="bluetooth" focus-config="[[focusConfig_]]"> <neon-animatable route-path="default"> - <template is="dom-if" if="[[!isSecondaryUser_]]"> - <div id="bluetoothDevices" - class="settings-box two-line" actionable on-tap="onTap_"> - <iron-icon icon="[[getIcon_(adapterState_.powered)]]"></iron-icon> - <div class="middle"> - $i18n{bluetoothPageTitle} - <div class="secondary" id="bluetoothSecondary"> - [[getOnOffString_(adapterState_.powered, - '$i18nPolymer{deviceOn}', '$i18nPolymer{deviceOff}')]] - </div> - </div> - <cr-policy-pref-indicator - icon-aria-label="$i18n{bluetoothPageTitle}" - pref="[[prefs.cros.device.allow_bluetooth]]" - hidden="[[prefs.cros.device.allow_bluetooth.value]]"> - </cr-policy-pref-indicator> - <template is="dom-if" if="[[adapterState_.powered]]"> - <button class="subpage-arrow" is="paper-icon-button-light" - on-tap="onSubpageArrowTap_" - aria-label="$i18n{bluetoothPageTitle}" - aria-describedby="bluetoothSecondary"> - </button> - </template> - <div class="separator"></div> - <settings-toggle-button id="enableBluetooth" - pref="{{prefs.ash.user.bluetooth.adapter_enabled}}" - disabled$="[[!adapterState_.available]]" on-tap="stopTap_" - label="$i18n{bluetoothToggleA11yLabel}"> - </settings-toggle-button> - </div> - </template> - <template is="dom-if" if="[[isSecondaryUser_]]"> - <div id="bluetoothDevices" class="settings-box two-line"> - <iron-icon class="policy" icon="cr:group"></iron-icon> - <div class="middle"> - [[i18n('networkPrimaryUserControlled', primaryUserEmail_)]] + <div id="bluetoothDevices" + class="settings-box two-line" actionable on-tap="onTap_"> + <iron-icon icon="[[getIcon_(bluetoothToggleState_)]]"></iron-icon> + <div class="middle"> + $i18n{bluetoothPageTitle} + <div class="secondary" id="bluetoothSecondary"> + [[getOnOffString_(bluetoothToggleState_, + '$i18nPolymer{deviceOn}', '$i18nPolymer{deviceOff}')]] </div> </div> - </template> + <cr-policy-pref-indicator icon-aria-label="$i18n{bluetoothPageTitle}" + pref="[[prefs.cros.device.allow_bluetooth]]" + hidden="[[prefs.cros.device.allow_bluetooth.value]]"> + </cr-policy-pref-indicator> + <template is="dom-if" if="[[bluetoothToggleState_]]"> + <button class="subpage-arrow" is="paper-icon-button-light" + on-tap="onSubpageArrowTap_" + aria-label="$i18n{bluetoothPageTitle}" + aria-describedby="bluetoothSecondary"> + </button> + </template> + <div class="separator"></div> + <paper-toggle-button id="enableBluetooth" + checked="{{bluetoothToggleState_}}" + disabled$="[[bluetoothToggleDisabled_]]" on-tap="stopTap_" + aria-label="$i18n{bluetoothToggleA11yLabel}"> + </paper-toggle-button> + </div> </neon-animatable> <template is="dom-if" route-path="/bluetoothDevices"> @@ -68,9 +54,10 @@ page-title="$i18n{bluetoothPageTitle}"> <settings-bluetooth-subpage adapter-state="[[adapterState_]]" + bluetooth-toggle-state="{{bluetoothToggleState_}}" + bluetooth-toggle-disabled="[[bluetoothToggleDisabled_]]" bluetooth="[[bluetooth]]" - bluetooth-private="[[bluetoothPrivate]]" - prefs="{{prefs}}"> + bluetooth-private="[[bluetoothPrivate]]"> </settings-bluetooth-subpage> </settings-subpage> </template>
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js index 13d380f..35b5c439 100644 --- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js +++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
@@ -25,8 +25,6 @@ Polymer({ is: 'settings-bluetooth-page', - behaviors: [I18nBehavior, PrefsBehavior], - properties: { /** Preferences state. */ prefs: { @@ -35,6 +33,29 @@ }, /** + * Reflects the current state of the toggle buttons (in this page and the + * subpage). This will be set when the adapter state change or when the user + * changes the toggle. + * @private + */ + bluetoothToggleState_: { + type: Boolean, + observer: 'bluetoothToggleStateChanged_', + }, + + /** + * Set to true before the adapter state is received, when the adapter is + * unavailable, and while an adapter state change is requested. This + * prevents user changes while a change is in progress or when the adapter + * is not available. + * @private + */ + bluetoothToggleDisabled_: { + type: Boolean, + value: true, + }, + + /** * The cached bluetooth adapter state. * @type {!chrome.bluetooth.AdapterState|undefined} * @private @@ -77,30 +98,6 @@ type: Object, value: chrome.bluetoothPrivate, }, - - /** - * Whether the user is a secondary user. - * @private - */ - isSecondaryUser_: { - type: Boolean, - value: function() { - return loadTimeData.getBoolean('isSecondaryUser'); - }, - readOnly: true, - }, - - /** - * Email address for the primary user. - * @private - */ - primaryUserEmail_: { - type: String, - value: function() { - return loadTimeData.getString('primaryUserEmail'); - }, - readOnly: true, - }, }, observers: ['deviceListChanged_(deviceList_.*)'], @@ -143,8 +140,8 @@ * @return {string} * @private */ - getIcon_: function(enabled) { - if (!enabled) + getIcon_: function() { + if (!this.bluetoothToggleState_) return 'settings:bluetooth-disabled'; return 'settings:bluetooth'; }, @@ -167,14 +164,16 @@ */ onBluetoothAdapterStateChanged_: function(state) { this.adapterState_ = state; + this.bluetoothToggleState_ = state.powered; + this.bluetoothToggleDisabled_ = !state.available; }, /** @private */ onTap_: function() { if (this.adapterState_.available === false) return; - if (!this.adapterState_.powered) - this.setPrefValue('ash.user.bluetooth.adapter_enabled', true); + if (!this.bluetoothToggleState_) + this.bluetoothToggleState_ = true; else this.openSubpage_(); }, @@ -197,6 +196,23 @@ }, /** @private */ + bluetoothToggleStateChanged_: function() { + if (!this.adapterState_ || this.bluetoothToggleDisabled_ || + this.bluetoothToggleState_ == this.adapterState_.powered) { + return; + } + this.bluetoothToggleDisabled_ = true; + this.bluetoothPrivate.setAdapterState( + {powered: this.bluetoothToggleState_}, function() { + if (chrome.runtime.lastError) { + console.error( + 'Error enabling bluetooth: ' + + chrome.runtime.lastError.message); + } + }); + }, + + /** @private */ openSubpage_: function() { settings.navigateTo(settings.routes.BLUETOOTH_DEVICES); }
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html index c2ab103..7a782ee 100644 --- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html +++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html
@@ -6,7 +6,6 @@ <link rel="import" href="chrome://resources/polymer/v1_0/iron-list/iron-list.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-toggle-button/paper-toggle-button.html"> -<link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../i18n_setup.html"> <link rel="import" href="../icons.html"> <link rel="import" href="../settings_shared_css.html"> @@ -41,27 +40,28 @@ </style> <div class="settings-box first"> - <div id="onOff" class="start" on$="[[adapterState.powered]]"> - [[getOnOffString_(adapterState.powered, + <div id="onOff" class="start" on$="[[bluetoothToggleState]]"> + [[getOnOffString_(bluetoothToggleState, '$i18nPolymer{deviceOn}', '$i18nPolymer{deviceOff}')]] </div> - <settings-toggle-button id="enableBluetooth" - pref="{{prefs.ash.user.bluetooth.adapter_enabled}}" - label="$i18n{bluetoothToggleA11yLabel}"> - </settings-toggle-button> + <paper-toggle-button id="enableBluetooth" + checked="{{bluetoothToggleState}}" + disabled$="[[bluetoothToggleDisabled]]" + aria-label="$i18n{bluetoothToggleA11yLabel}"> + </paper-toggle-button> </div> <!-- Paired device list --> - <div class="settings-box first header" hidden="[[!adapterState.powered]]"> + <div class="settings-box first header" hidden="[[!bluetoothToggleState]]"> <div class="start">$i18n{bluetoothDeviceListPaired}</div> </div> <div id="noPairedDevices" class="list-frame" - hidden="[[!showNoDevices_(adapterState.powered, pairedDeviceList_)]]"> + hidden="[[!showNoDevices_(bluetoothToggleState, pairedDeviceList_)]]"> $i18n{bluetoothNoDevices} </div> <div id="pairedContainer" class="container" scrollable on-device-event="onDeviceEvent_" - hidden="[[!showDevices_(adapterState.powered, pairedDeviceList_)]]"> + hidden="[[!showDevices_(bluetoothToggleState, pairedDeviceList_)]]"> <iron-list id="pairedDevices" class="vertical-list" preserve-focus items="[[pairedDeviceList_]]" selection-enabled selected-item="{{selectedPairedItem_}}" @@ -75,18 +75,18 @@ </div> <!-- Unpaired device list --> - <div class="settings-box first header" hidden="[[!adapterState.powered]]"> + <div class="settings-box first header" hidden="[[!bluetoothToggleState]]"> <div class="start">$i18n{bluetoothDeviceListUnpaired}</div> <paper-spinner active="[[showSpinner_]]"> </paper-spinner> </div> <div id="noUnpairedDevices" class="list-frame" - hidden="[[!showNoDevices_(adapterState.powered, unpairedDeviceList_)]]"> + hidden="[[!showNoDevices_(bluetoothToggleState, unpairedDeviceList_)]]"> $i18n{bluetoothNoDevicesFound} </div> <div id="unpairedContainer" class="container" scrollable on-device-event="onDeviceEvent_" - hidden="[[!showDevices_(adapterState.powered, unpairedDeviceList_)]]"> + hidden="[[!showDevices_(bluetoothToggleState, unpairedDeviceList_)]]"> <iron-list id="unpairedDevices" class="vertical-list" preserve-focus items="[[unpairedDeviceList_]]" selection-enabled selected-item="{{selectedUnpairedItem_}}"
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js index 3bae2526..5487662 100644 --- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js +++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.js
@@ -18,9 +18,9 @@ ], properties: { - /** Preferences state. */ - prefs: { - type: Object, + /** Reflects the bluetooth-page property. */ + bluetoothToggleState: { + type: Boolean, notify: true, }, @@ -239,7 +239,7 @@ * @private */ updateDeviceList_: function() { - if (!this.adapterState.powered) { + if (!this.bluetoothToggleState) { this.deviceList_ = []; return; } @@ -342,23 +342,23 @@ }, /** - * @param {boolean} adapterPoweredState + * @param {boolean} bluetoothToggleState * @param {!Array<!chrome.bluetooth.Device>} deviceList * @return {boolean} * @private */ - showDevices_: function(adapterPoweredState, deviceList) { - return adapterPoweredState && deviceList.length > 0; + showDevices_: function(bluetoothToggleState, deviceList) { + return bluetoothToggleState && deviceList.length > 0; }, /** - * @param {boolean} adapterPoweredState + * @param {boolean} bluetoothToggleState * @param {!Array<!chrome.bluetooth.Device>} deviceList * @return {boolean} * @private */ - showNoDevices_: function(adapterPoweredState, deviceList) { - return adapterPoweredState && deviceList.length == 0; + showNoDevices_: function(bluetoothToggleState, deviceList) { + return bluetoothToggleState && deviceList.length == 0; }, /**
diff --git a/chrome/browser/resources/settings/bluetooth_page/compiled_resources2.gyp b/chrome/browser/resources/settings/bluetooth_page/compiled_resources2.gyp index d7d70897..3d4051ba 100644 --- a/chrome/browser/resources/settings/bluetooth_page/compiled_resources2.gyp +++ b/chrome/browser/resources/settings/bluetooth_page/compiled_resources2.gyp
@@ -7,7 +7,6 @@ 'target_name': 'bluetooth_page', 'dependencies': [ '../compiled_resources2.gyp:route', - '../prefs/compiled_resources2.gyp:prefs_behavior', '../settings_page/compiled_resources2.gyp:settings_animated_pages', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:i18n_behavior', @@ -22,7 +21,6 @@ 'target_name': 'bluetooth_subpage', 'dependencies': [ '../compiled_resources2.gyp:route', - '../prefs/compiled_resources2.gyp:prefs_behavior', '<(DEPTH)/ui/webui/resources/cr_elements/compiled_resources2.gyp:cr_scrollable_behavior', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:i18n_behavior',
diff --git a/chrome/browser/resources/settings/internet_page/internet_detail_page.html b/chrome/browser/resources/settings/internet_page/internet_detail_page.html index 2582a783..e2f90ec6 100644 --- a/chrome/browser/resources/settings/internet_page/internet_detail_page.html +++ b/chrome/browser/resources/settings/internet_page/internet_detail_page.html
@@ -53,14 +53,6 @@ border-top: none; } - .settings-box.indented { - -webkit-margin-start: var(--settings-box-row-padding); - } - - .settings-box.stretch { - align-items: stretch; - } - #networkState[connected] { color: var(--google-green-500); } @@ -250,7 +242,7 @@ </div> <iron-collapse opened="[[networkExpanded_]]"> - <div class="settings-box single-column stretch"> + <div class="settings-box single-column stretch indented"> <!-- APN --> <template is="dom-if" if="[[isCellular_(networkProperties)]]"> <network-apnlist editable on-apn-change="onNetworkPropertyChange_" @@ -281,12 +273,10 @@ </div> <iron-collapse opened="[[proxyExpanded_]]"> - <div class="settings-box single-column stretch"> - <network-proxy-section prefs="{{prefs}}" - on-proxy-change="onProxyChange_" - network-properties="[[networkProperties]]"> - </network-proxy-section> - </div> + <network-proxy-section prefs="{{prefs}}" + on-proxy-change="onProxyChange_" + network-properties="[[networkProperties]]"> + </network-proxy-section> </iron-collapse> </template> </template>
diff --git a/chrome/browser/resources/settings/internet_page/internet_shared_css.html b/chrome/browser/resources/settings/internet_page/internet_shared_css.html index 28f32f2..8a9fbd2 100644 --- a/chrome/browser/resources/settings/internet_page/internet_shared_css.html +++ b/chrome/browser/resources/settings/internet_page/internet_shared_css.html
@@ -22,6 +22,14 @@ margin-top: -9px; } + .indented { + -webkit-margin-start: var(--settings-box-row-padding); + } + + .stretch { + align-items: stretch; + } + .title { font-size: 107.69%; /* 14px / 13px */ font-weight: 500;
diff --git a/chrome/browser/resources/settings/internet_page/internet_subpage.js b/chrome/browser/resources/settings/internet_page/internet_subpage.js index d64268471..92870ea 100644 --- a/chrome/browser/resources/settings/internet_page/internet_subpage.js +++ b/chrome/browser/resources/settings/internet_page/internet_subpage.js
@@ -84,7 +84,7 @@ }, }, - observers: ['updateScanning_(networkingPrivate, deviceState)'], + observers: ['deviceStateChanged_(networkingPrivate, deviceState)'], /** @private {number|null} */ scanIntervalId_: null, @@ -98,8 +98,6 @@ /** override */ attached: function() { - this.scanIntervalId_ = null; - this.networkListChangedListener_ = this.networkListChangedListener_ || this.onNetworkListChangedEvent_.bind(this); this.networkingPrivate.onNetworkListChanged.addListener( @@ -132,15 +130,24 @@ }, /** @private */ + deviceStateChanged_: function() { + this.showSpinner = !!this.deviceState.Scanning; + + // Scans should only be triggered by the "networks" subpage. + if (settings.getCurrentRoute() != settings.routes.INTERNET_NETWORKS) { + this.stopScanning_(); + return; + } + + this.updateScanning_(); + }, + + /** @private */ updateScanning_: function() { if (!this.deviceState) return; - if (this.deviceState.Type == CrOnc.Type.WI_FI || - this.deviceState.Type == CrOnc.Type.TETHER || - (this.deviceState.Type == CrOnc.Type.CELLULAR && - this.tetherDeviceState)) { - this.showSpinner = !!this.deviceState.Scanning; + if (this.shouldStartScan_()) { this.startScanning_(); return; } @@ -149,6 +156,26 @@ this.getNetworkStateList_(); }, + /** + * @return {boolean} + * @private + */ + shouldStartScan_: function() { + // Scans should be kicked off from the Wi-Fi networks subpage. + if (this.deviceState.Type == CrOnc.Type.WI_FI) + return true; + + // Scans should be kicked off from the Mobile data subpage, as long as it + // includes Tether networks. + if (this.deviceState.Type == CrOnc.Type.TETHER || + (this.deviceState.Type == CrOnc.Type.CELLULAR && + this.tetherDeviceState)) { + return true; + } + + return false; + }, + /** @private */ startScanning_: function() { if (this.scanIntervalId_ != null)
diff --git a/chrome/browser/resources/settings/internet_page/network_proxy_section.html b/chrome/browser/resources/settings/internet_page/network_proxy_section.html index 275182f..f4cddf4 100644 --- a/chrome/browser/resources/settings/internet_page/network_proxy_section.html +++ b/chrome/browser/resources/settings/internet_page/network_proxy_section.html
@@ -61,7 +61,7 @@ </template> <!-- Allow shared proxies --> - <settings-toggle-button id="allowShared" class="continuation" + <settings-toggle-button id="allowShared" class="continuation indented" hidden$="[[!shouldShowAllowShared_( networkProperties.ProxySettings.Type)]]" pref="{{prefs.settings.use_shared_proxies}}" @@ -70,10 +70,12 @@ no-set-pref> </settings-toggle-button> - <network-proxy editable - network-properties="[[networkProperties]]" - use-shared-proxies="[[useSharedProxies_]]"> - </network-proxy> + <div class="settings-box single-column stretch continuation indented"> + <network-proxy editable + network-properties="[[networkProperties]]" + use-shared-proxies="[[useSharedProxies_]]"> + </network-proxy> + </div> <!-- Confirm Allow shared proxies dialog --> <dialog is="cr-dialog" id="confirmAllowSharedDialog"
diff --git a/chrome/browser/resources/settings/search_page/search_page.html b/chrome/browser/resources/settings/search_page/search_page.html index 40e094c..2ee5d12 100644 --- a/chrome/browser/resources/settings/search_page/search_page.html +++ b/chrome/browser/resources/settings/search_page/search_page.html
@@ -159,7 +159,8 @@ <if expr="chromeos"> <!-- Google Assistant --> - <template is="dom-if" if="[[voiceInteractionFeatureEnabled_]]"> + <template is="dom-if" if="[[showAssistantSection_( + voiceInteractionFeatureEnabled_, prefs.arc.enabled.value)]]"> <div id="assistant-subpage-trigger" class="settings-box two-line" on-tap="onGoogleAssistantTap_" actionable> <div class="start">
diff --git a/chrome/browser/resources/settings/search_page/search_page.js b/chrome/browser/resources/settings/search_page/search_page.js index 48e4551..f832211 100644 --- a/chrome/browser/resources/settings/search_page/search_page.js +++ b/chrome/browser/resources/settings/search_page/search_page.js
@@ -208,6 +208,16 @@ toggleValue ? 'searchGoogleAssistantEnabled' : 'searchGoogleAssistantDisabled'); }, + + /** + * @param {boolean} featureAvailable + * @param {boolean} arcEnabled + * @return {boolean} + * @private + */ + showAssistantSection_: function(featureAvailable, arcEnabled) { + return featureAvailable && arcEnabled; + }, // </if> /**
diff --git a/chrome/browser/resources/settings/settings_shared_css.html b/chrome/browser/resources/settings/settings_shared_css.html index 07145189..62d9a2b97 100644 --- a/chrome/browser/resources/settings/settings_shared_css.html +++ b/chrome/browser/resources/settings/settings_shared_css.html
@@ -278,7 +278,7 @@ /* The lower line of text in a two-line row. */ .secondary { - @apply(--settings-secondary); + @apply(--cr-secondary-text); } /* The |:empty| CSS selector only works when there is no whitespace.
diff --git a/chrome/browser/resources/settings/settings_vars_css.html b/chrome/browser/resources/settings/settings_vars_css.html index 5dceeac1..9efc68e9 100644 --- a/chrome/browser/resources/settings/settings_vars_css.html +++ b/chrome/browser/resources/settings/settings_vars_css.html
@@ -43,10 +43,6 @@ white-space: nowrap; }; - --settings-secondary: { - color: var(--paper-grey-600); - font-weight: 400; - }; --settings-separator-height: var(--cr-separator-height); --settings-separator-line: var(--cr-separator-line);
diff --git a/chrome/browser/resources/signin/signin_dice_internals/signin_dice_internals.html b/chrome/browser/resources/signin/signin_dice_internals/signin_dice_internals.html deleted file mode 100644 index 54136bcd..0000000 --- a/chrome/browser/resources/signin/signin_dice_internals/signin_dice_internals.html +++ /dev/null
@@ -1,51 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <link rel="import" href="chrome://resources/html/polymer.html"> - <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> - <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html"> - <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> - <link rel="import" href="chrome://resources/html/cr.html"> - <link rel="import" href="chrome://resources/html/util.html"> - <style is="custom-style"> - .top-title-bar { - align-items: center; - border-bottom: 1px solid var(--paper-grey-300); - display: flex; - font-size: 16px; - height: 52px; - padding: 0 24px; - } - .container { - background-color: white; - color: #333; - width: 448px; - } - .action-container { - display: flex; - justify-content: flex-start; - padding: 16px; - } - paper-button.primary-action { - --paper-button-flat-keyboard-focus: { - background: rgb(58, 117, 215); - font-weight: 500; - }; - background: var(--google-blue-500); - color: white; - } - </style> - </head> - <body> - <div class="container"> - <div class="top-title-bar">Desktop Identity Consistency Internals</div> - <div class="action-container"> - <paper-button class="primary-action" id="enableSyncButton"> - Enable Sync - </paper-button> - </div> - </div> - </body> - <script src="signin_dice_internals.js"></script> -</html>
diff --git a/chrome/browser/resources/signin/signin_dice_internals/signin_dice_internals.js b/chrome/browser/resources/signin/signin_dice_internals/signin_dice_internals.js deleted file mode 100644 index 4a63983..0000000 --- a/chrome/browser/resources/signin/signin_dice_internals/signin_dice_internals.js +++ /dev/null
@@ -1,21 +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. */ - -cr.define('signin.dice', function() { - 'use strict'; - - function initialize() { - $('enableSyncButton').addEventListener('click', onEnableSync); - } - - function onEnableSync(e) { - chrome.send('enableSync'); - } - - return { - initialize: initialize, - }; -}); - -document.addEventListener('DOMContentLoaded', signin.dice.initialize);
diff --git a/chrome/browser/search_provider_logos/logo_service_factory.cc b/chrome/browser/search_provider_logos/logo_service_factory.cc index 29175eca..a31b727c 100644 --- a/chrome/browser/search_provider_logos/logo_service_factory.cc +++ b/chrome/browser/search_provider_logos/logo_service_factory.cc
@@ -14,11 +14,15 @@ #include "net/url_request/url_request_context_getter.h" #if defined(OS_ANDROID) -#include "chrome/browser/android/chrome_feature_list.h" +#include "chrome/browser/android/feature_utilities.h" #endif using search_provider_logos::LogoService; +#if defined(OS_ANDROID) +using chrome::android::GetIsChromeHomeEnabled; +#endif // defined(OS_ANDROID) + namespace { constexpr base::FilePath::CharType kCachedLogoDirectory[] = @@ -51,8 +55,7 @@ Profile* profile = static_cast<Profile*>(context); DCHECK(!profile->IsOffTheRecord()); #if defined(OS_ANDROID) - bool use_gray_background = - !base::FeatureList::IsEnabled(chrome::android::kChromeHomeFeature); + bool use_gray_background = !GetIsChromeHomeEnabled(); #else bool use_gray_background = false; #endif
diff --git a/chrome/browser/signin/easy_unlock_service_regular.cc b/chrome/browser/signin/easy_unlock_service_regular.cc index b102e629..7dcd1c7 100644 --- a/chrome/browser/signin/easy_unlock_service_regular.cc +++ b/chrome/browser/signin/easy_unlock_service_regular.cc
@@ -491,15 +491,15 @@ void EasyUnlockServiceRegular::InitializeInternal() { proximity_auth::ScreenlockBridge::Get()->AddObserver(this); + pref_manager_.reset(new proximity_auth::ProximityAuthProfilePrefManager( + profile()->GetPrefs())); + #if defined(OS_CHROMEOS) // TODO(tengs): Due to badly configured browser_tests, Chrome crashes during // shutdown. Revisit this condition after migration is fully completed. if (!base::CommandLine::ForCurrentProcess()->HasSwitch( proximity_auth::switches::kDisableBluetoothLowEnergyDiscovery) && !base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)) { - pref_manager_.reset(new proximity_auth::ProximityAuthProfilePrefManager( - profile()->GetPrefs())); - // Note: There is no local state in tests. if (g_browser_process->local_state()) { pref_manager_->StartSyncingToLocalState(g_browser_process->local_state(),
diff --git a/chrome/browser/ssl/ssl_browser_tests.cc b/chrome/browser/ssl/ssl_browser_tests.cc index 01b975c..6a321ea 100644 --- a/chrome/browser/ssl/ssl_browser_tests.cc +++ b/chrome/browser/ssl/ssl_browser_tests.cc
@@ -1647,8 +1647,9 @@ base::ThreadRestrictions::ScopedAllowIO allow_io; EXPECT_TRUE(base::ReadFileToString(cert_path, &pkcs12_data)); } - EXPECT_EQ(net::OK, cert_db_->ImportFromPKCS12(public_slot.get(), pkcs12_data, - base::string16(), true, NULL)); + EXPECT_EQ(net::OK, + cert_db_->ImportFromPKCS12(public_slot.get(), pkcs12_data, + base::string16(), true, nullptr)); // Start WebSocket test server with TLS and client cert authentication. net::SpawnedTestServer::SSLOptions options(
diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc index 3f47bc77..3c18286f 100644 --- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc +++ b/chrome/browser/subresource_filter/chrome_subresource_filter_client.cc
@@ -132,15 +132,17 @@ bool ChromeSubresourceFilterClient::OnPageActivationComputed( content::NavigationHandle* navigation_handle, - bool activated) { + bool activated, + bool suppressing_notifications) { const GURL& url(navigation_handle->GetURL()); DCHECK(navigation_handle->IsInMainFrame()); if (url.SchemeIsHTTPOrHTTPS()) { // With respect to persistent metadata, do not consider the site activated - // if it is forced via devtools. + // if it is forced via devtools, or if we are suppressing notifications. settings_manager_->ResetSiteMetadataBasedOnActivation( - url, activated && !activated_via_devtools_); + url, + activated && !activated_via_devtools_ && !suppressing_notifications); } // Return whether the activation should be whitelisted. @@ -190,6 +192,11 @@ void ChromeSubresourceFilterClient::ShowUI(const GURL& url) { DCHECK(!activated_via_devtools_); + DCHECK_NE(subresource_filter::ContentSubresourceFilterDriverFactory:: + FromWebContents(web_contents_) + ->GetMatchedConfigurationForLastCommittedPageLoad(), + subresource_filter::Configuration::MakeForForcedActivation()); + #if defined(OS_ANDROID) InfoBarService* infobar_service = InfoBarService::FromWebContents(web_contents_);
diff --git a/chrome/browser/subresource_filter/chrome_subresource_filter_client.h b/chrome/browser/subresource_filter/chrome_subresource_filter_client.h index 22a17f68..46bf337 100644 --- a/chrome/browser/subresource_filter/chrome_subresource_filter_client.h +++ b/chrome/browser/subresource_filter/chrome_subresource_filter_client.h
@@ -111,7 +111,8 @@ void ShowNotification() override; void OnNewNavigationStarted() override; bool OnPageActivationComputed(content::NavigationHandle* navigation_handle, - bool activated) override; + bool activated, + bool suppressing_notifications) override; void WhitelistInCurrentWebContents(const GURL& url) override; subresource_filter::VerifiedRulesetDealer::Handle* GetRulesetDealer() override;
diff --git a/chrome/browser/subresource_filter/subresource_filter_special_subframe_navigations_browsertest.cc b/chrome/browser/subresource_filter/subresource_filter_special_subframe_navigations_browsertest.cc index 43fbdd2..573508e 100644 --- a/chrome/browser/subresource_filter/subresource_filter_special_subframe_navigations_browsertest.cc +++ b/chrome/browser/subresource_filter/subresource_filter_special_subframe_navigations_browsertest.cc
@@ -28,16 +28,18 @@ // Tests that navigations to special URLs (e.g. about:blank, data URLs, etc) // which do not trigger ReadyToCommitNavigation (and therefore our activation // IPC), properly inherit the activation of their parent frame. +// Also tests that a child frame of a special url frame inherits the activation +// state of its parent. IN_PROC_BROWSER_TEST_F(SubresourceFilterSpecialSubframeNavigationsBrowserTest, NavigationsWithNoIPC_HaveActivation) { const GURL url(GetTestUrl("subresource_filter/frame_set_special_urls.html")); - const std::vector<const char*> subframe_names{"blank", "js", "data", - "srcdoc"}; + const std::vector<const char*> subframe_names{"blank", "grandChild", "js", + "data", "srcdoc"}; ConfigureAsPhishingURL(url); ui_test_utils::NavigateToURL(browser(), url); ASSERT_NO_FATAL_FAILURE(ExpectParsedScriptElementLoadedStatusInFrames( - subframe_names, {true, true, true, true})); + subframe_names, {true, true, true, true, true})); // Disallow included_script.js, and all frames should filter it in subsequent // navigations. @@ -45,13 +47,14 @@ SetRulesetToDisallowURLsWithPathSuffix("included_script.js")); ui_test_utils::NavigateToURL(browser(), url); ASSERT_NO_FATAL_FAILURE(ExpectParsedScriptElementLoadedStatusInFrames( - subframe_names, {false, false, false, false})); + subframe_names, {false, false, false, false, false})); } // Navigate to a site with site hierarchy a(b(c)). Let a navigate c to a data // URL, and expect that the resulting frame has activation. We expect to fail in -// --site-per-process because c is navigated to a's process. Therefore we can't -// sniff b's activation state from c. See crbug.com/739777. +// --site-per-process with PlzNavigate disabled because c is navigated to a's +// process. Therefore we can't sniff b's activation state from c. +// See crbug.com/739777. IN_PROC_BROWSER_TEST_F(SubresourceFilterSpecialSubframeNavigationsBrowserTest, NavigateCrossProcessDataUrl_MaintainsActivation) { const GURL main_url(embedded_test_server()->GetURL(
diff --git a/chrome/browser/subresource_filter/subresource_filter_unittest.cc b/chrome/browser/subresource_filter/subresource_filter_unittest.cc index 404e3c1..6f8ffed 100644 --- a/chrome/browser/subresource_filter/subresource_filter_unittest.cc +++ b/chrome/browser/subresource_filter/subresource_filter_unittest.cc
@@ -227,6 +227,28 @@ kActionForcedActivationEnabled, 1); } +// Ensure that forcing activation uses its own custom configuration without +// inheriting any custom activation options. +TEST_F(SubresourceFilterTest, + ForceActivation_DisableRuleset_SubframeDisallowed) { + subresource_filter::Configuration config( + subresource_filter::ActivationLevel::ENABLED, + subresource_filter::ActivationScope::ALL_SITES); + config.activation_options.should_disable_ruleset_rules = true; + scoped_configuration().ResetConfiguration(std::move(config)); + + const GURL url("https://a.test/"); + ConfigureAsSubresourceFilterOnlyURL(url); + SimulateNavigateAndCommit(url, main_rfh()); + EXPECT_TRUE(CreateAndNavigateDisallowedSubframe(main_rfh())); + + GetClient()->ToggleForceActivationInCurrentWebContents(true); + SimulateNavigateAndCommit(url, main_rfh()); + // should_disable_ruleset_rules is not inherited by the forced activation + // configuration. + EXPECT_FALSE(CreateAndNavigateDisallowedSubframe(main_rfh())); +} + TEST_F(SubresourceFilterTest, UIShown_LogsRappor) { rappor::TestRapporServiceImpl rappor_tester; TestingBrowserProcess::GetGlobal()->SetRapporServiceImpl(&rappor_tester); @@ -246,3 +268,22 @@ // The host is the same as the etld+1 in this case. EXPECT_EQ(url.host(), sample_string); } + +TEST_F(SubresourceFilterTest, AbusiveEnforcement_NoMetadata) { + subresource_filter::Configuration config( + subresource_filter::ActivationLevel::ENABLED, + subresource_filter::ActivationScope::ACTIVATION_LIST, + subresource_filter::ActivationList::SUBRESOURCE_FILTER); + config.activation_options.should_disable_ruleset_rules = true; + config.activation_options.should_strengthen_popup_blocker = true; + config.activation_options.should_suppress_notifications = true; + + scoped_configuration().ResetConfiguration(std::move(config)); + + GURL url("https://a.test"); + ConfigureAsSubresourceFilterOnlyURL(url); + SimulateNavigateAndCommit(url, main_rfh()); + EXPECT_TRUE(CreateAndNavigateDisallowedSubframe(main_rfh())); + EXPECT_EQ(nullptr, GetSettingsManager()->GetSiteMetadata(url)); + EXPECT_FALSE(GetClient()->did_show_ui_for_navigation()); +}
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 97c769cd..6c7452a4 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2055,8 +2055,6 @@ sources += [ "webui/signin/signin_dice_internals_handler.cc", "webui/signin/signin_dice_internals_handler.h", - "webui/signin/signin_dice_internals_ui.cc", - "webui/signin/signin_dice_internals_ui.h", ] } if (is_mac && !mac_views_browser) {
diff --git a/chrome/browser/ui/app_list/search/search_resource_manager.cc b/chrome/browser/ui/app_list/search/search_resource_manager.cc index 5c2939a..763aa36 100644 --- a/chrome/browser/ui/app_list/search/search_resource_manager.cc +++ b/chrome/browser/ui/app_list/search/search_resource_manager.cc
@@ -44,7 +44,7 @@ if (is_fullscreen_app_list_enabled_) { search_box_->SetAccessibleName( - l10n_util::GetStringUTF16(IDS_SEARCH_BOX_HINT_FULLSCREEN)); + l10n_util::GetStringUTF16(IDS_SEARCH_BOX_ACCESSIBILITY_NAME)); } else { search_box_->SetAccessibleName( l10n_util::GetStringUTF16(IDS_SEARCH_BOX_HINT));
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc index 6052b947..bc6fd95 100644 --- a/chrome/browser/ui/ash/chrome_shell_delegate.cc +++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -145,16 +145,6 @@ return chromeos::MagnificationManager::Get()->IsMagnifierEnabled(); } - void SetLargeCursorEnabled(bool enabled) override { - DCHECK(AccessibilityManager::Get()); - return AccessibilityManager::Get()->EnableLargeCursor(enabled); - } - - bool IsLargeCursorEnabled() const override { - DCHECK(AccessibilityManager::Get()); - return AccessibilityManager::Get()->IsLargeCursorEnabled(); - } - void SetAutoclickEnabled(bool enabled) override { DCHECK(AccessibilityManager::Get()); return AccessibilityManager::Get()->EnableAutoclick(enabled); @@ -524,21 +514,17 @@ IDR_BLUETOOTH_KEYBOARD); } -bool ChromeShellDelegate::IsTouchscreenEnabledInPrefs( - bool use_local_state) const { - return chromeos::system::InputDeviceSettings::Get() - ->IsTouchscreenEnabledInPrefs(use_local_state); +bool ChromeShellDelegate::GetTouchscreenEnabled( + ash::TouchscreenEnabledSource source) const { + return chromeos::system::InputDeviceSettings::Get()->GetTouchscreenEnabled( + source); } -void ChromeShellDelegate::SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) { - chromeos::system::InputDeviceSettings::Get()->SetTouchscreenEnabledInPrefs( - enabled, use_local_state); -} - -void ChromeShellDelegate::UpdateTouchscreenStatusFromPrefs() { - chromeos::system::InputDeviceSettings::Get() - ->UpdateTouchscreenStatusFromPrefs(); +void ChromeShellDelegate::SetTouchscreenEnabled( + bool enabled, + ash::TouchscreenEnabledSource source) { + chromeos::system::InputDeviceSettings::Get()->SetTouchscreenEnabled(enabled, + source); } void ChromeShellDelegate::ToggleTouchpad() {
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.h b/chrome/browser/ui/ash/chrome_shell_delegate.h index d7b96224..bc9a615 100644 --- a/chrome/browser/ui/ash/chrome_shell_delegate.h +++ b/chrome/browser/ui/ash/chrome_shell_delegate.h
@@ -52,10 +52,10 @@ base::string16 GetProductName() const override; void OpenKeyboardShortcutHelpPage() const override; gfx::Image GetDeprecatedAcceleratorImage() const override; - bool IsTouchscreenEnabledInPrefs(bool use_local_state) const override; - void SetTouchscreenEnabledInPrefs(bool enabled, - bool use_local_state) override; - void UpdateTouchscreenStatusFromPrefs() override; + bool GetTouchscreenEnabled( + ash::TouchscreenEnabledSource source) const override; + void SetTouchscreenEnabled(bool enabled, + ash::TouchscreenEnabledSource source) override; void ToggleTouchpad() override; void SuspendMediaSessions() override; ui::InputDeviceControllerClient* GetInputDeviceControllerClient() override;
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 dbdc9a2..3110d714 100644 --- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
@@ -109,7 +109,6 @@ save_card_bubble_view_->Hide(); save_card_bubble_view_ = nullptr; } - show_upload_confirm_title_ = false; } void SaveCardBubbleControllerImpl::ReshowBubble() { @@ -138,7 +137,7 @@ base::string16 SaveCardBubbleControllerImpl::GetWindowTitle() const { if (is_uploading_) { - if (show_upload_confirm_title_) { + if (is_currently_requesting_cvc_) { return l10n_util::GetStringUTF16( IDS_AUTOFILL_SAVE_CARD_PROMPT_ENTER_CVC_TITLE); } @@ -195,6 +194,13 @@ AutofillMetrics::SAVE_CARD_PROMPT_END_ACCEPTED, is_uploading_, is_reshow_, pref_service_->GetInteger( prefs::kAutofillAcceptSaveCreditCardPromptState)); + if (is_currently_requesting_cvc_) { + AutofillMetrics::LogSaveCardPromptMetric( + AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_ACCEPTED, + is_uploading_, is_reshow_, + pref_service_->GetInteger( + prefs::kAutofillAcceptSaveCreditCardPromptState)); + } pref_service_->SetInteger( prefs::kAutofillAcceptSaveCreditCardPromptState, prefs::PREVIOUS_SAVE_CREDIT_CARD_PROMPT_USER_DECISION_ACCEPTED); @@ -227,12 +233,19 @@ is_uploading_, is_reshow_, pref_service_->GetInteger( prefs::kAutofillAcceptSaveCreditCardPromptState)); + if (is_currently_requesting_cvc_) { + AutofillMetrics::LogSaveCardPromptMetric( + AutofillMetrics:: + SAVE_CARD_PROMPT_CVC_FIX_FLOW_DISMISS_CLICK_LEGAL_MESSAGE, + is_uploading_, is_reshow_, + pref_service_->GetInteger( + prefs::kAutofillAcceptSaveCreditCardPromptState)); + } } void SaveCardBubbleControllerImpl::OnBubbleClosed() { save_card_bubble_view_ = nullptr; UpdateIcon(); - show_upload_confirm_title_ = false; } const LegalMessageLines& SaveCardBubbleControllerImpl::GetLegalMessageLines() @@ -240,9 +253,13 @@ return legal_message_lines_; } -void SaveCardBubbleControllerImpl::SetShowUploadConfirmTitle( - bool show_upload_confirm_title) { - show_upload_confirm_title_ = show_upload_confirm_title; +void SaveCardBubbleControllerImpl::ContinueToRequestCvcStage() { + is_currently_requesting_cvc_ = true; + AutofillMetrics::LogSaveCardPromptMetric( + AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_SHOWN, is_uploading_, + is_reshow_, + pref_service_->GetInteger( + prefs::kAutofillAcceptSaveCreditCardPromptState)); } bool SaveCardBubbleControllerImpl::InputCvcIsValid( @@ -285,6 +302,13 @@ is_reshow_, pref_service_->GetInteger( prefs::kAutofillAcceptSaveCreditCardPromptState)); + if (is_currently_requesting_cvc_) { + AutofillMetrics::LogSaveCardPromptMetric( + AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_SHOWING, + is_uploading_, is_reshow_, + pref_service_->GetInteger( + prefs::kAutofillAcceptSaveCreditCardPromptState)); + } } else { UpdateIcon(); @@ -293,6 +317,13 @@ is_reshow_, pref_service_->GetInteger( prefs::kAutofillAcceptSaveCreditCardPromptState)); + if (is_currently_requesting_cvc_) { + AutofillMetrics::LogSaveCardPromptMetric( + AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_HIDDEN, + is_uploading_, is_reshow_, + pref_service_->GetInteger( + prefs::kAutofillAcceptSaveCreditCardPromptState)); + } } } @@ -300,6 +331,8 @@ DCHECK(!save_card_callback_.is_null()); DCHECK(!save_card_bubble_view_); + is_currently_requesting_cvc_ = false; + // Need to create location bar icon before bubble, otherwise bubble will be // unanchored. UpdateIcon();
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 248284d4..86da7a7 100644 --- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h
@@ -66,7 +66,7 @@ void OnBubbleClosed() override; const LegalMessageLines& GetLegalMessageLines() const override; - void SetShowUploadConfirmTitle(bool show_upload_confirm_title) override; + void ContinueToRequestCvcStage() override; // Used to check if an entered CVC value is a valid CVC for the current card. // Valid CVCs are a certain length for their card type (4 for AMEX, 3 @@ -117,9 +117,9 @@ // The value of the CVC entered by the user (if it was requested). base::string16 cvc_entered_by_user_; - // Whether the normal "Save this card?" title or the secondary - // "Confirm [card]" title should be shown during upload save. - bool show_upload_confirm_title_ = false; + // When true, the upload save version of the UI is currently in its second + // stage, which asks the user for CVC in order to save. + bool is_currently_requesting_cvc_ = false; // Contains the details of the card that will be saved if the user accepts. CreditCard card_;
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 3654d98..cf033f2 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
@@ -617,6 +617,217 @@ 1))); } +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_FirstShow_CvcFixFlow_Shown) { + base::HistogramTester histogram_tester; + ShowUploadBubble(); + controller()->ContinueToRequestCvcStage(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.FirstShow"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1), + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1), + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_SHOWN, 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_Reshows_CvcFixFlow_Shown) { + base::HistogramTester histogram_tester; + ShowUploadBubble(); + CloseAndReshowBubble(); + controller()->ContinueToRequestCvcStage(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.Reshows"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1), + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1), + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_SHOWN, 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_FirstShow_CvcFixFlow_SaveButton) { + ShowUploadBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + controller()->OnSaveButton(); + controller()->OnBubbleClosed(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.FirstShow"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_ACCEPTED, 1), + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_ACCEPTED, + 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_Reshows_CvcFixFlow_SaveButton) { + ShowUploadBubble(); + CloseAndReshowBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + controller()->OnSaveButton(); + controller()->OnBubbleClosed(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.Reshows"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_ACCEPTED, 1), + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_ACCEPTED, + 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_FirstShow_CvcFixFlow_NavigateWhileShowing) { + ShowUploadBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + // The bubble should still stick around for up to kSurviveNavigationSeconds + // (5) seconds regardless of navigation. + controller()->set_elapsed(base::TimeDelta::FromSeconds(3)); + + controller()->SimulateNavigation(); + + histogram_tester.ExpectTotalCount( + "Autofill.SaveCreditCardPrompt.Upload.FirstShow", 0); + + // Wait 3 more seconds (6 total); bubble should go away on next navigation. + controller()->set_elapsed(base::TimeDelta::FromSeconds(6)); + + controller()->SimulateNavigation(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.FirstShow"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_SHOWING, 1), + Bucket(AutofillMetrics:: + SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_SHOWING, + 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_Reshows_CvcFixFlow_NavigateWhileShowing) { + ShowUploadBubble(); + CloseAndReshowBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + // The bubble should still stick around for up to kSurviveNavigationSeconds + // (5) seconds regardless of navigation. + controller()->set_elapsed(base::TimeDelta::FromSeconds(3)); + + controller()->SimulateNavigation(); + + histogram_tester.ExpectTotalCount( + "Autofill.SaveCreditCardPrompt.Upload.Reshows", 0); + + // Wait 3 more seconds (6 total); bubble should go away on next navigation. + controller()->set_elapsed(base::TimeDelta::FromSeconds(6)); + + controller()->SimulateNavigation(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.Reshows"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_SHOWING, 1), + Bucket(AutofillMetrics:: + SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_SHOWING, + 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_FirstShow_CvcFixFlow_NavigateWhileHidden) { + ShowUploadBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + controller()->OnBubbleClosed(); + // Fake-navigate after bubble has been visible for a long time. + controller()->set_elapsed(base::TimeDelta::FromMinutes(1)); + controller()->SimulateNavigation(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.FirstShow"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_HIDDEN, 1), + Bucket(AutofillMetrics:: + SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_HIDDEN, + 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_Reshows_CvcFixFlow_NavigateWhileHidden) { + ShowUploadBubble(); + CloseAndReshowBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + controller()->OnBubbleClosed(); + // Fake-navigate after bubble has been visible for a long time. + controller()->set_elapsed(base::TimeDelta::FromMinutes(1)); + controller()->SimulateNavigation(); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.Reshows"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_NAVIGATION_HIDDEN, 1), + Bucket(AutofillMetrics:: + SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_HIDDEN, + 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_FirstShow_CvcFixFlow_LegalMessageLink) { + ShowUploadBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + controller()->OnLegalMessageLinkClicked(GURL("http://www.example.com")); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.FirstShow"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_DISMISS_CLICK_LEGAL_MESSAGE, + 1), + Bucket(AutofillMetrics:: + SAVE_CARD_PROMPT_CVC_FIX_FLOW_DISMISS_CLICK_LEGAL_MESSAGE, + 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_Reshows_CvcFixFlow_LegalMessageLink) { + ShowUploadBubble(); + CloseAndReshowBubble(); + controller()->ContinueToRequestCvcStage(); + + base::HistogramTester histogram_tester; + controller()->OnLegalMessageLinkClicked(GURL("http://www.example.com")); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "Autofill.SaveCreditCardPrompt.Upload.Reshows"), + ElementsAre( + Bucket(AutofillMetrics::SAVE_CARD_PROMPT_DISMISS_CLICK_LEGAL_MESSAGE, + 1), + Bucket(AutofillMetrics:: + SAVE_CARD_PROMPT_CVC_FIX_FLOW_DISMISS_CLICK_LEGAL_MESSAGE, + 1))); +} + TEST_F(SaveCardBubbleControllerImplTest, OnlyOneActiveBubble_RepeatedLocal) { base::HistogramTester histogram_tester; ShowLocalBubble();
diff --git a/chrome/browser/ui/browser_instant_controller.cc b/chrome/browser/ui/browser_instant_controller.cc index 73c8bfb..c1a543a 100644 --- a/chrome/browser/ui/browser_instant_controller.cc +++ b/chrome/browser/ui/browser_instant_controller.cc
@@ -147,9 +147,9 @@ prerenderer->Cancel(); } -void BrowserInstantController::ModelChanged(const SearchMode& old_mode, - const SearchMode& new_mode) { - instant_.SearchModeChanged(old_mode, new_mode); +void BrowserInstantController::ModelChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) { + instant_.SearchModeChanged(old_origin, new_origin); } void BrowserInstantController::DefaultSearchProviderChanged( @@ -174,7 +174,8 @@ continue; SearchModel* model = SearchTabHelper::FromWebContents(contents)->model(); - if (google_base_url_domain_changed && model->mode().is_origin_ntp()) { + if (google_base_url_domain_changed && + model->origin() == SearchModel::Origin::NTP) { GURL local_ntp_url(chrome::kChromeSearchLocalNtpUrl); // Replace the server NTP with the local NTP. content::NavigationController::LoadURLParams params(local_ntp_url);
diff --git a/chrome/browser/ui/browser_instant_controller.h b/chrome/browser/ui/browser_instant_controller.h index 3f9ba5f..52e0169 100644 --- a/chrome/browser/ui/browser_instant_controller.h +++ b/chrome/browser/ui/browser_instant_controller.h
@@ -43,8 +43,8 @@ private: // SearchModelObserver: - void ModelChanged(const SearchMode& old_mode, - const SearchMode& new_mode) override; + void ModelChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) override; // InstantServiceObserver: void DefaultSearchProviderChanged(
diff --git a/chrome/browser/ui/cocoa/autofill/save_card_bubble_view_unittest.mm b/chrome/browser/ui/cocoa/autofill/save_card_bubble_view_unittest.mm index a78b37c..f2c956c 100644 --- a/chrome/browser/ui/cocoa/autofill/save_card_bubble_view_unittest.mm +++ b/chrome/browser/ui/cocoa/autofill/save_card_bubble_view_unittest.mm
@@ -56,7 +56,7 @@ return lines_; } - MOCK_METHOD1(SetShowUploadConfirmTitle, void(bool show_upload_confirm_title)); + MOCK_METHOD0(ContinueToRequestCvcStage, void()); MOCK_CONST_METHOD1(InputCvcIsValid, bool(const base::string16& input_text)); // Testing state.
diff --git a/chrome/browser/ui/cocoa/bubble_anchor_helper_views.mm b/chrome/browser/ui/cocoa/bubble_anchor_helper_views.mm index b071a9f..e08d57f6 100644 --- a/chrome/browser/ui/cocoa/bubble_anchor_helper_views.mm +++ b/chrome/browser/ui/cocoa/bubble_anchor_helper_views.mm
@@ -22,7 +22,7 @@ // Self-deleting object that hosts Objective-C observers watching for parent // window resizes to reposition a bubble Widget. Deletes itself when the bubble // Widget closes. -class BubbleAnchorHelper : public views::WidgetObserver { +class BubbleAnchorHelper final : public views::WidgetObserver { public: BubbleAnchorHelper(views::BubbleDialogDelegateView* bubble, LocationBarDecoration* decoration,
diff --git a/chrome/browser/ui/cocoa/bubble_anchor_helper_views_unittest.mm b/chrome/browser/ui/cocoa/bubble_anchor_helper_views_unittest.mm index 1edb18c..5c31b8d7 100644 --- a/chrome/browser/ui/cocoa/bubble_anchor_helper_views_unittest.mm +++ b/chrome/browser/ui/cocoa/bubble_anchor_helper_views_unittest.mm
@@ -18,7 +18,8 @@ constexpr int kHorizOffset = 210; constexpr int kVertOffset = 320; -class TestBubbleDialogDelegateView : public views::BubbleDialogDelegateView { +class TestBubbleDialogDelegateView final + : public views::BubbleDialogDelegateView { public: explicit TestBubbleDialogDelegateView(views::BubbleBorder::Arrow arrow) : BubbleDialogDelegateView(nullptr, arrow) {
diff --git a/chrome/browser/ui/cocoa/certificate_viewer_mac_cocoa.mm b/chrome/browser/ui/cocoa/certificate_viewer_mac_cocoa.mm index 9fbc903..7434636 100644 --- a/chrome/browser/ui/cocoa/certificate_viewer_mac_cocoa.mm +++ b/chrome/browser/ui/cocoa/certificate_viewer_mac_cocoa.mm
@@ -18,7 +18,8 @@ namespace { -class SSLCertificateViewerCocoaBridge : public ConstrainedWindowMacDelegate { +class SSLCertificateViewerCocoaBridge final + : public ConstrainedWindowMacDelegate { public: explicit SSLCertificateViewerCocoaBridge( SSLCertificateViewerCocoa* controller)
diff --git a/chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.mm b/chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.mm index cea789c..ee582f8 100644 --- a/chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.mm +++ b/chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.mm
@@ -367,7 +367,8 @@ - (void)setFocusAndSelection { [[findText_ window] makeFirstResponder:findText_]; - BOOL buttonsEnabled = ([self lastNumberOfMatchesForActiveWebContents] != 0); + BOOL buttonsEnabled = [self lastNumberOfMatchesForActiveWebContents] != 0 && + [[findText_ stringValue] length] > 0; [previousButton_ setEnabled:buttonsEnabled]; [nextButton_ setEnabled:buttonsEnabled];
diff --git a/chrome/browser/ui/cocoa/fullscreen_low_power_coordinator.h b/chrome/browser/ui/cocoa/fullscreen_low_power_coordinator.h index 381408c3..34e9553b 100644 --- a/chrome/browser/ui/cocoa/fullscreen_low_power_coordinator.h +++ b/chrome/browser/ui/cocoa/fullscreen_low_power_coordinator.h
@@ -20,7 +20,7 @@ // or not the current web content can be displayed in fullscreen low power mode, // and the BrowserWindowController, which tells this whether or not there is any // UI that the fullscreen low power window would cover. -class FullscreenLowPowerCoordinatorCocoa +class FullscreenLowPowerCoordinatorCocoa final : public ui::FullscreenLowPowerCoordinator { public: FullscreenLowPowerCoordinatorCocoa(NSWindow* content_window,
diff --git a/chrome/browser/ui/cocoa/passwords/password_item_views.h b/chrome/browser/ui/cocoa/passwords/password_item_views.h index 82b8f43..6512e03 100644 --- a/chrome/browser/ui/cocoa/passwords/password_item_views.h +++ b/chrome/browser/ui/cocoa/passwords/password_item_views.h
@@ -70,6 +70,7 @@ base::scoped_nsobject<NSTextField> usernameField_; // The field contains the password or IDP origin for federated credentials. base::scoped_nsobject<NSTextField> passwordField_; + base::scoped_nsobject<HoverImageButton> passwordViewButton_; } @property(readonly, nonatomic) NSTextField* usernameField;
diff --git a/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm b/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm index 628ac6c..7b44f7f8 100644 --- a/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm +++ b/chrome/browser/ui/cocoa/passwords/passwords_list_view_controller.mm
@@ -17,6 +17,8 @@ #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" #include "chrome/grit/generated_resources.h" +#include "chrome/grit/theme_resources.h" +#include "components/password_manager/core/common/password_manager_features.h" #include "skia/ext/skia_utils_mac.h" #import "ui/base/cocoa/controls/hyperlink_button_cell.h" #import "ui/base/cocoa/hover_image_button.h" @@ -235,6 +237,27 @@ passwordField_.reset([FederationLabel(text) retain]); } [self addSubview:passwordField_]; + // Add eye icon if password selection experiment is on. + if (base::FeatureList::IsEnabled( + password_manager::features::kEnablePasswordSelection)) { + passwordViewButton_.reset( + [[HoverImageButton alloc] initWithFrame:NSZeroRect]); + [passwordViewButton_ setBordered:NO]; + [[passwordViewButton_ cell] setHighlightsBy:NSNoCellMask]; + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); + gfx::Image image = bundle.GetImageNamed(IDR_SHOW_PASSWORD); + [passwordViewButton_ + setFrameSize:NSMakeSize(image.Width(), image.Height())]; + [passwordViewButton_ setDefaultImage:image.ToNSImage()]; + [passwordViewButton_ + setHoverImage:bundle.GetImageNamed(IDR_SHOW_PASSWORD_HOVER) + .ToNSImage()]; + NSString* passwordViewTitle = + l10n_util::GetNSString(IDS_MANAGE_PASSWORDS_SHOW_PASSWORD); + [passwordViewButton_ setAccessibilityTitle:passwordViewTitle]; + [passwordViewButton_ setToolTip:passwordViewTitle]; + [self addSubview:passwordViewButton_]; + } } return self; } @@ -243,8 +266,16 @@ - (void)layoutWithFirstColumn:(CGFloat)firstWidth secondColumn:(CGFloat)secondWidth { - std::pair<CGFloat, CGFloat> sizes = GetResizedColumns( - kDesiredRowWidth, std::make_pair(firstWidth, secondWidth)); + std::pair<CGFloat, CGFloat> sizes; + if (passwordViewButton_) { + sizes = GetResizedColumns(kDesiredRowWidth - + NSWidth([passwordViewButton_ frame]) - + kRelatedControlVerticalSpacing, + std::make_pair(firstWidth, secondWidth)); + } else { + sizes = GetResizedColumns(kDesiredRowWidth, + std::make_pair(firstWidth, secondWidth)); + } [usernameField_ setFrameSize:NSMakeSize(sizes.first, NSHeight([usernameField_ frame]))]; [passwordField_ @@ -255,10 +286,20 @@ // Move to the right of the username and add the password. curX = NSMaxX([usernameField_ frame]) + kItemLabelSpacing; [passwordField_ setFrameOrigin:NSMakePoint(curX, curY)]; - // Move to the top-right of the password. - curX = NSMaxX([passwordField_ frame]); + if (passwordViewButton_) { + // The eye icon should be right-aligned. + curX = kDesiredRowWidth - NSWidth([passwordViewButton_ frame]); + curY += (NSHeight([usernameField_ frame]) - + NSHeight([passwordViewButton_ frame])) / + 2; + [passwordViewButton_ setFrameOrigin:NSMakePoint(curX, curY)]; + // Move to the right of the eye-icon. + curX = NSMaxX([passwordViewButton_ frame]); + } else { + // Move to the right of the password. + curX = NSMaxX([passwordField_ frame]); + } curY = NSMaxY([passwordField_ frame]) + kRelatedControlVerticalSpacing; - // Update the frame. [self setFrameSize:NSMakeSize(curX, curY)]; }
diff --git a/chrome/browser/ui/search/instant_controller.cc b/chrome/browser/ui/search/instant_controller.cc index 46a6ced1..0fd79bc5 100644 --- a/chrome/browser/ui/search/instant_controller.cc +++ b/chrome/browser/ui/search/instant_controller.cc
@@ -17,16 +17,16 @@ #include "url/gurl.h" InstantController::InstantController(BrowserInstantController* browser) - : browser_(browser) {} + : browser_(browser), search_origin_(SearchModel::Origin::DEFAULT) {} InstantController::~InstantController() = default; -void InstantController::SearchModeChanged(const SearchMode& old_mode, - const SearchMode& new_mode) { - LogDebugEvent(base::StringPrintf("SearchModeChanged: %d to %d", - old_mode.origin, new_mode.origin)); +void InstantController::SearchModeChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) { + LogDebugEvent(base::StringPrintf("SearchModeChanged: %d to %d", old_origin, + new_origin)); - search_mode_ = new_mode; + search_origin_ = new_origin; ResetInstantTab(); } @@ -65,7 +65,7 @@ } void InstantController::ResetInstantTab() { - if (search_mode_.is_origin_ntp()) { + if (search_origin_ == SearchModel::Origin::NTP) { content::WebContents* active_tab = browser_->GetActiveWebContents(); if (!instant_tab_ || active_tab != instant_tab_->web_contents()) { instant_tab_ = base::MakeUnique<InstantTab>(this, active_tab);
diff --git a/chrome/browser/ui/search/instant_controller.h b/chrome/browser/ui/search/instant_controller.h index b5edc38..e7c97f9d 100644 --- a/chrome/browser/ui/search/instant_controller.h +++ b/chrome/browser/ui/search/instant_controller.h
@@ -15,7 +15,7 @@ #include "base/gtest_prod_util.h" #include "base/macros.h" #include "chrome/browser/ui/search/instant_tab.h" -#include "chrome/common/search/search_types.h" +#include "chrome/browser/ui/search/search_model.h" class BrowserInstantController; @@ -36,8 +36,8 @@ // The search mode in the active tab has changed. Bind |instant_tab_| if the // |new_mode| reflects an Instant NTP. - void SearchModeChanged(const SearchMode& old_mode, - const SearchMode& new_mode); + void SearchModeChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin); // The user switched tabs. Bind |instant_tab_| if the newly active tab is an // Instant NTP. @@ -82,7 +82,7 @@ std::unique_ptr<InstantTab> instant_tab_; // The search model mode for the active tab. - SearchMode search_mode_; + SearchModel::Origin search_origin_; // List of events and their timestamps, useful in debugging Instant behaviour. mutable std::list<std::pair<int64_t, std::string>> debug_events_;
diff --git a/chrome/browser/ui/search/local_ntp_browsertest.cc b/chrome/browser/ui/search/local_ntp_browsertest.cc index 40d4463..1fc8d2d 100644 --- a/chrome/browser/ui/search/local_ntp_browsertest.cc +++ b/chrome/browser/ui/search/local_ntp_browsertest.cc
@@ -121,10 +121,14 @@ EXPECT_TRUE(result); // Navigate somewhere else in the same tab. + content::TestNavigationObserver elsewhere_observer(active_tab); ui_test_utils::NavigateToURLWithDisposition( browser(), other_url, WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + elsewhere_observer.Wait(); + ASSERT_TRUE(elsewhere_observer.last_navigation_succeeded()); ASSERT_FALSE(search::IsInstantNTP(active_tab)); + // Now the embeddedSearch API should have gone away. ASSERT_TRUE(instant_test_utils::GetBoolFromJS( active_tab, "!!window.chrome.embeddedSearch", &result)); @@ -279,24 +283,33 @@ EXPECT_EQ("rtl", dir); } -// A test class that sets up local_ntp_browsertest.html as the NTP URL. It's -// mostly a copy of the real local_ntp.html, but it adds some testing JS. -class LocalNTPJavascriptTest : public LocalNTPTest { +// A test class that sets up a local HTML file as the NTP URL. +class CustomNTPUrlTest : public LocalNTPTest { public: - LocalNTPJavascriptTest() - : https_test_server_(net::EmbeddedTestServer::TYPE_HTTPS) { - https_test_server_.ServeFilesFromSourceDirectory("chrome/test/data"); + explicit CustomNTPUrlTest(const std::string& ntp_file_path) + : https_test_server_(net::EmbeddedTestServer::TYPE_HTTPS), + ntp_file_path_(ntp_file_path) { + https_test_server_.ServeFilesFromSourceDirectory( + "chrome/test/data/local_ntp"); } private: void SetUpOnMainThread() override { ASSERT_TRUE(https_test_server_.Start()); - GURL ntp_url = https_test_server_.GetURL("/local_ntp_browsertest.html"); + GURL ntp_url = https_test_server_.GetURL(ntp_file_path_); SetUserSelectedDefaultSearchProvider(https_test_server_.base_url().spec(), ntp_url.spec()); } net::EmbeddedTestServer https_test_server_; + const std::string ntp_file_path_; +}; + +// A test class that sets up local_ntp_browsertest.html as the NTP URL. It's +// mostly a copy of the real local_ntp.html, but it adds some testing JS. +class LocalNTPJavascriptTest : public CustomNTPUrlTest { + public: + LocalNTPJavascriptTest() : CustomNTPUrlTest("/local_ntp_browsertest.html") {} }; // This runs a bunch of pure JS-side tests, i.e. those that don't require any @@ -312,9 +325,28 @@ OpenNewTab(browser(), GURL(chrome::kChromeUINewTabURL)); ASSERT_TRUE(search::IsInstantNTP(active_tab)); + // Run the tests. bool success = false; ASSERT_TRUE(instant_test_utils::GetBoolFromJS( - active_tab, "!!runSimpleTests()", &success)); + active_tab, "!!runSimpleTests('localNtp')", &success)); + EXPECT_TRUE(success); +} + +// A test class that sets up voice_browsertest.html as the NTP URL. It's +// mostly a copy of the real local_ntp.html, but it adds some testing JS. +class LocalNTPVoiceJavascriptTest : public CustomNTPUrlTest { + public: + LocalNTPVoiceJavascriptTest() : CustomNTPUrlTest("/voice_browsertest.html") {} +}; + +IN_PROC_BROWSER_TEST_F(LocalNTPVoiceJavascriptTest, MicrophoneTests) { + content::WebContents* active_tab = + OpenNewTab(browser(), GURL(chrome::kChromeUINewTabURL)); + + // Run the tests. + bool success = false; + ASSERT_TRUE(instant_test_utils::GetBoolFromJS( + active_tab, "!!runSimpleTests('microphone')", &success)); EXPECT_TRUE(success); }
diff --git a/chrome/browser/ui/search/local_ntp_uitest.cc b/chrome/browser/ui/search/local_ntp_uitest.cc index fa1a2a6f..b3d3387b 100644 --- a/chrome/browser/ui/search/local_ntp_uitest.cc +++ b/chrome/browser/ui/search/local_ntp_uitest.cc
@@ -32,8 +32,8 @@ ASSERT_TRUE(https_test_server().Start()); GURL instant_url = https_test_server().GetURL("/instant_extended.html?strk=1&"); - GURL ntp_url = - https_test_server().GetURL("/local_ntp_browsertest.html?strk=1&"); + GURL ntp_url = https_test_server().GetURL( + "/local_ntp/local_ntp_browsertest.html?strk=1&"); InstantTestBase::Init(instant_url, ntp_url, false); } };
diff --git a/chrome/browser/ui/search/search_delegate.cc b/chrome/browser/ui/search/search_delegate.cc index d9f4310..e71f803b 100644 --- a/chrome/browser/ui/search/search_delegate.cc +++ b/chrome/browser/ui/search/search_delegate.cc
@@ -14,16 +14,16 @@ DCHECK(!tab_model_) << "All tabs should have been deactivated or closed."; } -void SearchDelegate::ModelChanged(const SearchMode& old_mode, - const SearchMode& new_mode) { - browser_model_->SetMode(new_mode); +void SearchDelegate::ModelChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) { + browser_model_->SetOrigin(new_origin); } void SearchDelegate::OnTabActivated(content::WebContents* web_contents) { if (tab_model_) tab_model_->RemoveObserver(this); tab_model_ = SearchTabHelper::FromWebContents(web_contents)->model(); - browser_model_->SetMode(tab_model_->mode()); + browser_model_->SetOrigin(tab_model_->origin()); tab_model_->AddObserver(this); }
diff --git a/chrome/browser/ui/search/search_delegate.h b/chrome/browser/ui/search/search_delegate.h index 752c301..c1f41382 100644 --- a/chrome/browser/ui/search/search_delegate.h +++ b/chrome/browser/ui/search/search_delegate.h
@@ -27,8 +27,8 @@ ~SearchDelegate() override; // Overrides for SearchModelObserver: - void ModelChanged(const SearchMode& old_mode, - const SearchMode& new_mode) override; + void ModelChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) override; // When the active tab is changed, the model state of this new active tab is // propagated to the browser.
diff --git a/chrome/browser/ui/search/search_delegate_unittest.cc b/chrome/browser/ui/search/search_delegate_unittest.cc index 0db0e78..1e6a22b 100644 --- a/chrome/browser/ui/search/search_delegate_unittest.cc +++ b/chrome/browser/ui/search/search_delegate_unittest.cc
@@ -14,15 +14,15 @@ // the browser's search model. TEST_F(SearchDelegateTest, SearchModel) { // Initial state. - EXPECT_TRUE(browser()->search_model()->mode().is_origin_default()); + EXPECT_EQ(SearchModel::Origin::DEFAULT, browser()->search_model()->origin()); // Propagate change from tab's search model to browser's search model. AddTab(browser(), GURL("http://foo/0")); content::WebContents* first_tab = browser()->tab_strip_model()->GetWebContentsAt(0); - SearchTabHelper::FromWebContents(first_tab)->model()->SetMode( - SearchMode(SearchMode::ORIGIN_NTP)); - EXPECT_TRUE(browser()->search_model()->mode().is_origin_ntp()); + SearchTabHelper::FromWebContents(first_tab)->model()->SetOrigin( + SearchModel::Origin::NTP); + EXPECT_EQ(SearchModel::Origin::NTP, browser()->search_model()->origin()); // Add second tab (it gets inserted at index 0), make it active, and make sure // its mode changes propagate to the browser's search model. @@ -31,14 +31,14 @@ browser()->tab_strip_model()->GetWebContentsAt(0); ASSERT_NE(first_tab, second_tab); browser()->tab_strip_model()->ActivateTabAt(0, true); - EXPECT_TRUE(browser()->search_model()->mode().is_origin_default()); + EXPECT_EQ(SearchModel::Origin::DEFAULT, browser()->search_model()->origin()); SearchTabHelper::FromWebContents(second_tab) ->model() - ->SetMode(SearchMode(SearchMode::ORIGIN_NTP)); - EXPECT_TRUE(browser()->search_model()->mode().is_origin_ntp()); + ->SetOrigin(SearchModel::Origin::NTP); + EXPECT_EQ(SearchModel::Origin::NTP, browser()->search_model()->origin()); // The first tab is not active so changes should not propagate. - SearchTabHelper::FromWebContents(first_tab)->model()->SetMode( - SearchMode(SearchMode::ORIGIN_DEFAULT)); - EXPECT_TRUE(browser()->search_model()->mode().is_origin_ntp()); + SearchTabHelper::FromWebContents(first_tab)->model()->SetOrigin( + SearchModel::Origin::DEFAULT); + EXPECT_EQ(SearchModel::Origin::NTP, browser()->search_model()->origin()); }
diff --git a/chrome/browser/ui/search/search_model.cc b/chrome/browser/ui/search/search_model.cc index 2e1498f..aa51e105 100644 --- a/chrome/browser/ui/search/search_model.cc +++ b/chrome/browser/ui/search/search_model.cc
@@ -7,23 +7,23 @@ #include "chrome/browser/ui/search/search_model_observer.h" #include "components/search/search.h" -SearchModel::SearchModel() = default; +SearchModel::SearchModel() : origin_(Origin::DEFAULT) {} SearchModel::~SearchModel() = default; -void SearchModel::SetMode(const SearchMode& new_mode) { +void SearchModel::SetOrigin(Origin origin) { DCHECK(search::IsInstantExtendedAPIEnabled()) << "Please do not try to set the SearchModel mode without first " << "checking if Search is enabled."; - if (mode_ == new_mode) + if (origin_ == origin) return; - const SearchMode old_mode = mode_; - mode_ = new_mode; + const Origin old_origin = origin_; + origin_ = origin; for (SearchModelObserver& observer : observers_) - observer.ModelChanged(old_mode, mode_); + observer.ModelChanged(old_origin, origin_); } void SearchModel::AddObserver(SearchModelObserver* observer) {
diff --git a/chrome/browser/ui/search/search_model.h b/chrome/browser/ui/search/search_model.h index 1be3ad3..1196bda 100644 --- a/chrome/browser/ui/search/search_model.h +++ b/chrome/browser/ui/search/search_model.h
@@ -7,7 +7,6 @@ #include "base/macros.h" #include "base/observer_list.h" -#include "chrome/common/search/search_types.h" class SearchModelObserver; @@ -15,24 +14,30 @@ // changes. class SearchModel { public: + enum class Origin { + // The user is on some page other than the NTP. + DEFAULT = 0, + + // The user is on the NTP. + NTP, + }; + SearchModel(); ~SearchModel(); - // Change the mode. Change notifications are sent to observers. - void SetMode(const SearchMode& mode); + // Change the origin. Change notifications are sent to observers. + void SetOrigin(Origin origin); - // Get the active mode. - const SearchMode& mode() const { return mode_; } + // Get the active origin. + Origin origin() const { return origin_; } // Add and remove observers. void AddObserver(SearchModelObserver* observer); void RemoveObserver(SearchModelObserver* observer); private: - // Current state of model. - SearchMode mode_; + Origin origin_; - // Observers. base::ObserverList<SearchModelObserver> observers_; DISALLOW_COPY_AND_ASSIGN(SearchModel);
diff --git a/chrome/browser/ui/search/search_model_observer.h b/chrome/browser/ui/search/search_model_observer.h index 4303f26..371aa00 100644 --- a/chrome/browser/ui/search/search_model_observer.h +++ b/chrome/browser/ui/search/search_model_observer.h
@@ -11,8 +11,8 @@ class SearchModelObserver { public: // Informs the observer that the model's state has changed. - virtual void ModelChanged(const SearchMode& old_mode, - const SearchMode& new_mode) = 0; + virtual void ModelChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) = 0; protected: virtual ~SearchModelObserver() {}
diff --git a/chrome/browser/ui/search/search_model_unittest.cc b/chrome/browser/ui/search/search_model_unittest.cc index 35cabe0..dbf6e8e 100644 --- a/chrome/browser/ui/search/search_model_unittest.cc +++ b/chrome/browser/ui/search/search_model_unittest.cc
@@ -8,8 +8,6 @@ #include "base/macros.h" #include "chrome/browser/ui/search/search_model_observer.h" #include "chrome/browser/ui/search/search_tab_helper.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/search/search_types.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" namespace { @@ -19,11 +17,11 @@ MockSearchModelObserver(); ~MockSearchModelObserver() override; - void ModelChanged(const SearchMode& old_mode, - const SearchMode& new_mode) override; + void ModelChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) override; - void VerifySearchModelStates(const SearchMode& expected_old_mode, - const SearchMode& expected_new_mode); + void VerifySearchModelStates(SearchModel::Origin expected_old_origin, + SearchModel::Origin expected_new_origin); void VerifyNotificationCount(int expected_count); @@ -31,8 +29,8 @@ // How many times we've seen search model changed notifications. int modelchanged_notification_count_; - SearchMode actual_old_mode_; - SearchMode actual_new_mode_; + SearchModel::Origin actual_old_origin_; + SearchModel::Origin actual_new_origin_; DISALLOW_COPY_AND_ASSIGN(MockSearchModelObserver); }; @@ -44,18 +42,18 @@ MockSearchModelObserver::~MockSearchModelObserver() { } -void MockSearchModelObserver::ModelChanged(const SearchMode& old_mode, - const SearchMode& new_mode) { - actual_old_mode_ = old_mode; - actual_new_mode_ = new_mode; +void MockSearchModelObserver::ModelChanged(SearchModel::Origin old_origin, + SearchModel::Origin new_origin) { + actual_old_origin_ = old_origin; + actual_new_origin_ = new_origin; modelchanged_notification_count_++; } void MockSearchModelObserver::VerifySearchModelStates( - const SearchMode& expected_old_mode, - const SearchMode& expected_new_mode) { - EXPECT_TRUE(actual_old_mode_ == expected_old_mode); - EXPECT_TRUE(actual_new_mode_ == expected_new_mode); + SearchModel::Origin expected_old_origin, + SearchModel::Origin expected_new_origin) { + EXPECT_TRUE(actual_old_origin_ == expected_old_origin); + EXPECT_TRUE(actual_new_origin_ == expected_new_origin); } void MockSearchModelObserver::VerifyNotificationCount(int expected_count) { @@ -90,18 +88,20 @@ TEST_F(SearchModelTest, UpdateSearchModelOrigin) { mock_observer.VerifyNotificationCount(0); - SearchMode search_mode(SearchMode::ORIGIN_NTP); - SearchMode expected_old_mode = model->mode(); - SearchMode expected_new_mode = search_mode; - model->SetMode(search_mode); - mock_observer.VerifySearchModelStates(expected_old_mode, expected_new_mode); + SearchModel::Origin origin = SearchModel::Origin::NTP; + SearchModel::Origin expected_old_origin = model->origin(); + SearchModel::Origin expected_new_origin = origin; + model->SetOrigin(origin); + mock_observer.VerifySearchModelStates(expected_old_origin, + expected_new_origin); mock_observer.VerifyNotificationCount(1); - search_mode.origin = SearchMode::ORIGIN_DEFAULT; - expected_old_mode = expected_new_mode; - expected_new_mode = search_mode; - model->SetMode(search_mode); - mock_observer.VerifySearchModelStates(expected_old_mode, expected_new_mode); + origin = SearchModel::Origin::DEFAULT; + expected_old_origin = expected_new_origin; + expected_new_origin = origin; + model->SetOrigin(origin); + mock_observer.VerifySearchModelStates(expected_old_origin, + expected_new_origin); mock_observer.VerifyNotificationCount(2); - EXPECT_TRUE(model->mode() == expected_new_mode); + EXPECT_EQ(expected_new_origin, model->origin()); }
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc index 5d5ed8f..cb64c5c1 100644 --- a/chrome/browser/ui/search/search_tab_helper.cc +++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -435,11 +435,12 @@ } void SearchTabHelper::UpdateMode() { - SearchMode::Origin origin = IsNTP(web_contents_) ? SearchMode::ORIGIN_NTP - : SearchMode::ORIGIN_DEFAULT; - model_.SetMode(SearchMode(origin)); + bool is_ntp = IsNTP(web_contents_); - if (model_.mode().is_origin_ntp()) + model_.SetOrigin(is_ntp ? SearchModel::Origin::NTP + : SearchModel::Origin::DEFAULT); + + if (is_ntp) ipc_router_.SetInputInProgress(IsInputInProgress()); }
diff --git a/chrome/browser/ui/toolbar/toolbar_model_unittest.cc b/chrome/browser/ui/toolbar/toolbar_model_unittest.cc index 029d968..bbbae8e 100644 --- a/chrome/browser/ui/toolbar/toolbar_model_unittest.cc +++ b/chrome/browser/ui/toolbar/toolbar_model_unittest.cc
@@ -22,7 +22,8 @@ #include "ui/gfx/text_elider.h" #if BUILDFLAG(ENABLE_EXTENSIONS) -#include "extensions/browser/extension_registry.h" +#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/test_extension_system.h" #include "extensions/common/extension_builder.h" #endif @@ -101,10 +102,16 @@ // Install a fake extension so that the ID in the chrome-extension test URL is // valid. Invalid extension URLs may result in error pages (if blocked by // ExtensionNavigationThrottle), which this test doesn't wish to exercise. - ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile())->AddEnabled( + extensions::TestExtensionSystem* extension_system = + static_cast<extensions::TestExtensionSystem*>( + extensions::ExtensionSystem::Get(profile())); + extension_system->CreateExtensionService( + base::CommandLine::ForCurrentProcess(), base::FilePath(), false); + scoped_refptr<const extensions::Extension> extension = extensions::ExtensionBuilder("Test") .SetID("fooooooooooooooooooooooooooooooo") - .Build())); + .Build(); + extension_system->extension_service()->AddExtension(extension.get()); #endif }
diff --git a/chrome/browser/ui/views/accessibility/invert_bubble_view.cc b/chrome/browser/ui/views/accessibility/invert_bubble_view.cc index 441bbec..d87f871 100644 --- a/chrome/browser/ui/views/accessibility/invert_bubble_view.cc +++ b/chrome/browser/ui/views/accessibility/invert_bubble_view.cc
@@ -81,6 +81,10 @@ } void InvertBubbleView::Init() { + const ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); + SetBorder(views::CreateEmptyBorder( + provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS))); + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); const gfx::FontList& original_font_list = rb.GetFontList(ui::ResourceBundle::MediumFont); @@ -108,7 +112,7 @@ close_->SetFontList(original_font_list); close_->set_listener(this); - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* columns = layout->AddColumnSet(0); for (int i = 0; i < 4; i++) { @@ -119,9 +123,9 @@ layout->StartRow(0, 0); layout->AddView(title, 4, 1); - layout->StartRowWithPadding(0, 0, 0, - ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_RELATED_CONTROL_VERTICAL_SMALL)); + layout->StartRowWithPadding( + 0, 0, 0, + provider->GetDistanceMetric(DISTANCE_RELATED_CONTROL_VERTICAL_SMALL)); layout->AddView(high_contrast_); layout->AddView(dark_theme_); layout->AddView(learn_more_);
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc index ab3da0f..063c51bf0 100644 --- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc +++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc
@@ -90,8 +90,7 @@ class BulletedPermissionsList : public views::View { public: BulletedPermissionsList() { - layout_ = new views::GridLayout(this); - SetLayoutManager(layout_); + layout_ = views::GridLayout::CreateAndInstall(this); // Create 3 columns: the bullet, the bullet text, and the revoke button. views::ColumnSet* column_set = layout_->AddColumnSet(kBulletColumnSetId);
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 fa6663e..bfd07c0 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views.cc
@@ -121,7 +121,7 @@ // If user accepted upload but more info is needed, push the next view onto // the stack and update the bubble. DCHECK(controller_); - controller_->SetShowUploadConfirmTitle(true); + controller_->ContinueToRequestCvcStage(); view_stack_->Push(CreateRequestCvcView(), /*animate=*/true); GetWidget()->UpdateWindowTitle(); GetWidget()->UpdateWindowIcon(); @@ -150,6 +150,10 @@ bool SaveCardBubbleViews::Close() { // Cancel is logged as a different user action than closing, so override // Close() to prevent the superclass' implementation from calling Cancel(). + // Additionally, both clicking the top-right [X] close button *and* focusing + // then unfocusing the bubble count as a close action, which means we can't + // tell the controller to permanently hide the bubble on close, because then + // even things like switching tabs would dismiss the offer to save for good. // Return true to indicate that the bubble can be closed. return true; }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc index 001abcf7..d97d71e 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
@@ -296,8 +296,7 @@ SetLayoutManager(new views::FillLayout()); bookmark_contents_view_ = new views::View(); - GridLayout* layout = new GridLayout(bookmark_contents_view_); - bookmark_contents_view_->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(bookmark_contents_view_); // This column set is used for the labels and textfields. constexpr int kColumnId = 0;
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc index 8e84959..b477990 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
@@ -72,6 +72,8 @@ DCHECK(profile); DCHECK(bb_model_); DCHECK(bb_model_->client()->CanBeEditedByUser(parent)); + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); Init(); chrome::RecordDialogCreation(chrome::DialogIdentifier::BOOKMARK_EDITOR); } @@ -335,7 +337,7 @@ new_folder_button_->SetEnabled(false); } - GridLayout* layout = GridLayout::CreatePanel(this); + GridLayout* layout = GridLayout::CreateAndInstall(this); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); const int labels_column_set_id = 0;
diff --git a/chrome/browser/ui/views/certificate_selector.cc b/chrome/browser/ui/views/certificate_selector.cc index dc75b6e..34450c71 100644 --- a/chrome/browser/ui/views/certificate_selector.cc +++ b/chrome/browser/ui/views/certificate_selector.cc
@@ -118,6 +118,9 @@ : web_contents_(web_contents) { CHECK(web_contents_); + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); + // |provider_names| and |identities_| are parallel arrays. // The entry at index |i| is the provider name for |identities_[i]|. std::vector<std::string> provider_names; @@ -197,7 +200,7 @@ void CertificateSelector::InitWithText( std::unique_ptr<views::View> text_label) { - views::GridLayout* const layout = views::GridLayout::CreatePanel(this); + views::GridLayout* const layout = views::GridLayout::CreateAndInstall(this); const int kColumnSetId = 0; views::ColumnSet* const column_set = layout->AddColumnSet(kColumnSetId);
diff --git a/chrome/browser/ui/views/collected_cookies_views.cc b/chrome/browser/ui/views/collected_cookies_views.cc index b45cd14..e168893 100644 --- a/chrome/browser/ui/views/collected_cookies_views.cc +++ b/chrome/browser/ui/views/collected_cookies_views.cc
@@ -313,13 +313,12 @@ void CollectedCookiesViews::Init() { using views::GridLayout; - GridLayout* layout = new GridLayout(this); + GridLayout* layout = GridLayout::CreateAndInstall(this); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); if (provider->UseExtraDialogPadding()) { SetBorder( views::CreateEmptyBorder(gfx::Insets(kTabbedPaneTopPadding, 0, 0, 0))); } - SetLayoutManager(layout); const int single_column_layout_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id); @@ -387,7 +386,10 @@ using views::GridLayout; views::View* pane = new views::View(); - GridLayout* layout = GridLayout::CreatePanel(pane); + GridLayout* layout = GridLayout::CreateAndInstall(pane); + pane->SetBorder( + views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS))); int unrelated_vertical_distance = ChromeLayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_UNRELATED_CONTROL_VERTICAL); @@ -451,7 +453,10 @@ using views::GridLayout; views::View* pane = new views::View(); - GridLayout* layout = GridLayout::CreatePanel(pane); + GridLayout* layout = GridLayout::CreateAndInstall(pane); + pane->SetBorder( + views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS))); int unrelated_vertical_distance = ChromeLayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_UNRELATED_CONTROL_VERTICAL);
diff --git a/chrome/browser/ui/views/confirm_bubble_views.cc b/chrome/browser/ui/views/confirm_bubble_views.cc index 161a1f8..dd8199a 100644 --- a/chrome/browser/ui/views/confirm_bubble_views.cc +++ b/chrome/browser/ui/views/confirm_bubble_views.cc
@@ -9,6 +9,7 @@ #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/confirm_bubble.h" #include "chrome/browser/ui/confirm_bubble_model.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "components/constrained_window/constrained_window_views.h" #include "ui/base/ui_features.h" #include "ui/views/controls/label.h" @@ -19,7 +20,9 @@ ConfirmBubbleViews::ConfirmBubbleViews( std::unique_ptr<ConfirmBubbleModel> model) : model_(std::move(model)), link_(NULL) { - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // Use a fixed maximum message width, so longer messages will wrap. const int kMaxMessageWidth = 400;
diff --git a/chrome/browser/ui/views/confirm_bubble_views_unittest.cc b/chrome/browser/ui/views/confirm_bubble_views_unittest.cc index bd22c207..0fb9855 100644 --- a/chrome/browser/ui/views/confirm_bubble_views_unittest.cc +++ b/chrome/browser/ui/views/confirm_bubble_views_unittest.cc
@@ -9,14 +9,14 @@ #include "chrome/browser/ui/confirm_bubble.h" #include "chrome/browser/ui/test/test_confirm_bubble_model.h" #include "chrome/browser/ui/views/chrome_constrained_window_views_client.h" +#include "chrome/test/views/chrome_views_test_base.h" #include "components/constrained_window/constrained_window_views.h" #include "testing/gtest/include/gtest/gtest.h" -#include "ui/views/test/views_test_base.h" #include "ui/views/widget/widget.h" using views::Widget; -typedef views::ViewsTestBase ConfirmBubbleViewsTest; +typedef ChromeViewsTestBase ConfirmBubbleViewsTest; TEST_F(ConfirmBubbleViewsTest, CreateAndClose) { SetConstrainedWindowViewsClient(CreateChromeConstrainedWindowViewsClient());
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.cc b/chrome/browser/ui/views/content_setting_bubble_contents.cc index 3bc6f4bb1..06e97b2 100644 --- a/chrome/browser/ui/views/content_setting_bubble_contents.cc +++ b/chrome/browser/ui/views/content_setting_bubble_contents.cc
@@ -249,8 +249,7 @@ void ContentSettingBubbleContents::ListItemContainer::ResetLayout() { using views::GridLayout; - GridLayout* layout = new GridLayout(this); - SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(this); views::ColumnSet* item_list_column_set = layout->AddColumnSet(0); item_list_column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 0, GridLayout::USE_PREF, 0, 0); @@ -344,8 +343,7 @@ void ContentSettingBubbleContents::Init() { using views::GridLayout; - GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + GridLayout* layout = views::GridLayout::CreateAndInstall(this); const ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); const int related_control_horizontal_spacing = provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_HORIZONTAL);
diff --git a/chrome/browser/ui/views/cookie_info_view.cc b/chrome/browser/ui/views/cookie_info_view.cc index da53a246..67fdaa8 100644 --- a/chrome/browser/ui/views/cookie_info_view.cc +++ b/chrome/browser/ui/views/cookie_info_view.cc
@@ -146,8 +146,7 @@ l10n_util::GetStringUTF16(IDS_COOKIES_COOKIE_EXPIRES_LABEL)); expires_value_field_ = new views::Textfield; - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); const gfx::Insets& dialog_insets = provider->GetInsetsMetric(views::INSETS_DIALOG);
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc index 6f80396..0ea459a 100644 --- a/chrome/browser/ui/views/create_application_shortcut_view.cc +++ b/chrome/browser/ui/views/create_application_shortcut_view.cc
@@ -51,6 +51,8 @@ menu_check_box_(nullptr), quick_launch_check_box_(nullptr), weak_ptr_factory_(this) { + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); InitControls(); // Get shortcut and icon information; needed for creating the shortcut. @@ -106,7 +108,7 @@ ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); // Layout controls - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); static const int kHeaderColumnSetId = 0; views::ColumnSet* column_set = layout->AddColumnSet(kHeaderColumnSetId);
diff --git a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc index 256c7ea..d302903 100644 --- a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc +++ b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc
@@ -27,6 +27,8 @@ const std::string& hostname, const CryptoModulePasswordCallback& callback) : callback_(callback) { + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); Init(hostname, slot_name, reason); chrome::RecordDialogCreation(chrome::DialogIdentifier::CRYPTO_PASSWORD); } @@ -125,7 +127,7 @@ ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* reason_column_set = layout->AddColumnSet(0); reason_column_set->AddColumn(
diff --git a/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc b/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc index a3273db..0639acf 100644 --- a/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc +++ b/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc
@@ -40,8 +40,7 @@ base::MakeUnique<DesktopIOSPromotionBubbleController>(profile, this, entry_point)) { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); SetBorder(views::CreateEmptyBorder( 0,
diff --git a/chrome/browser/ui/views/download/download_danger_prompt_views.cc b/chrome/browser/ui/views/download/download_danger_prompt_views.cc index a9fc68d6..9f170f9 100644 --- a/chrome/browser/ui/views/download/download_danger_prompt_views.cc +++ b/chrome/browser/ui/views/download/download_danger_prompt_views.cc
@@ -8,6 +8,7 @@ #include "chrome/browser/download/download_stats.h" #include "chrome/browser/extensions/api/experience_sampling_private/experience_sampling.h" #include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "components/constrained_window/constrained_window_views.h" @@ -95,7 +96,10 @@ contents_view_ = new views::View; - views::GridLayout* layout = views::GridLayout::CreatePanel(contents_view_); + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(contents_view_); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
diff --git a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc index 425ddfa..865bd18 100644 --- a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc +++ b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
@@ -65,7 +65,8 @@ open_as_window_checkbox_(nullptr), title_tf_(nullptr) { const ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + set_margins(layout_provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS)); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); const int column_set_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(column_set_id);
diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc index c2e0000..fc82abd 100644 --- a/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc +++ b/chrome/browser/ui/views/extensions/chooser_dialog_view_unittest.cc
@@ -11,28 +11,25 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/chooser_controller/mock_chooser_controller.h" #include "chrome/browser/ui/views/device_chooser_content_view.h" -#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/grit/generated_resources.h" +#include "chrome/test/views/chrome_views_test_base.h" #include "testing/gmock/include/gmock/gmock.h" #include "ui/base/l10n/l10n_util.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/styled_label.h" #include "ui/views/controls/table/table_view.h" #include "ui/views/test/native_widget_factory.h" -#include "ui/views/test/views_test_base.h" #include "ui/views/widget/widget.h" #include "ui/views/window/dialog_client_view.h" -class ChooserDialogViewTest : public views::ViewsTestBase { +class ChooserDialogViewTest : public ChromeViewsTestBase { public: ChooserDialogViewTest() {} ~ChooserDialogViewTest() override {} - // views::ViewsTestBase: + // ChromeViewsTestBase: void SetUp() override { - views::ViewsTestBase::SetUp(); - test_views_delegate()->set_layout_provider( - ChromeLayoutProvider::CreateLayoutProvider()); + ChromeViewsTestBase::SetUp(); auto mock_chooser_controller = base::MakeUnique<MockChooserController>(); mock_chooser_controller_ = mock_chooser_controller.get(); std::unique_ptr<ChooserDialogView> chooser_dialog_view( @@ -62,11 +59,11 @@ ASSERT_TRUE(cancel_button_); } - // views::ViewsTestBase: + // ChromeViewsTestBase: void TearDown() override { dialog_->CloseNow(); parent_widget_->CloseNow(); - views::ViewsTestBase::TearDown(); + ChromeViewsTestBase::TearDown(); } protected:
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc index 6f62003..3a00480 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -156,8 +156,7 @@ } // namespace BulletedView::BulletedView(views::View* view) { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING, @@ -290,8 +289,8 @@ // Create the scrollable view which will contain the permissions and retained // files/devices. It will span the full content width. CustomScrollableView* scrollable = new CustomScrollableView(); - views::GridLayout* scroll_layout = new views::GridLayout(scrollable); - scrollable->SetLayoutManager(scroll_layout); + views::GridLayout* scroll_layout = + views::GridLayout::CreateAndInstall(scrollable); views::ColumnSet* scrollable_column_set = scroll_layout->AddColumnSet(column_set_id); @@ -455,8 +454,7 @@ // done so that the extension icon can be shown on the right of the dialog // title, but on the same y-axis, and the scroll view used to contain other // content can have its scrollbar aligned with the right edge of the dialog. - views::GridLayout* layout = new views::GridLayout(container_); - container_->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(container_); container_->SetBorder(views::CreateEmptyBorder(0, content_insets.left(), content_insets.bottom(), 0)); AddChildView(container_); @@ -630,9 +628,7 @@ ExpandableContainerView::DetailsView::DetailsView(int horizontal_space, bool parent_bulleted) - : layout_(new views::GridLayout(this)), - state_(0) { - SetLayoutManager(layout_); + : layout_(views::GridLayout::CreateAndInstall(this)), state_(0) { views::ColumnSet* column_set = layout_->AddColumnSet(0); const int padding = GetLeftPaddingForBulletedItems(parent_bulleted); column_set->AddPaddingColumn(0, padding); @@ -675,8 +671,7 @@ more_details_(NULL), arrow_toggle_(NULL), expanded_(false) { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); int column_set_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING,
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc index a2a3adc..7b2f4fe 100644 --- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc +++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
@@ -99,9 +99,12 @@ contents_->RemoveAllChildViews(true); checkbox_map_.clear(); - int dialog_content_width = views::Widget::GetLocalizedContentsWidth( + const int dialog_content_width = views::Widget::GetLocalizedContentsWidth( IDS_MEDIA_GALLERIES_DIALOG_CONTENT_WIDTH_CHARS); - views::GridLayout* layout = views::GridLayout::CreatePanel(contents_); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(contents_); + contents_->SetBorder( + views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS))); int column_set_id = 0; views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
diff --git a/chrome/browser/ui/views/external_protocol_dialog.cc b/chrome/browser/ui/views/external_protocol_dialog.cc index 82432d92..7a1e128 100644 --- a/chrome/browser/ui/views/external_protocol_dialog.cc +++ b/chrome/browser/ui/views/external_protocol_dialog.cc
@@ -12,25 +12,20 @@ #include "chrome/browser/tab_contents/tab_util.h" #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/external_protocol_dialog_delegate.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" +#include "chrome/browser/ui/views/harmony/chrome_typography.h" #include "components/constrained_window/constrained_window_views.h" #include "content/public/browser/web_contents.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/ui_features.h" #include "ui/gfx/text_elider.h" -#include "ui/views/controls/message_box_view.h" +#include "ui/views/controls/button/checkbox.h" +#include "ui/views/controls/label.h" +#include "ui/views/layout/box_layout.h" #include "ui/views/widget/widget.h" using content::WebContents; -namespace { - -const int kMessageWidth = 400; - -} // namespace - -/////////////////////////////////////////////////////////////////////////////// -// ExternalProtocolHandler - #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) // This should be kept in sync with RunExternalProtocolDialogViews in // external_protocol_dialog_views_mac.mm. @@ -52,15 +47,13 @@ } #endif // !OS_MACOSX || MAC_VIEWS_BROWSER -/////////////////////////////////////////////////////////////////////////////// -// ExternalProtocolDialog +ExternalProtocolDialog::~ExternalProtocolDialog() {} -ExternalProtocolDialog::~ExternalProtocolDialog() { +gfx::Size ExternalProtocolDialog::CalculatePreferredSize() const { + constexpr int kDialogContentWidth = 400; + return gfx::Size(kDialogContentWidth, GetHeightForWidth(kDialogContentWidth)); } -////////////////////////////////////////////////////////////////////////////// -// ExternalProtocolDialog, views::DialogDelegate implementation: - int ExternalProtocolDialog::GetDefaultDialogButton() const { return ui::DIALOG_BUTTON_CANCEL; } @@ -74,17 +67,13 @@ return delegate_->GetTitleText(); } -void ExternalProtocolDialog::DeleteDelegate() { - delete this; -} - bool ExternalProtocolDialog::Cancel() { - bool is_checked = message_box_view_->IsCheckBoxSelected(); - delegate_->DoCancel(delegate_->url(), is_checked); + const bool remember = remember_decision_checkbox_->checked(); + delegate_->DoCancel(delegate_->url(), remember); - ExternalProtocolHandler::RecordCheckboxStateMetrics(is_checked); + ExternalProtocolHandler::RecordCheckboxStateMetrics(remember); ExternalProtocolHandler::RecordHandleStateMetrics( - is_checked, ExternalProtocolHandler::BLOCK); + remember, ExternalProtocolHandler::BLOCK); // Returning true closes the dialog. return true; @@ -97,12 +86,12 @@ UMA_HISTOGRAM_LONG_TIMES("clickjacking.launch_url", base::TimeTicks::Now() - creation_time_); - bool is_checked = message_box_view_->IsCheckBoxSelected(); - ExternalProtocolHandler::RecordCheckboxStateMetrics(is_checked); + const bool remember = remember_decision_checkbox_->checked(); + ExternalProtocolHandler::RecordCheckboxStateMetrics(remember); ExternalProtocolHandler::RecordHandleStateMetrics( - is_checked, ExternalProtocolHandler::DONT_BLOCK); + remember, ExternalProtocolHandler::DONT_BLOCK); - delegate_->DoAccept(delegate_->url(), is_checked); + delegate_->DoAccept(delegate_->url(), remember); // Returning true closes the dialog. return true; @@ -117,25 +106,10 @@ return true; } -views::View* ExternalProtocolDialog::GetContentsView() { - return message_box_view_; -} - -views::Widget* ExternalProtocolDialog::GetWidget() { - return message_box_view_->GetWidget(); -} - -const views::Widget* ExternalProtocolDialog::GetWidget() const { - return message_box_view_->GetWidget(); -} - ui::ModalType ExternalProtocolDialog::GetModalType() const { return ui::MODAL_TYPE_CHILD; } -/////////////////////////////////////////////////////////////////////////////// -// ExternalProtocolDialog, private: - ExternalProtocolDialog::ExternalProtocolDialog( std::unique_ptr<const ProtocolDialogDelegate> delegate, int render_process_host_id, @@ -144,10 +118,17 @@ render_process_host_id_(render_process_host_id), routing_id_(routing_id), creation_time_(base::TimeTicks::Now()) { - views::MessageBoxView::InitParams params(delegate_->GetMessageText()); - params.message_width = kMessageWidth; - message_box_view_ = new views::MessageBoxView(params); - message_box_view_->SetCheckBoxLabel(delegate_->GetCheckboxText()); + ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); + set_margins(provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS)); + + // TODO(crbug.com/760651): We should use FillLayout since we only have one + // child, but it causes the checkbox image to get cut off in MD. + SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal)); + + DCHECK(delegate_->GetMessageText().empty()); + remember_decision_checkbox_ = + new views::Checkbox(delegate_->GetCheckboxText()); + AddChildView(remember_decision_checkbox_); WebContents* web_contents = tab_util::GetWebContentsByID( render_process_host_id_, routing_id_);
diff --git a/chrome/browser/ui/views/external_protocol_dialog.h b/chrome/browser/ui/views/external_protocol_dialog.h index 3c53e7d2..8175d7c4 100644 --- a/chrome/browser/ui/views/external_protocol_dialog.h +++ b/chrome/browser/ui/views/external_protocol_dialog.h
@@ -5,7 +5,6 @@ #ifndef CHROME_BROWSER_UI_VIEWS_EXTERNAL_PROTOCOL_DIALOG_H_ #define CHROME_BROWSER_UI_VIEWS_EXTERNAL_PROTOCOL_DIALOG_H_ -#include "base/compiler_specific.h" #include "base/macros.h" #include "base/time/time.h" #include "ui/views/window/dialog_delegate.h" @@ -18,29 +17,26 @@ } namespace views { -class MessageBoxView; +class Checkbox; } -class ExternalProtocolDialog : public views::DialogDelegate { +class ExternalProtocolDialog : public views::DialogDelegateView { public: - // RunExternalProtocolDialog calls this private constructor. + // Show by calling ExternalProtocolHandler::RunExternalProtocolDialog. ExternalProtocolDialog(std::unique_ptr<const ProtocolDialogDelegate> delegate, int render_process_host_id, int routing_id); ~ExternalProtocolDialog() override; - // views::DialogDelegate methods: + // views::DialogDelegateView: + gfx::Size CalculatePreferredSize() const override; int GetDefaultDialogButton() const override; base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; base::string16 GetWindowTitle() const override; - void DeleteDelegate() override; bool Cancel() override; bool Accept() override; bool Close() override; - views::View* GetContentsView() override; - views::Widget* GetWidget() override; - const views::Widget* GetWidget() const override; ui::ModalType GetModalType() const override; private: @@ -48,8 +44,7 @@ const std::unique_ptr<const ProtocolDialogDelegate> delegate_; - // The message box view whose commands we handle. - views::MessageBoxView* message_box_view_; + views::Checkbox* remember_decision_checkbox_; // IDs of the associated WebContents. int render_process_host_id_;
diff --git a/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc b/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc index 540cb5cb..6bac799 100644 --- a/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc +++ b/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <string> + #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/test/histogram_tester.h" @@ -9,12 +11,13 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/external_protocol_dialog_delegate.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/test/test_browser_dialog.h" #include "chrome/browser/ui/views/external_protocol_dialog.h" #include "chrome/test/base/in_process_browser_test.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" -#include "ui/views/controls/message_box_view.h" +#include "ui/views/controls/button/checkbox.h" #include "url/gurl.h" namespace test { @@ -25,7 +28,7 @@ : dialog_(dialog) {} void SetCheckBoxSelected(bool checked) { - dialog_->message_box_view_->SetCheckBoxSelected(checked); + dialog_->remember_decision_checkbox_->SetChecked(checked); } private: @@ -80,11 +83,12 @@ DISALLOW_COPY_AND_ASSIGN(TestExternalProtocolDialogDelegate); }; -class ExternalProtocolDialogBrowserTest : public InProcessBrowserTest { +class ExternalProtocolDialogBrowserTest : public DialogBrowserTest { public: ExternalProtocolDialogBrowserTest() {} - void ShowDialog() { + // DialogBrowserTest: + void ShowDialog(const std::string& name = "") override { content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); int render_process_host_id = web_contents->GetRenderProcessHost()->GetID(); @@ -204,3 +208,10 @@ histogram_tester_.ExpectTotalCount( ExternalProtocolHandler::kHandleStateMetric, 0); } + +// Invokes a dialog that asks the user if an external application is allowed to +// run. See test_browser_dialog.h. +IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, + InvokeDialog_default) { + RunDialog(); +}
diff --git a/chrome/browser/ui/views/first_run_bubble.cc b/chrome/browser/ui/views/first_run_bubble.cc index 2e8d4f24..539e4a7 100644 --- a/chrome/browser/ui/views/first_run_bubble.cc +++ b/chrome/browser/ui/views/first_run_bubble.cc
@@ -68,7 +68,7 @@ views::Label* subtext = new views::Label( l10n_util::GetStringUTF16(IDS_FR_BUBBLE_SUBTEXT), {original_font_list}); - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); SetBorder(views::CreateEmptyBorder(kTopInset, kLeftInset, kBottomInset, kRightInset));
diff --git a/chrome/browser/ui/views/first_run_dialog.cc b/chrome/browser/ui/views/first_run_dialog.cc index d90bd93..b409d21 100644 --- a/chrome/browser/ui/views/first_run_dialog.cc +++ b/chrome/browser/ui/views/first_run_dialog.cc
@@ -80,7 +80,9 @@ : profile_(profile), make_default_(NULL), report_crashes_(NULL) { - GridLayout* layout = GridLayout::CreatePanel(this); + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); + GridLayout* layout = GridLayout::CreateAndInstall(this); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0,
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h index a1f79c2..69ddf68 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.h
@@ -43,7 +43,6 @@ private: void PaintThemedFrame(gfx::Canvas* canvas); - void PaintToolbarBackground(gfx::Canvas* canvas); DISALLOW_COPY_AND_ASSIGN(BrowserNonClientFrameViewMac); };
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm index 847d4e6..19a11b43 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
@@ -135,38 +135,3 @@ gfx::ImageSkia overlay = GetFrameOverlayImage(); canvas->TileImageInt(overlay, 0, 0, width(), overlay.height()); } - -void BrowserNonClientFrameViewMac::PaintToolbarBackground(gfx::Canvas* canvas) { - gfx::Rect bounds(browser_view()->GetToolbarBounds()); - if (bounds.IsEmpty()) - return; - - const ui::ThemeProvider* tp = GetThemeProvider(); - gfx::ImageSkia* border = tp->GetImageSkiaNamed(IDR_TOOLBAR_SHADE_TOP); - - const int x = bounds.x(); - const int y = bounds.y() - border->height(); - const int w = bounds.width(); - const int h = bounds.height() + border->height(); - - // The tabstrip border image height is 2*scale pixels, but only the bottom 2 - // pixels contain the actual border (the rest is transparent). We can't draw - // the toolbar image below this transparent upper area when scale > 1. - const int fill_y = y + canvas->image_scale() - 1; - const int fill_height = bounds.bottom() - fill_y; - - // Draw the toolbar fill. - canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR), - x + GetThemeBackgroundXInset(), - fill_y - GetTopInset(false), x, fill_y, w, fill_height); - - // Draw the tabstrip/toolbar separator. - canvas->TileImageInt(*border, 0, 0, x, y, w, border->height()); - - // Draw the content/toolbar separator. - canvas->FillRect( - gfx::Rect(x, y + h - kClientEdgeThickness, w, kClientEdgeThickness), - ThemeProperties::GetDefaultColor( - ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR, - browser_view()->IsIncognito())); -}
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc index 0d6d6008..445da4d 100644 --- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc +++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
@@ -166,6 +166,10 @@ } bool ImmersiveModeControllerAsh::ShouldStayImmersiveAfterExitingFullscreen() { + // TODO(crbug.com/760811): Support tablet mode in mash. + if (ash_util::IsRunningInMash()) + return false; + return !browser_view_->IsBrowserTypeNormal() && ash::Shell::Get()->tablet_mode_controller()->ShouldAutoHideTitlebars(); } @@ -180,8 +184,11 @@ if (browser_view_->IsBrowserTypeNormal()) return; - if (!ash::Shell::Get()->tablet_mode_controller()->ShouldAutoHideTitlebars()) + // TODO(crbug.com/760811): Support tablet mode in mash. + if (ash_util::IsRunningInMash() || + !ash::Shell::Get()->tablet_mode_controller()->ShouldAutoHideTitlebars()) { return; + } // Enable immersive mode if the widget is activated. Do not disable immersive // mode if the widget deactivates, but is not minimized.
diff --git a/chrome/browser/ui/views/global_error_bubble_view.cc b/chrome/browser/ui/views/global_error_bubble_view.cc index 6b63fad..3d16cba 100644 --- a/chrome/browser/ui/views/global_error_bubble_view.cc +++ b/chrome/browser/ui/views/global_error_bubble_view.cc
@@ -116,8 +116,7 @@ message_labels.push_back(message_label); } - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // First row, message labels. views::ColumnSet* cs = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/harmony/chrome_layout_provider.cc b/chrome/browser/ui/views/harmony/chrome_layout_provider.cc index ca1fee6..882ca52 100644 --- a/chrome/browser/ui/views/harmony/chrome_layout_provider.cc +++ b/chrome/browser/ui/views/harmony/chrome_layout_provider.cc
@@ -12,8 +12,26 @@ #include "chrome/browser/ui/views/harmony/harmony_layout_provider.h" #include "ui/base/material_design/material_design_controller.h" +namespace { + +ChromeLayoutProvider* g_chrome_layout_provider = nullptr; + +} // namespace + +ChromeLayoutProvider::ChromeLayoutProvider() { + DCHECK_EQ(nullptr, g_chrome_layout_provider); + g_chrome_layout_provider = this; +} + +ChromeLayoutProvider::~ChromeLayoutProvider() { + DCHECK_EQ(this, g_chrome_layout_provider); + g_chrome_layout_provider = nullptr; +} + // static ChromeLayoutProvider* ChromeLayoutProvider::Get() { + // Check to avoid downcasting a base LayoutProvider. + DCHECK_EQ(g_chrome_layout_provider, views::LayoutProvider::Get()); return static_cast<ChromeLayoutProvider*>(views::LayoutProvider::Get()); }
diff --git a/chrome/browser/ui/views/harmony/chrome_layout_provider.h b/chrome/browser/ui/views/harmony/chrome_layout_provider.h index d58949a..40c7821 100644 --- a/chrome/browser/ui/views/harmony/chrome_layout_provider.h +++ b/chrome/browser/ui/views/harmony/chrome_layout_provider.h
@@ -47,8 +47,8 @@ class ChromeLayoutProvider : public views::LayoutProvider { public: - ChromeLayoutProvider() {} - ~ChromeLayoutProvider() override {} + ChromeLayoutProvider(); + ~ChromeLayoutProvider() override; static ChromeLayoutProvider* Get(); static std::unique_ptr<views::LayoutProvider> CreateLayoutProvider();
diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc index ea381ada..30b2727 100644 --- a/chrome/browser/ui/views/hung_renderer_view.cc +++ b/chrome/browser/ui/views/hung_renderer_view.cc
@@ -223,6 +223,8 @@ HungRendererDialogView::HungRendererDialogView() : info_label_(nullptr), hung_pages_table_(nullptr), initialized_(false) { + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); chrome::RecordDialogCreation(chrome::DialogIdentifier::HUNG_RENDERER); } @@ -415,7 +417,7 @@ using views::GridLayout; - GridLayout* layout = GridLayout::CreatePanel(this); + GridLayout* layout = GridLayout::CreateAndInstall(this); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); constexpr int kColumnSetId = 0;
diff --git a/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc b/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc index 01aad4c..a4f7893 100644 --- a/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc +++ b/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc
@@ -159,8 +159,7 @@ // ----------------------------------------- // - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); int cs_id = 0;
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view.cc b/chrome/browser/ui/views/intent_picker_bubble_view.cc index 03995b6..f9b98b41 100644 --- a/chrome/browser/ui/views/intent_picker_bubble_view.cc +++ b/chrome/browser/ui/views/intent_picker_bubble_view.cc
@@ -163,8 +163,7 @@ } void IntentPickerBubbleView::Init() { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // Creates a view to hold the views for each app. views::View* scrollable_view = new views::View();
diff --git a/chrome/browser/ui/views/login_view.cc b/chrome/browser/ui/views/login_view.cc index 109a75b..c2a7dbd 100644 --- a/chrome/browser/ui/views/login_view.cc +++ b/chrome/browser/ui/views/login_view.cc
@@ -9,6 +9,7 @@ #include "chrome/browser/ui/views/harmony/textfield_layout.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/views/border.h" #include "ui/views/controls/label.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/layout/grid_layout.h" @@ -48,9 +49,11 @@ // to textfield_layout.h to decide. constexpr int kMessageWidth = 320; ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); + SetBorder(views::CreateEmptyBorder( + provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS))); // Initialize the Grid Layout Manager used for this dialog box. - GridLayout* layout = GridLayout::CreatePanel(this); + GridLayout* layout = GridLayout::CreateAndInstall(this); views::ColumnSet* column_set = layout->AddColumnSet(kHeaderColumnSetId); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, kStretchy, GridLayout::FIXED, kMessageWidth, 0);
diff --git a/chrome/browser/ui/views/page_info/chosen_object_row.cc b/chrome/browser/ui/views/page_info/chosen_object_row.cc index b4cbcb9a..3333d94 100644 --- a/chrome/browser/ui/views/page_info/chosen_object_row.cc +++ b/chrome/browser/ui/views/page_info/chosen_object_row.cc
@@ -17,8 +17,7 @@ ChosenObjectRow::ChosenObjectRow( std::unique_ptr<PageInfoUI::ChosenObjectInfo> info) : info_(std::move(info)) { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); const int column_set_id = 0; views::ColumnSet* column_set = layout->AddColumnSet(column_set_id); column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc index 251d146..477f003e 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -137,8 +137,7 @@ views::Link* link) { views::View* new_view = new views::View(); - views::GridLayout* layout = new views::GridLayout(new_view); - new_view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(new_view); const int column = 0; views::ColumnSet* column_set = layout->AddColumnSet(column); @@ -260,8 +259,7 @@ password_reuse_button_container_(nullptr), change_password_button_(nullptr), whitelist_password_reuse_button_(nullptr) { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); const int label_column_status = 1; AddColumnWithSideMargin(layout, side_margin, label_column_status); @@ -515,8 +513,7 @@ // below the dialog title. set_margins(gfx::Insets(0, 0, margins().bottom(), 0)); - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // Use a single ColumnSet here. Otherwise the preferred width doesn't properly // propagate up to the dialog width. @@ -697,8 +694,8 @@ } permissions_view_ = new views::View(); - views::GridLayout* layout = new views::GridLayout(permissions_view_); - permissions_view_->SetLayoutManager(layout); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(permissions_view_); site_settings_view_->AddChildView(permissions_view_);
diff --git a/chrome/browser/ui/views/passwords/credentials_selection_view.cc b/chrome/browser/ui/views/passwords/credentials_selection_view.cc index 5401203..8b43b953 100644 --- a/chrome/browser/ui/views/passwords/credentials_selection_view.cc +++ b/chrome/browser/ui/views/passwords/credentials_selection_view.cc
@@ -38,7 +38,7 @@ DCHECK(!password_forms_->empty()); // Layout. - views::GridLayout* layout = new views::GridLayout(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); SetLayoutManager(layout); // ColumnSet.
diff --git a/chrome/browser/ui/views/passwords/manage_password_items_view.cc b/chrome/browser/ui/views/passwords/manage_password_items_view.cc index cb6285d1..92931eb 100644 --- a/chrome/browser/ui/views/passwords/manage_password_items_view.cc +++ b/chrome/browser/ui/views/passwords/manage_password_items_view.cc
@@ -284,7 +284,7 @@ void ManagePasswordItemsView::AddRows() { const int vertical_padding = ChromeLayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_RELATED_CONTROL_VERTICAL); - views::GridLayout* layout = new views::GridLayout(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); SetLayoutManager(layout); for (const std::unique_ptr<PasswordFormRow>& row : password_forms_rows_) { if (row != password_forms_rows_[0])
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc index 6eaf537..15d2324c 100644 --- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc +++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
@@ -378,9 +378,8 @@ } void ManagePasswordsBubbleView::PendingView::CreateAndSetLayout() { - views::GridLayout* layout = new views::GridLayout(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); - SetLayoutManager(layout); // Create the edit, save and never buttons. if (!edit_button_ && @@ -557,9 +556,8 @@ ManagePasswordsBubbleView::ManageView::ManageView( ManagePasswordsBubbleView* parent) : parent_(parent) { - views::GridLayout* layout = new views::GridLayout(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); - SetLayoutManager(layout); BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); @@ -650,9 +648,8 @@ ManagePasswordsBubbleView::SaveConfirmationView::SaveConfirmationView( ManagePasswordsBubbleView* parent) : parent_(parent) { - views::GridLayout* layout = new views::GridLayout(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); - SetLayoutManager(layout); views::StyledLabel* confirmation = new views::StyledLabel(parent_->model()->save_confirmation_text(), this); @@ -724,9 +721,8 @@ ManagePasswordsBubbleView::SignInPromoView::SignInPromoView( ManagePasswordsBubbleView* parent) : parent_(parent) { - views::GridLayout* layout = new views::GridLayout(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); - SetLayoutManager(layout); signin_button_ = views::MdTextButton::CreateSecondaryUiBlueButton( this, @@ -792,9 +788,8 @@ ManagePasswordsBubbleView* parent) : parent_(parent), selection_view_(nullptr) { ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); - views::GridLayout* layout = new views::GridLayout(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); - SetLayoutManager(layout); // Credential row. if (parent->model()->ShouldShowMultipleAccountUpdateUI()) { @@ -985,6 +980,10 @@ return model_.title(); } +bool ManagePasswordsBubbleView::ShouldShowWindowTitle() const { + return !model_.title().empty(); +} + gfx::ImageSkia ManagePasswordsBubbleView::GetWindowIcon() { #if defined(OS_WIN) if (model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) {
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h index f35aa55..18eb6eff 100644 --- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h +++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h
@@ -81,6 +81,7 @@ void CloseBubble() override; void AddedToWidget() override; base::string16 GetWindowTitle() const override; + bool ShouldShowWindowTitle() const override; gfx::ImageSkia GetWindowIcon() override; bool ShouldShowWindowIcon() const override; bool ShouldShowCloseButton() const override;
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc index ae740ce5..2ba676f 100644 --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
@@ -293,8 +293,8 @@ view = std::move(exp_label); } else { // Two comboboxes, one for month and the other for year. - std::unique_ptr<views::GridLayout> combobox_layout = - base::MakeUnique<views::GridLayout>(view.get()); + views::GridLayout* combobox_layout = + views::GridLayout::CreateAndInstall(view.get()); views::ColumnSet* columns = combobox_layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1, views::GridLayout::USE_PREF, 0, 0); @@ -328,7 +328,6 @@ combobox_layout->AddView(year_combobox.release(), 1, 1, views::GridLayout::FILL, views::GridLayout::FILL, 0, kInputFieldHeight); - view->SetLayoutManager(combobox_layout.release()); } // Set the initial validity of the custom view.
diff --git a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc index 27a11bc..c75d125 100644 --- a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc +++ b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
@@ -155,8 +155,7 @@ } void CvcUnmaskViewController::FillContentView(views::View* content_view) { - std::unique_ptr<views::GridLayout> layout = - base::MakeUnique<views::GridLayout>(content_view); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(content_view); content_view->SetBorder(views::CreateEmptyBorder( kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets, kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets)); @@ -272,8 +271,6 @@ error_label->SetVisible(false); layout->AddView(error_label.release()); - - content_view->SetLayoutManager(layout.release()); } std::unique_ptr<views::Button> CvcUnmaskViewController::CreatePrimaryButton() {
diff --git a/chrome/browser/ui/views/payments/editor_view_controller.cc b/chrome/browser/ui/views/payments/editor_view_controller.cc index 1c83e1d..cdb7c7d 100644 --- a/chrome/browser/ui/views/payments/editor_view_controller.cc +++ b/chrome/browser/ui/views/payments/editor_view_controller.cc
@@ -251,8 +251,8 @@ constexpr int kShortFieldMinimumWidth = 176; constexpr int kLongFieldMinimumWidth = 272; - std::unique_ptr<views::GridLayout> editor_layout = - base::MakeUnique<views::GridLayout>(editor_view.get()); + views::GridLayout* editor_layout = + views::GridLayout::CreateAndInstall(editor_view.get()); // Column set for short fields. views::ColumnSet* columns_short = editor_layout->AddColumnSet(0); columns_short->AddColumn(views::GridLayout::LEADING, @@ -307,7 +307,7 @@ for (const auto& field : GetFieldDefinitions()) { bool valid = false; views::View* focusable_field = - CreateInputField(editor_layout.get(), field, &valid); + CreateInputField(editor_layout, field, &valid); if (!first_field) first_field = focusable_field; if (!initial_focus_field_view_ && !valid) @@ -331,8 +331,6 @@ l10n_util::GetStringUTF16(IDS_PAYMENTS_REQUIRED_FIELD_MESSAGE)) .release()); - editor_view->SetLayoutManager(editor_layout.release()); - return editor_view; }
diff --git a/chrome/browser/ui/views/payments/order_summary_view_controller.cc b/chrome/browser/ui/views/payments/order_summary_view_controller.cc index 0c16806..334700a3 100644 --- a/chrome/browser/ui/views/payments/order_summary_view_controller.cc +++ b/chrome/browser/ui/views/payments/order_summary_view_controller.cc
@@ -57,8 +57,7 @@ ui::NativeTheme::kColorId_SeparatorColor), row_insets)); - views::GridLayout* layout = new views::GridLayout(row.get()); - row->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(row.get()); views::ColumnSet* columns = layout->AddColumnSet(0); // The first column has resize_percent = 1 so that it stretches all the way @@ -96,7 +95,7 @@ std::unique_ptr<views::View> amount_wrapper = base::MakeUnique<views::View>(); views::GridLayout* wrapper_layout = - new views::GridLayout(amount_wrapper.get()); + views::GridLayout::CreateAndInstall(amount_wrapper.get()); views::ColumnSet* wrapper_columns = wrapper_layout->AddColumnSet(0); wrapper_columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0, @@ -109,7 +108,6 @@ currency_text->set_id(static_cast<int>(currency_label_id)); wrapper_layout->AddView(currency_text.release()); wrapper_layout->AddView(amount_text.release()); - amount_wrapper->SetLayoutManager(wrapper_layout); layout->AddView(label_text.release()); layout->AddView(amount_wrapper.release());
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc index ca2e17c..a547962 100644 --- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc +++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
@@ -344,8 +344,8 @@ // would be under it. throbber_overlay_.SetBackground(views::CreateSolidBackground(SK_ColorWHITE)); - std::unique_ptr<views::GridLayout> layout = - base::MakeUnique<views::GridLayout>(&throbber_overlay_); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(&throbber_overlay_); views::ColumnSet* throbber_columns = layout->AddColumnSet(0); throbber_columns->AddPaddingColumn(0.5, 0); throbber_columns->AddColumn(views::GridLayout::Alignment::CENTER, @@ -367,7 +367,6 @@ layout->AddView(new views::Label( l10n_util::GetStringUTF16(IDS_PAYMENTS_PROCESSING_MESSAGE))); - throbber_overlay_.SetLayoutManager(layout.release()); AddChildView(&throbber_overlay_); }
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc index d55367a..e476ce94 100644 --- a/chrome/browser/ui/views/payments/payment_request_item_list.cc +++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc
@@ -63,8 +63,7 @@ std::unique_ptr<views::View> content = CreateContentView(&accessible_item_description_); - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // Add a column for the item's content view. views::ColumnSet* columns = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc index 07436a9..7c7b96f 100644 --- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc +++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
@@ -218,8 +218,7 @@ // layer) won't do proper clipping. view->SetPaintToLayer(); - views::GridLayout* layout = new views::GridLayout(view.get()); - view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(view.get()); // Note: each view is responsible for its own padding (insets). views::ColumnSet* columns = layout->AddColumnSet(0); @@ -237,13 +236,12 @@ // otherwise it'll be sized to the ScrollView's viewport height, preventing // the scroll bar from ever being shown. pane_ = new views::View; - views::GridLayout* pane_layout = new views::GridLayout(pane_); + views::GridLayout* pane_layout = views::GridLayout::CreateAndInstall(pane_); views::ColumnSet* pane_columns = pane_layout->AddColumnSet(0); pane_columns->AddColumn(views::GridLayout::Alignment::FILL, views::GridLayout::Alignment::LEADING, 0, views::GridLayout::SizeType::FIXED, GetActualDialogWidth(), GetActualDialogWidth()); - pane_->SetLayoutManager(pane_layout); pane_layout->StartRow(0, 0); // This is owned by its parent. It's the container passed to FillContentView. content_view_ = new views::View; @@ -345,8 +343,8 @@ container->SetBorder( views::CreateEmptyBorder(kInset, kInset, kInset, kInset)); - views::GridLayout* layout = new views::GridLayout(container.get()); - container->SetLayoutManager(layout); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(container.get()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.cc b/chrome/browser/ui/views/payments/payment_request_views_util.cc index c79047e..de8452bf 100644 --- a/chrome/browser/ui/views/payments/payment_request_views_util.cc +++ b/chrome/browser/ui/views/payments/payment_request_views_util.cc
@@ -184,8 +184,8 @@ const base::string16& title, views::ButtonListener* listener) { std::unique_ptr<views::View> container = base::MakeUnique<views::View>(); - views::GridLayout* layout = new views::GridLayout(container.get()); - container->SetLayoutManager(layout); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(container.get()); constexpr int kHeaderTopVerticalInset = 14; constexpr int kHeaderBottomVerticalInset = 8;
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc index 1c4e99f..e9262b9 100644 --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
@@ -150,7 +150,7 @@ kPaymentRequestRowVerticalInsets, trailing_inset); std::unique_ptr<PaymentRequestRowView> row = base::MakeUnique<PaymentRequestRowView>(listener, clickable, row_insets); - views::GridLayout* layout = new views::GridLayout(row.get()); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(row.get()); row->SetLayoutManager(layout); views::ColumnSet* columns = layout->AddColumnSet(0); @@ -211,8 +211,8 @@ bool bold) { std::unique_ptr<views::View> item_amount_line = base::MakeUnique<views::View>(); - std::unique_ptr<views::GridLayout> item_amount_layout = - base::MakeUnique<views::GridLayout>(item_amount_line.get()); + views::GridLayout* item_amount_layout = + views::GridLayout::CreateAndInstall(item_amount_line.get()); views::ColumnSet* item_amount_columns = item_amount_layout->AddColumnSet(0); item_amount_columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 0, @@ -240,7 +240,6 @@ item_amount_layout->AddView(currency_label.release()); item_amount_layout->AddView(amount_label.release()); - item_amount_line->SetLayoutManager(item_amount_layout.release()); return item_amount_line; } @@ -413,7 +412,7 @@ } void PaymentSheetViewController::FillContentView(views::View* content_view) { - views::GridLayout* layout = new views::GridLayout(content_view); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(content_view); content_view->SetLayoutManager(layout); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 1, @@ -563,8 +562,8 @@ std::unique_ptr<PaymentRequestRowView> PaymentSheetViewController::CreatePaymentSheetSummaryRow() { std::unique_ptr<views::View> inline_summary = base::MakeUnique<views::View>(); - std::unique_ptr<views::GridLayout> layout = - base::MakeUnique<views::GridLayout>(inline_summary.get()); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(inline_summary.get()); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 1, views::GridLayout::USE_PREF, 0, 0); @@ -636,8 +635,6 @@ false, true) .release()); - inline_summary->SetLayoutManager(layout.release()); - PaymentSheetRowBuilder builder( this, l10n_util::GetStringUTF16(IDS_PAYMENTS_ORDER_SUMMARY_LABEL)); builder.Tag(PaymentSheetViewControllerTags::SHOW_ORDER_SUMMARY_BUTTON) @@ -731,7 +728,8 @@ if (selected_instrument) { std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>(); - views::GridLayout* layout = new views::GridLayout(content_view.get()); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(content_view.get()); content_view->SetLayoutManager(layout); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1,
diff --git a/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc b/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc index 997d433..b15420e 100644 --- a/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc +++ b/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc
@@ -208,7 +208,7 @@ provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS); SetBorder(views::CreateEmptyBorder(dialog_insets.top(), 0, dialog_insets.bottom(), 0)); - views::GridLayout* dialog_layout = new views::GridLayout(this); + views::GridLayout* dialog_layout = views::GridLayout::CreateAndInstall(this); SetLayoutManager(dialog_layout); // Use a column set with no padding.
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc index 76f0f4b9..7920a6a2 100644 --- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc +++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -124,8 +124,7 @@ // Creates a GridLayout with a single column. This ensures that all the child // views added get auto-expanded to fill the full width of the bubble. views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) { - views::GridLayout* layout = new views::GridLayout(view); - view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(view); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, @@ -452,8 +451,8 @@ TitleCard* title_card, int width) { views::View* titled_view = new views::View(); - views::GridLayout* layout = new views::GridLayout(titled_view); - titled_view->SetLayoutManager(layout); + views::GridLayout* layout = + views::GridLayout::CreateAndInstall(titled_view); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); const gfx::Insets dialog_insets = @@ -1114,8 +1113,8 @@ // Container for the profile photo and avatar/user name. BackgroundColorHoverButton* current_profile_card = new BackgroundColorHoverButton(this, base::string16()); - views::GridLayout* grid_layout = new views::GridLayout(current_profile_card); - current_profile_card->SetLayoutManager(grid_layout); + views::GridLayout* grid_layout = + views::GridLayout::CreateAndInstall(current_profile_card); views::ColumnSet* columns = grid_layout->AddColumnSet(0); // BackgroundColorHoverButton has already accounted for the left and right // margins.
diff --git a/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc b/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc index 223f1a2..5fc2d8d 100644 --- a/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc +++ b/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc
@@ -94,7 +94,7 @@ // ---------------------------- // | icon | padding | message | // ---------------------------- - std::unique_ptr<views::GridLayout> layout(new views::GridLayout(this)); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 0, views::GridLayout::USE_PREF, 0, 0); @@ -120,7 +120,6 @@ layout->StartRow(0, 0); layout->AddView(warning_icon.release()); layout->AddView(label.release()); - SetLayoutManager(layout.release()); } ProximityAuthErrorBubbleView::~ProximityAuthErrorBubbleView() {}
diff --git a/chrome/browser/ui/views/sad_tab_view.cc b/chrome/browser/ui/views/sad_tab_view.cc index 93e78f2f..493763b6 100644 --- a/chrome/browser/ui/views/sad_tab_view.cc +++ b/chrome/browser/ui/views/sad_tab_view.cc
@@ -55,8 +55,7 @@ SetBackground(views::CreateThemedSolidBackground( this, ui::NativeTheme::kColorId_DialogBackground)); - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); const int column_set_id = 0; views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
diff --git a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc index a85c3dca..21bfc08c 100644 --- a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc +++ b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.cc
@@ -7,6 +7,7 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/browser/ui/views/harmony/chrome_typography.h" #include "components/constrained_window/constrained_window_views.h" #include "components/strings/grit/components_strings.h" @@ -36,8 +37,11 @@ : show_softer_warning_( PasswordProtectionService::ShouldShowSofterWarning()), done_callback_(std::move(done_callback)) { + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); + // TODO(jialiul): Dialog message should align with title. - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, views::GridLayout::FIXED, 400, 0);
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc index 876d5ba..223d5c6 100644 --- a/chrome/browser/ui/views/session_crashed_bubble_view.cc +++ b/chrome/browser/ui/views/session_crashed_bubble_view.cc
@@ -247,7 +247,7 @@ // Create a view to hold the checkbox and the text. views::View* uma_view = new views::View(); - GridLayout* uma_layout = new GridLayout(uma_view); + GridLayout* uma_layout = GridLayout::CreateAndInstall(uma_view); uma_view->SetLayoutManager(uma_layout); const int kReportColumnSetId = 0;
diff --git a/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc b/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc index 3caf029f..1f22a9e 100644 --- a/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc +++ b/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc
@@ -10,6 +10,7 @@ #include "base/logging.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/common/url_constants.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" @@ -74,6 +75,8 @@ advanced_link_(nullptr), learn_more_link_(nullptr) { DCHECK(!start_sync_callback_.is_null()); + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); chrome::RecordDialogCreation(chrome::DialogIdentifier::ONE_CLICK_SIGNIN); } @@ -85,7 +88,7 @@ } void OneClickSigninDialogView::Init() { - views::GridLayout* layout = views::GridLayout::CreatePanel(this); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); // Column set for descriptive text and link. views::ColumnSet* cs = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/sync/one_click_signin_dialog_view_unittest.cc b/chrome/browser/ui/views/sync/one_click_signin_dialog_view_unittest.cc index 0d5284f8..92ef4257 100644 --- a/chrome/browser/ui/views/sync/one_click_signin_dialog_view_unittest.cc +++ b/chrome/browser/ui/views/sync/one_click_signin_dialog_view_unittest.cc
@@ -14,21 +14,21 @@ #include "base/run_loop.h" #include "chrome/browser/ui/sync/one_click_signin_links_delegate.h" #include "chrome/browser/ui/views/chrome_constrained_window_views_client.h" +#include "chrome/test/views/chrome_views_test_base.h" #include "components/constrained_window/constrained_window_views.h" #include "ui/events/event_utils.h" #include "ui/views/controls/button/label_button.h" -#include "ui/views/test/views_test_base.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_observer.h" #include "ui/views/window/dialog_client_view.h" -class OneClickSigninDialogViewTest : public views::ViewsTestBase, +class OneClickSigninDialogViewTest : public ChromeViewsTestBase, public views::WidgetObserver { public: OneClickSigninDialogViewTest() {} void SetUp() override { - views::ViewsTestBase::SetUp(); + ChromeViewsTestBase::SetUp(); SetConstrainedWindowViewsClient(CreateChromeConstrainedWindowViewsClient()); // Create a widget to host the anchor view. @@ -43,7 +43,7 @@ OneClickSigninDialogView::Hide(); anchor_widget_->Close(); anchor_widget_ = NULL; - views::ViewsTestBase::TearDown(); + ChromeViewsTestBase::TearDown(); } protected:
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc index cab51a4..0d3d229d 100644 --- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc +++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "components/constrained_window/constrained_window_views.h" @@ -205,11 +206,14 @@ // insets. SetBorder(views::CreateEmptyBorder(content_insets.top(), 0, content_insets.bottom(), 0)); - views::GridLayout* dialog_layout = new views::GridLayout(this); - SetLayoutManager(dialog_layout); + views::GridLayout* dialog_layout = views::GridLayout::CreateAndInstall(this); // Use GridLayout inside the prompt bar because StyledLabel requires it. - views::GridLayout* prompt_layout = views::GridLayout::CreatePanel(prompt_bar); + views::GridLayout* prompt_layout = + views::GridLayout::CreateAndInstall(prompt_bar); + prompt_bar->SetBorder( + views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS))); constexpr int kPromptBarColumnSetId = 0; prompt_layout->AddColumnSet(kPromptBarColumnSetId) ->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 100,
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view.cc b/chrome/browser/ui/views/translate/translate_bubble_view.cc index e1a0a5f81..1b338b9 100644 --- a/chrome/browser/ui/views/translate/translate_bubble_view.cc +++ b/chrome/browser/ui/views/translate/translate_bubble_view.cc
@@ -544,8 +544,7 @@ } views::View* view = new views::View(); - views::GridLayout* layout = new views::GridLayout(view); - view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(view); using views::GridLayout; @@ -673,8 +672,7 @@ l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING)); views::View* view = new views::View(); - views::GridLayout* layout = new views::GridLayout(view); - view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(view); using views::GridLayout; @@ -725,8 +723,7 @@ l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATED)); views::View* view = new views::View(); - views::GridLayout* layout = new views::GridLayout(view); - view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(view); using views::GridLayout; @@ -776,8 +773,7 @@ l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE)); views::View* view = new views::View(); - views::GridLayout* layout = new views::GridLayout(view); - view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(view); using views::GridLayout; @@ -857,8 +853,7 @@ } views::View* view = new views::View(); - views::GridLayout* layout = new views::GridLayout(view); - view->SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(view); using views::GridLayout;
diff --git a/chrome/browser/ui/views/try_chrome_dialog.cc b/chrome/browser/ui/views/try_chrome_dialog.cc index b4687b02..7b4ce00 100644 --- a/chrome/browser/ui/views/try_chrome_dialog.cc +++ b/chrome/browser/ui/views/try_chrome_dialog.cc
@@ -9,6 +9,7 @@ #include "base/logging.h" #include "base/strings/string16.h" #include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/browser/ui/views/harmony/chrome_typography.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" @@ -156,7 +157,10 @@ views::View* root_view = popup_->GetRootView(); root_view->SetBackground(views::CreateSolidBackground(kBackgroundColor)); - views::GridLayout* layout = views::GridLayout::CreatePanel(root_view); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(root_view); + root_view->SetBorder( + views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS))); layout->set_minimum_size(gfx::Size(kToastWidth, 0)); views::ColumnSet* columns;
diff --git a/chrome/browser/ui/views/uninstall_view.cc b/chrome/browser/ui/views/uninstall_view.cc index 5569240bb..ad6b948 100644 --- a/chrome/browser/ui/views/uninstall_view.cc +++ b/chrome/browser/ui/views/uninstall_view.cc
@@ -30,6 +30,8 @@ browsers_combo_(NULL), user_selection_(*user_selection), quit_closure_(quit_closure) { + set_margins(ChromeLayoutProvider::Get()->GetInsetsMetric( + views::INSETS_DIALOG_CONTENTS)); SetupControls(); } @@ -45,7 +47,7 @@ using views::ColumnSet; using views::GridLayout; - GridLayout* layout = GridLayout::CreatePanel(this); + GridLayout* layout = GridLayout::CreateAndInstall(this); // Message to confirm uninstallation. int column_set_id = 0;
diff --git a/chrome/browser/ui/webui/certificates_handler.cc b/chrome/browser/ui/webui/certificates_handler.cc index 01fa17c..be434e55 100644 --- a/chrome/browser/ui/webui/certificates_handler.cc +++ b/chrome/browser/ui/webui/certificates_handler.cc
@@ -33,6 +33,7 @@ #include "chrome/browser/ui/chrome_select_file_policy.h" #include "chrome/browser/ui/crypto_module_password_dialog_nss.h" #include "chrome/browser/ui/webui/certificate_viewer_webui.h" +#include "chrome/common/net/x509_certificate_model_nss.h" #include "chrome/grit/generated_resources.h" #include "content/public/browser/web_contents.h" #include "net/base/net_errors.h" @@ -1117,8 +1118,8 @@ for (size_t i = 0; i < not_imported.size(); ++i) { const net::NSSCertDatabase::ImportCertFailure& failure = not_imported[i]; std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue); - dict->SetString(kNameField, - failure.certificate->subject().GetDisplayName()); + dict->SetString(kNameField, x509_certificate_model::GetSubjectDisplayName( + failure.certificate.get())); dict->SetString(kErrorField, NetErrorToString(failure.net_error)); cert_error_list->Append(std::move(dict)); }
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index ef0d467..63189a7 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -193,10 +193,6 @@ #include "chrome/browser/ui/webui/app_list/start_page_ui.h" #endif -#if BUILDFLAG(ENABLE_DICE_SUPPORT) -#include "chrome/browser/ui/webui/signin/signin_dice_internals_ui.h" -#endif - #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/extensions/extension_web_ui.h" #include "chrome/browser/ui/webui/extensions/extensions_ui.h" @@ -552,12 +548,6 @@ if (url.host_piece() == chrome::kChromeUIAppListStartPageHost) return &NewWebUI<app_list::StartPageUI>; #endif -#if BUILDFLAG(ENABLE_DICE_SUPPORT) - if (url.host() == chrome::kChromeUISigninDiceInternalsHost && - !profile->IsOffTheRecord() && signin::IsAccountConsistencyDiceEnabled()) { - return &NewWebUI<SigninDiceInternalsUI>; - } -#endif #if BUILDFLAG(ENABLE_EXTENSIONS) if (url.host_piece() == chrome::kChromeUIExtensionsFrameHost) return &NewWebUI<extensions::ExtensionsUI>;
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc index d147c91..67b153f9f 100644 --- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc
@@ -16,6 +16,8 @@ #include "base/sys_info.h" #include "base/task_scheduler/post_task.h" #include "base/threading/thread_task_runner_handle.h" +#include "base/time/default_tick_clock.h" +#include "base/time/tick_clock.h" #include "base/time/time.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/arc/arc_migration_constants.h" @@ -57,6 +59,10 @@ constexpr char kJsApiRequestRestartOnFailure[] = "requestRestartOnFailure"; constexpr char kJsApiOpenFeedbackDialog[] = "openFeedbackDialog"; +// If minimal migration takes this threshold or longer (in seconds), we +// will ask the user to re-enter their password. +constexpr int64_t kMinimalMigrationReenterPasswordThreshold = 45; + // UMA names. constexpr char kUmaNameFirstScreen[] = "Cryptohome.MigrationUI.FirstScreen"; constexpr char kUmaNameUserChoice[] = "Cryptohome.MigrationUI.UserChoice"; @@ -77,6 +83,8 @@ FIRST_SCREEN_LOW_STORAGE = 2, FIRST_SCREEN_ARC_KIOSK = 3, FIRST_SCREEN_START_AUTOMATICALLY = 4, + FIRST_SCREEN_RESUME_MINIMAL = 5, + FIRST_SCREEN_START_AUTOMATICALLY_MINIMAL = 6, FIRST_SCREEN_COUNT }; @@ -228,8 +236,12 @@ return FirstScreen::FIRST_SCREEN_READY; case chromeos::EncryptionMigrationMode::START_MIGRATION: return FirstScreen::FIRST_SCREEN_START_AUTOMATICALLY; + case chromeos::EncryptionMigrationMode::START_MINIMAL_MIGRATION: + return FirstScreen::FIRST_SCREEN_START_AUTOMATICALLY_MINIMAL; case chromeos::EncryptionMigrationMode::RESUME_MIGRATION: return FirstScreen::FIRST_SCREEN_RESUME; + case chromeos::EncryptionMigrationMode::RESUME_MINIMAL_MIGRATION: + return FirstScreen::FIRST_SCREEN_RESUME_MINIMAL; default: NOTREACHED(); } @@ -240,8 +252,12 @@ namespace chromeos { EncryptionMigrationScreenHandler::EncryptionMigrationScreenHandler() - : BaseScreenHandler(kScreenId), weak_ptr_factory_(this) { + : BaseScreenHandler(kScreenId), + tick_clock_(base::MakeUnique<base::DefaultTickClock>()), + weak_ptr_factory_(this) { set_call_js_prefix(kJsScreenPath); + free_disk_space_fetcher_ = base::Bind(&base::SysInfo::AmountOfFreeDiskSpace, + base::FilePath(kCheckStoragePath)); } EncryptionMigrationScreenHandler::~EncryptionMigrationScreenHandler() { @@ -283,6 +299,11 @@ continue_login_callback_ = std::move(callback); } +void EncryptionMigrationScreenHandler::SetRestartLoginCallback( + RestartLoginCallback callback) { + restart_login_callback_ = std::move(callback); +} + void EncryptionMigrationScreenHandler::SetupInitialView() { // If old encryption is detected in ARC kiosk mode, skip all checks (user // confirmation, battery level, and remaining space) and start migration @@ -340,6 +361,7 @@ IDS_ENCRYPTION_MIGRATION_BUTTON_CONTINUE); builder->Add("migrationButtonSignIn", IDS_ENCRYPTION_MIGRATION_BUTTON_SIGNIN); builder->Add("migrationButtonReportAnIssue", IDS_REPORT_AN_ISSUE); + builder->Add("gaiaLoading", IDS_LOGIN_GAIA_LOADING_MESSAGE); } void EncryptionMigrationScreenHandler::Initialize() { @@ -352,6 +374,16 @@ } } +void EncryptionMigrationScreenHandler::SetFreeDiskSpaceFetcherForTesting( + FreeDiskSpaceFetcher free_disk_space_fetcher) { + free_disk_space_fetcher_ = std::move(free_disk_space_fetcher); +} + +void EncryptionMigrationScreenHandler::SetTickClockForTesting( + std::unique_ptr<base::TickClock> tick_clock) { + tick_clock_ = std::move(tick_clock); +} + void EncryptionMigrationScreenHandler::RegisterMessages() { AddCallback(kJsApiStartMigration, &EncryptionMigrationScreenHandler::HandleStartMigration); @@ -372,8 +404,12 @@ if (!current_battery_percent_) { // If initial battery level is below the minimum, migration should start // automatically once the device is charged enough. - if (proto.battery_percent() < arc::kMigrationMinimumBatteryPercent) + if (proto.battery_percent() < arc::kMigrationMinimumBatteryPercent) { should_migrate_on_enough_battery_ = true; + // If migration was forced by policy, stop forcing it (we don't want the + // user to have to wait until the battery is charged). + MaybeStopForcingMigration(); + } } current_battery_percent_ = proto.battery_percent(); } else { @@ -448,7 +484,7 @@ // We should request wake lock and not shut down on lid close during // migration. - if (state == UIState::MIGRATING) { + if (state == UIState::MIGRATING || state == UIState::MIGRATING_MINIMAL) { GetWakeLock()->RequestWakeLock(); PowerPolicyController::Get()->SetEncryptionMigrationActive(true); } else { @@ -470,8 +506,7 @@ void EncryptionMigrationScreenHandler::CheckAvailableStorage() { base::PostTaskWithTraitsAndReplyWithResult( FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE}, - base::Bind(&base::SysInfo::AmountOfFreeDiskSpace, - base::FilePath(kCheckStoragePath)), + free_disk_space_fetcher_, base::Bind(&EncryptionMigrationScreenHandler::OnGetAvailableStorage, weak_ptr_factory_.GetWeakPtr())); } @@ -480,7 +515,10 @@ if (size >= arc::kMigrationMinimumAvailableStorage || IsTestingUI()) { RecordFirstScreen(GetFirstScreenForMode(mode_)); if (IsStartImmediately()) { - WaitBatteryAndMigrate(); + if (IsMinimalMigration()) + StartMigration(); + else + WaitBatteryAndMigrate(); } else { UpdateUIState(UIState::READY); } @@ -494,10 +532,15 @@ } void EncryptionMigrationScreenHandler::WaitBatteryAndMigrate() { - if (current_battery_percent_ && - *current_battery_percent_ >= arc::kMigrationMinimumBatteryPercent) { - StartMigration(); - return; + if (current_battery_percent_) { + if (*current_battery_percent_ >= arc::kMigrationMinimumBatteryPercent) { + StartMigration(); + return; + } else { + // If migration was forced by policy, stop forcing it (we don't want the + // user to have to wait until the battery is charged). + MaybeStopForcingMigration(); + } } UpdateUIState(UIState::READY); @@ -506,8 +549,9 @@ } void EncryptionMigrationScreenHandler::StartMigration() { - UpdateUIState(UIState::MIGRATING); - initial_battery_percent_ = *current_battery_percent_; + UpdateUIState(GetMigratingUIState()); + if (current_battery_percent_) + initial_battery_percent_ = *current_battery_percent_; // Mount the existing eCryptfs vault to a temporary location for migration. cryptohome::MountRequest mount; @@ -540,6 +584,11 @@ return; } + // For minimal migration, start a timer which will measure how long migration + // took, so we can require a re sign-in if it took too long. + if (IsMinimalMigration()) + minimal_migration_start_ = tick_clock_->NowTicks(); + DBusThreadManager::Get() ->GetCryptohomeClient() ->SetDircryptoMigrationProgressHandler( @@ -547,6 +596,7 @@ weak_ptr_factory_.GetWeakPtr())); cryptohome::HomedirMethods::GetInstance()->MigrateToDircrypto( cryptohome::Identification(user_context_.GetAccountId()), + IsMinimalMigration(), base::Bind(&EncryptionMigrationScreenHandler::OnMigrationRequested, weak_ptr_factory_.GetWeakPtr())); } @@ -630,10 +680,10 @@ uint64_t total) { switch (status) { case cryptohome::DIRCRYPTO_MIGRATION_INITIALIZING: - UpdateUIState(UIState::MIGRATING); + UpdateUIState(GetMigratingUIState()); break; case cryptohome::DIRCRYPTO_MIGRATION_IN_PROGRESS: - UpdateUIState(UIState::MIGRATING); + UpdateUIState(GetMigratingUIState()); CallJS("setMigrationProgress", static_cast<double>(current) / total); break; case cryptohome::DIRCRYPTO_MIGRATION_SUCCESS: @@ -641,14 +691,33 @@ IsArcKiosk()); // If the battery level decreased during migration, record the consumed // battery level. - if (*current_battery_percent_ < initial_battery_percent_) { + if (current_battery_percent_ && + *current_battery_percent_ < initial_battery_percent_) { UMA_HISTOGRAM_PERCENTAGE( kUmaNameConsumedBatteryPercent, static_cast<int>(std::round(initial_battery_percent_ - *current_battery_percent_))); } - // Restart immediately after successful migration. - DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); + if (IsMinimalMigration() && !continue_login_callback_.is_null() && + !restart_login_callback_.is_null()) { + GetWakeLock()->CancelWakeLock(); + PowerPolicyController::Get()->SetEncryptionMigrationActive(false); + // If minimal migration was fast enough, continue with same sign-in + // data. Fast enough means that the elapsed time is under the defined + // threshold. + const base::TimeDelta elapsed_time = + tick_clock_->NowTicks() - minimal_migration_start_; + const bool require_password_reentry = + elapsed_time.InSeconds() > + kMinimalMigrationReenterPasswordThreshold; + if (require_password_reentry) + std::move(restart_login_callback_).Run(user_context_); + else + std::move(continue_login_callback_).Run(user_context_); + } else { + // Restart immediately after successful full migration. + DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); + } break; case cryptohome::DIRCRYPTO_MIGRATION_FAILED: RecordMigrationResultGeneralFailure(IsResumingIncompleteMigration(), @@ -685,13 +754,34 @@ UMA_HISTOGRAM_ENUMERATION(kUmaNameVisibleScreen, ui_state, UIState::COUNT); } -bool EncryptionMigrationScreenHandler::IsResumingIncompleteMigration() { +bool EncryptionMigrationScreenHandler::IsResumingIncompleteMigration() const { return mode_ == EncryptionMigrationMode::RESUME_MIGRATION; } -bool EncryptionMigrationScreenHandler::IsStartImmediately() { +bool EncryptionMigrationScreenHandler::IsStartImmediately() const { return mode_ == EncryptionMigrationMode::START_MIGRATION || - mode_ == EncryptionMigrationMode::RESUME_MIGRATION; + mode_ == EncryptionMigrationMode::START_MINIMAL_MIGRATION || + mode_ == EncryptionMigrationMode::RESUME_MIGRATION || + mode_ == EncryptionMigrationMode::RESUME_MINIMAL_MIGRATION; +} + +bool EncryptionMigrationScreenHandler::IsMinimalMigration() const { + return mode_ == EncryptionMigrationMode::START_MINIMAL_MIGRATION || + mode_ == EncryptionMigrationMode::RESUME_MINIMAL_MIGRATION; +} + +EncryptionMigrationScreenHandler::UIState +EncryptionMigrationScreenHandler::GetMigratingUIState() const { + return IsMinimalMigration() ? UIState::MIGRATING_MINIMAL : UIState::MIGRATING; +} + +void EncryptionMigrationScreenHandler::MaybeStopForcingMigration() { + // |mode_| will be START_MIGRATION if migration was forced by user policy. + // If an incomplete migration is being resumed, it would be RESUME_MIGRATION. + // We only want to disable auto-starting migration in the first case. + if (mode_ == EncryptionMigrationMode::START_MIGRATION || + mode_ == EncryptionMigrationMode::START_MINIMAL_MIGRATION) + CallJS("setIsResuming", false); } } // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h index 1428565..10371ba 100644 --- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h
@@ -7,6 +7,7 @@ #include <memory> +#include "base/callback_forward.h" #include "base/macros.h" #include "base/optional.h" #include "chrome/browser/chromeos/login/screens/encryption_migration_mode.h" @@ -18,6 +19,11 @@ #include "services/device/public/interfaces/wake_lock.mojom.h" #include "third_party/cros_system_api/dbus/cryptohome/dbus-constants.h" +namespace base { +class TickClock; +class TimeTicks; +} // namespace base + namespace chromeos { class LoginFeedback; @@ -37,6 +43,7 @@ void SetUserContext(const UserContext& user_context) override; void SetMode(EncryptionMigrationMode mode) override; void SetContinueLoginCallback(ContinueLoginCallback callback) override; + void SetRestartLoginCallback(RestartLoginCallback callback) override; void SetupInitialView() override; // BaseScreenHandler implementation: @@ -44,6 +51,19 @@ ::login::LocalizedValuesBuilder* builder) override; void Initialize() override; + protected: + // Callback that can be used to check free disk space. + using FreeDiskSpaceFetcher = base::RepeatingCallback<int64_t()>; + + // Testing only: Sets the free disk space fetcher. + void SetFreeDiskSpaceFetcherForTesting( + FreeDiskSpaceFetcher free_disk_space_fetcher); + // Testing only: Sets the tick clock used to measure elapsed time during + // migration. + void SetTickClockForTesting(std::unique_ptr<base::TickClock> tick_clock); + + virtual device::mojom::WakeLock* GetWakeLock(); + private: // Enumeration for migration UI state. These values must be kept in sync with // EncryptionMigrationUIState in JS code, and match the numbering for @@ -55,6 +75,7 @@ MIGRATING = 2, MIGRATION_FAILED = 3, NOT_ENOUGH_STORAGE = 4, + MIGRATING_MINIMAL = 5, COUNT }; @@ -101,12 +122,21 @@ void OnDelayedRecordVisibleScreen(UIState state); // True if |mode_| suggests that we are resuming an incomplete migration. - bool IsResumingIncompleteMigration(); + bool IsResumingIncompleteMigration() const; // True if |mode_| suggests that migration should start immediately. - bool IsStartImmediately(); + bool IsStartImmediately() const; - device::mojom::WakeLock* GetWakeLock(); + // True if |mode_| suggests that we are starting or resuming a minimal + // migration. + bool IsMinimalMigration() const; + + // Returns the UIState we should be in when migration is in progress. + // This will be different between regular and minimal migration. + UIState GetMigratingUIState() const; + + // Stop forcing migration if it was forced by policy. + void MaybeStopForcingMigration(); Delegate* delegate_ = nullptr; bool show_on_init_ = false; @@ -121,6 +151,9 @@ // The callback which is used to log in to the session from the migration UI. ContinueLoginCallback continue_login_callback_; + // The callback which is used to require the user to re-enter their password. + RestartLoginCallback restart_login_callback_; + // The migration mode (ask user / start migration automatically / resume // incomplete migratoin). EncryptionMigrationMode mode_ = EncryptionMigrationMode::ASK_USER; @@ -135,10 +168,18 @@ // The battery level at the timing that the migration starts. double initial_battery_percent_ = 0.0; + // Point in time when minimal migration started, as reported by |tick_clock_|. + base::TimeTicks minimal_migration_start_; + device::mojom::WakeLockPtr wake_lock_; std::unique_ptr<LoginFeedback> login_feedback_; + // Used to measure elapsed time during migration. + std::unique_ptr<base::TickClock> tick_clock_; + + FreeDiskSpaceFetcher free_disk_space_fetcher_; + base::WeakPtrFactory<EncryptionMigrationScreenHandler> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(EncryptionMigrationScreenHandler);
diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc new file mode 100644 index 0000000..2f8a6026 --- /dev/null +++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler_unittest.cc
@@ -0,0 +1,357 @@ +// 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 <memory> +#include <utility> + +#include "base/bind.h" +#include "base/memory/ptr_util.h" +#include "base/test/scoped_task_environment.h" +#include "base/test/simple_test_tick_clock.h" +#include "chrome/browser/chromeos/arc/arc_migration_constants.h" +#include "chrome/browser/chromeos/login/screens/encryption_migration_mode.h" +#include "chrome/browser/chromeos/login/users/mock_user_manager.h" +#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" +#include "chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h" +#include "chromeos/cryptohome/homedir_methods.h" +#include "chromeos/cryptohome/mock_async_method_caller.h" +#include "chromeos/cryptohome/mock_homedir_methods.h" +#include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/fake_cryptohome_client.h" +#include "chromeos/dbus/fake_power_manager_client.h" +#include "chromeos/dbus/power_policy_controller.h" +#include "chromeos/login/auth/key.h" +#include "chromeos/login/auth/user_context.h" +#include "components/signin/core/account_id/account_id.h" +#include "components/user_manager/user_names.h" +#include "content/public/test/test_web_ui.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::Invoke; +using ::testing::Mock; +using ::testing::NiceMock; +using ::testing::WithArgs; +using ::testing::_; + +namespace chromeos { +namespace { + +// Fake WakeLock implementation, required by EncryptionMigrationScreenHandler. +class FakeWakeLock : public device::mojom::WakeLock { + public: + FakeWakeLock() {} + ~FakeWakeLock() override {} + + // Implement device::mojom::WakeLock: + void RequestWakeLock() override { has_wakelock_ = true; } + void CancelWakeLock() override { has_wakelock_ = false; } + void AddClient(device::mojom::WakeLockRequest request) override {} + void ChangeType(device::mojom::WakeLockType type, + ChangeTypeCallback callback) override { + NOTIMPLEMENTED(); + } + void HasWakeLockForTests(HasWakeLockForTestsCallback callback) override { + std::move(callback).Run(has_wakelock_); + } + + bool HasWakeLock() { return has_wakelock_; } + + private: + bool has_wakelock_ = false; +}; + +// Allows access to testing-only methods of EncryptionMigrationScreenHandler. +class TestEncryptionMigrationScreenHandler + : public EncryptionMigrationScreenHandler { + public: + TestEncryptionMigrationScreenHandler() { + SetFreeDiskSpaceFetcherForTesting(base::BindRepeating( + &TestEncryptionMigrationScreenHandler::FreeDiskSpaceFetcher, + base::Unretained(this))); + auto tick_clock = base::MakeUnique<base::SimpleTestTickClock>(); + testing_tick_clock_ = tick_clock.get(); + SetTickClockForTesting(std::move(tick_clock)); + } + + // Sets the testing WebUI. + void set_test_web_ui(content::TestWebUI* test_web_ui) { + set_web_ui(test_web_ui); + } + + // Sets the free disk space seen by EncryptionMigrationScreenHandler. + void set_free_disk_space(int64_t free_disk_space) { + free_disk_space_ = free_disk_space; + } + + // Returns the SimpleTestTickClock used to simulate time elapsed during + // migration. + base::SimpleTestTickClock* testing_tick_clock() { + return testing_tick_clock_; + } + + FakeWakeLock* fake_wake_lock() { return &fake_wake_lock_; } + + protected: + // Override GetWakeLock -- returns our own FakeWakeLock. + device::mojom::WakeLock* GetWakeLock() override { return &fake_wake_lock_; } + + private: + // Used as free disk space fetcher callback. + int64_t FreeDiskSpaceFetcher() { return free_disk_space_; } + + FakeWakeLock fake_wake_lock_; + + // Non-owned pointer. Tick clock used to simulate time elapsed during + // migration. This is actually owned by the base class. + base::SimpleTestTickClock* testing_tick_clock_; + + int64_t free_disk_space_; +}; + +class EncryptionMigrationScreenHandlerTest : public testing::Test { + public: + EncryptionMigrationScreenHandlerTest() = default; + ~EncryptionMigrationScreenHandlerTest() override = default; + + void SetUp() override { + // Set up a MockUserManager. + MockUserManager* mock_user_manager = new NiceMock<MockUserManager>(); + scoped_user_manager_enabler_ = + base::MakeUnique<ScopedUserManagerEnabler>(mock_user_manager); + + // This is used by EncryptionMigrationScreenHandler to mount the existing + // cryptohome. Ownership of mock_homedir_methods_ is transferred to + // HomedirMethods::InitializeForTesting. + mock_homedir_methods_ = new cryptohome::MockHomedirMethods; + cryptohome::HomedirMethods::InitializeForTesting(mock_homedir_methods_); + + // This is used by EncryptionMigrationScreenHandler to remove the existing + // cryptohome. Ownership of mock_async_method_caller_ is transferred to + // AsyncMethodCaller::InitializeForTesting. + mock_async_method_caller_ = new cryptohome::MockAsyncMethodCaller; + cryptohome::AsyncMethodCaller::InitializeForTesting( + mock_async_method_caller_); + + // Set up fake DBusThreadManager parts. + auto fake_cryptohome_client = base::MakeUnique<FakeCryptohomeClient>(); + fake_cryptohome_client_ = fake_cryptohome_client.get(); + DBusThreadManager::GetSetterForTesting()->SetCryptohomeClient( + std::move(fake_cryptohome_client)); + + DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient( + base::MakeUnique<FakePowerManagerClient>()); + + DBusThreadManager::Initialize(); + + PowerPolicyController::Initialize( + DBusThreadManager::Get()->GetPowerManagerClient()); + + // Build dummy user context. + user_context_.SetAccountId(account_id_); + user_context_.SetKey( + Key(Key::KeyType::KEY_TYPE_SALTED_SHA256, "salt", "secret")); + + encryption_migration_screen_handler_ = + base::MakeUnique<TestEncryptionMigrationScreenHandler>(); + encryption_migration_screen_handler_->set_test_web_ui(&test_web_ui_); + encryption_migration_screen_handler_->SetContinueLoginCallback( + base::BindOnce(&EncryptionMigrationScreenHandlerTest::OnContinueLogin, + base::Unretained(this))); + encryption_migration_screen_handler_->SetRestartLoginCallback( + base::BindOnce(&EncryptionMigrationScreenHandlerTest::OnRestartLogin, + base::Unretained(this))); + encryption_migration_screen_handler_->set_free_disk_space( + arc::kMigrationMinimumAvailableStorage); + encryption_migration_screen_handler_->SetUserContext(user_context_); + } + + void TearDown() override { + encryption_migration_screen_handler_.reset(); + + PowerPolicyController::Shutdown(); + DBusThreadManager::Shutdown(); + cryptohome::AsyncMethodCaller::Shutdown(); + cryptohome::HomedirMethods::Shutdown(); + } + + // Sets up expectation that the existing user home will be mounted for + // migration using |mock_homedir_methods_|. + void ExpectMountExistingVault(cryptohome::MountError mount_error) { + EXPECT_CALL( + *mock_homedir_methods_, + MountEx(cryptohome::Identification( + user_context_.GetAccountId()) /* 0: id */, + _ /* 1: auth */, _ /* 2: request */, _ /* 3: callback */)) + .WillOnce(WithArgs<2, 3>(Invoke( + [mount_error](const cryptohome::MountRequest& mount_request, + cryptohome::HomedirMethods::MountCallback callback) { + // Expect that the migration flag is set. + EXPECT_TRUE(mount_request.to_migrate_from_ecryptfs()); + callback.Run(true /* success */, mount_error, + std::string() /* mount_hash */); + }))); + } + + // Sets up expectation that migration will be started on + // |mock_homedir_methods_|. If |expect_minimal_migration| is true, verifies + // that minimal migration has been requested. + void ExpectStartMigration(bool expect_minimal_migration) { + EXPECT_CALL( + *mock_homedir_methods_, + MigrateToDircrypto(cryptohome::Identification( + user_context_.GetAccountId()) /* 0: id */, + _ /* 1: minimal_migration*/, _ /* 2: callback */)) + .WillOnce(WithArgs<1, 2>( + Invoke([expect_minimal_migration]( + bool minimal_migration, + const cryptohome::HomedirMethods::DBusResultCallback& + callback) { + EXPECT_EQ(expect_minimal_migration, minimal_migration); + // Call the callback immediately - actual result is sent later + // using DircryptoMigrationProgressHandler. + callback.Run(true /* success */); + }))); + } + + protected: + // Must be the first member. + base::test::ScopedTaskEnvironment scoped_task_environment_; + + std::unique_ptr<ScopedUserManagerEnabler> scoped_user_manager_enabler_; + cryptohome::MockHomedirMethods* mock_homedir_methods_ = nullptr; + FakeCryptohomeClient* fake_cryptohome_client_ = nullptr; + cryptohome::MockAsyncMethodCaller* mock_async_method_caller_ = nullptr; + std::unique_ptr<TestEncryptionMigrationScreenHandler> + encryption_migration_screen_handler_; + content::TestWebUI test_web_ui_; + + // Will be set to true in ContinueLogin. + bool continue_login_callback_called_ = false; + // Will be set to true in RestartLogin. + bool restart_login_callback_called_ = false; + + const AccountId account_id_ = + AccountId::FromUserEmail(user_manager::kStubUserEmail); + UserContext user_context_; + + private: + // This will be called by EncryptionMigrationScreenHandler upon finished + // minimal migration when sign-in should continue. + void OnContinueLogin(const UserContext& user_context) { + EXPECT_FALSE(continue_login_callback_called_) + << "ContinueLogin/RestartLogin may only be called once."; + EXPECT_FALSE(restart_login_callback_called_) + << "ContinueLogin/RestartLogin may only be called once."; + + continue_login_callback_called_ = true; + } + + // This will be called by EncryptionMigrationScreenHandler upon finished + // minimal migration when the user should re-enter their password. + void OnRestartLogin(const UserContext& user_context) { + EXPECT_FALSE(continue_login_callback_called_) + << "ContinueLogin/RestartLogin may only be called once."; + EXPECT_FALSE(restart_login_callback_called_) + << "ContinueLogin/RestartLogin may only be called once."; + + restart_login_callback_called_ = true; + } +}; + +} // namespace + +// Tests handling of a minimal migration run that finishes immediately. +TEST_F(EncryptionMigrationScreenHandlerTest, MinimalMigration) { + ExpectMountExistingVault(cryptohome::MountError::MOUNT_ERROR_NONE); + ExpectStartMigration(true /* minimal_migration */); + encryption_migration_screen_handler_->SetMode( + EncryptionMigrationMode::START_MINIMAL_MIGRATION); + encryption_migration_screen_handler_->SetupInitialView(); + + scoped_task_environment_.RunUntilIdle(); + + Mock::VerifyAndClearExpectations(mock_homedir_methods_); + + EXPECT_TRUE( + encryption_migration_screen_handler_->fake_wake_lock()->HasWakeLock()); + fake_cryptohome_client_->dircrypto_migration_progress_handler().Run( + cryptohome::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_SUCCESS, + 0 /* current */, 0 /* total */); + + EXPECT_TRUE(continue_login_callback_called_); + EXPECT_FALSE( + encryption_migration_screen_handler_->fake_wake_lock()->HasWakeLock()); +} + +// Tests handling of a resumed minimal migration run. This should behave the +// same way that a freshly started minimal migration does (only UMA stats are +// different, but we don't test that at the moment). +TEST_F(EncryptionMigrationScreenHandlerTest, ResumeMinimalMigration) { + ExpectMountExistingVault(cryptohome::MountError::MOUNT_ERROR_NONE); + ExpectStartMigration(true /* minimal_migration */); + encryption_migration_screen_handler_->SetMode( + EncryptionMigrationMode::RESUME_MINIMAL_MIGRATION); + encryption_migration_screen_handler_->SetupInitialView(); + + scoped_task_environment_.RunUntilIdle(); + + Mock::VerifyAndClearExpectations(mock_homedir_methods_); + + fake_cryptohome_client_->dircrypto_migration_progress_handler().Run( + cryptohome::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_SUCCESS, + 0 /* current */, 0 /* total */); + + EXPECT_TRUE(continue_login_callback_called_); +} + +// Tests handling of a minimal migration run that takes a long time to finish. +// We expect that EncryptionMigrationScreenHandler will require the user to +// re-enter their password. +TEST_F(EncryptionMigrationScreenHandlerTest, MinimalMigrationSlow) { + ExpectMountExistingVault(cryptohome::MountError::MOUNT_ERROR_NONE); + ExpectStartMigration(true /* minimal_migration */); + encryption_migration_screen_handler_->SetMode( + EncryptionMigrationMode::START_MINIMAL_MIGRATION); + encryption_migration_screen_handler_->SetupInitialView(); + + scoped_task_environment_.RunUntilIdle(); + + Mock::VerifyAndClearExpectations(mock_homedir_methods_); + + encryption_migration_screen_handler_->testing_tick_clock()->Advance( + base::TimeDelta::FromMinutes(1)); + fake_cryptohome_client_->dircrypto_migration_progress_handler().Run( + cryptohome::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_SUCCESS, + 0 /* current */, 0 /* total */); + + EXPECT_TRUE(restart_login_callback_called_); +} + +// Tests handling of a minimal migration run that fails. +TEST_F(EncryptionMigrationScreenHandlerTest, MinimalMigrationFails) { + ExpectMountExistingVault(cryptohome::MountError::MOUNT_ERROR_NONE); + ExpectStartMigration(true /* minimal_migration */); + encryption_migration_screen_handler_->SetMode( + EncryptionMigrationMode::START_MINIMAL_MIGRATION); + encryption_migration_screen_handler_->SetupInitialView(); + + scoped_task_environment_.RunUntilIdle(); + + Mock::VerifyAndClearExpectations(mock_homedir_methods_); + + EXPECT_CALL( + *mock_async_method_caller_, + AsyncRemove(cryptohome::Identification(user_context_.GetAccountId()), + _ /* callback */)); + encryption_migration_screen_handler_->testing_tick_clock()->Advance( + base::TimeDelta::FromMinutes(1)); + fake_cryptohome_client_->dircrypto_migration_progress_handler().Run( + cryptohome::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_FAILED, + 0 /* current */, 0 /* total */); + + Mock::VerifyAndClearExpectations(mock_async_method_caller_); +} + +} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc index a1ca651..cec38d8 100644 --- a/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc
@@ -34,6 +34,7 @@ ::login::LocalizedValuesBuilder* builder) { builder->Add("checkingForUpdatesMsg", IDS_CHECKING_FOR_UPDATE_MSG); builder->Add("installingUpdateDesc", IDS_UPDATE_MSG); + builder->Add("updateCompeletedMsg", IDS_UPDATE_COMPLETED); builder->Add("updateScreenTitle", IDS_UPDATE_SCREEN_TITLE); builder->Add("updateScreenAccessibleTitle", IDS_UPDATE_SCREEN_ACCESSIBLE_TITLE);
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc index 8d6387c7..d0afce3 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -10,6 +10,8 @@ #include "base/test/histogram_tester.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/test_extension_system.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" @@ -669,6 +671,12 @@ window2_ = base::WrapUnique(CreateBrowserWindow()); browser2_ = base::WrapUnique( CreateBrowser(profile(), browser()->type(), false, window2_.get())); + + extensions::TestExtensionSystem* extension_system = + static_cast<extensions::TestExtensionSystem*>( + extensions::ExtensionSystem::Get(profile())); + extension_system->CreateExtensionService( + base::CommandLine::ForCurrentProcess(), base::FilePath(), false); } void TearDown() override { @@ -721,11 +729,18 @@ const GURL origin_anchor(origin_anchor_string); const GURL chrome("chrome://about"); const GURL origin("https://www.example.com/"); - const GURL extension("chrome-extension://fooextension/bar.html"); + const GURL extension( + "chrome-extension://fooooooooooooooooooooooooooooooo/bar.html"); + // Make sure |extension|'s extension ID exists before navigating to it. This // fixes a test timeout that occurs with --enable-browser-side-navigation on. - ASSERT_TRUE(extensions::ExtensionRegistry::Get(profile())->AddEnabled( - extensions::ExtensionBuilder("Test").SetID("fooextension").Build())); + scoped_refptr<const extensions::Extension> test_extension = + extensions::ExtensionBuilder("Test") + .SetID("fooooooooooooooooooooooooooooooo") + .Build(); + extensions::ExtensionSystem::Get(profile()) + ->extension_service() + ->AddExtension(test_extension.get()); // __________ ______________ ___________________ _______ // Window 2: / insecure '/ origin_query \' example_subdomain \' about \
diff --git a/chrome/browser/ui/webui/signin/signin_dice_internals_ui.cc b/chrome/browser/ui/webui/signin/signin_dice_internals_ui.cc deleted file mode 100644 index 5b936a2..0000000 --- a/chrome/browser/ui/webui/signin/signin_dice_internals_ui.cc +++ /dev/null
@@ -1,31 +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 "chrome/browser/ui/webui/signin/signin_dice_internals_ui.h" - -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/webui/signin/signin_dice_internals_handler.h" -#include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" -#include "components/grit/components_resources.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_data_source.h" - -SigninDiceInternalsUI::SigninDiceInternalsUI(content::WebUI* web_ui) - : WebUIController(web_ui) { - Profile* profile = Profile::FromWebUI(web_ui); - DCHECK(!profile->IsOffTheRecord()); - - content::WebUIDataSource* source = content::WebUIDataSource::Create( - chrome::kChromeUISigninDiceInternalsHost); - source->AddResourcePath("signin_dice_internals.js", - IDR_SIGNIN_DICE_INTERNALS_JS); - source->SetDefaultResource(IDR_SIGNIN_DICE_INTERNALS_HTML); - content::WebUIDataSource::Add(profile, source); - - web_ui->AddMessageHandler( - base::MakeUnique<SigninDiceInternalsHandler>(profile)); -} - -SigninDiceInternalsUI::~SigninDiceInternalsUI() {}
diff --git a/chrome/browser/ui/webui/signin/signin_dice_internals_ui.h b/chrome/browser/ui/webui/signin/signin_dice_internals_ui.h deleted file mode 100644 index 106f9506..0000000 --- a/chrome/browser/ui/webui/signin/signin_dice_internals_ui.h +++ /dev/null
@@ -1,21 +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 CHROME_BROWSER_UI_WEBUI_SIGNIN_SIGNIN_DICE_INTERNALS_UI_H_ -#define CHROME_BROWSER_UI_WEBUI_SIGNIN_SIGNIN_DICE_INTERNALS_UI_H_ - -#include "base/macros.h" -#include "content/public/browser/web_ui_controller.h" - -// The implementation for the chrome://signin-dice-internals page. -class SigninDiceInternalsUI : public content::WebUIController { - public: - explicit SigninDiceInternalsUI(content::WebUI* web_ui); - ~SigninDiceInternalsUI() override; - - private: - DISALLOW_COPY_AND_ASSIGN(SigninDiceInternalsUI); -}; - -#endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_SIGNIN_DICE_INTERNALS_UI_H_
diff --git a/chrome/browser/ui/webui/signin_internals_ui.cc b/chrome/browser/ui/webui/signin_internals_ui.cc index 94bc931..dc95d86 100644 --- a/chrome/browser/ui/webui/signin_internals_ui.cc +++ b/chrome/browser/ui/webui/signin_internals_ui.cc
@@ -12,10 +12,12 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/about_signin_internals_factory.h" #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h" +#include "chrome/browser/ui/webui/signin/signin_dice_internals_handler.h" #include "chrome/common/url_constants.h" #include "components/grit/components_resources.h" #include "components/signin/core/browser/about_signin_internals.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" +#include "components/signin/core/common/profile_management_switches.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" @@ -43,6 +45,12 @@ AboutSigninInternalsFactory::GetForProfile(profile); if (about_signin_internals) about_signin_internals->AddSigninObserver(this); +#if BUILDFLAG(ENABLE_DICE_SUPPORT) + if (signin::IsAccountConsistencyDiceEnabled()) { + web_ui->AddMessageHandler( + base::MakeUnique<SigninDiceInternalsHandler>(profile)); + } +#endif } }
diff --git a/chrome/browser/vr/color_scheme.cc b/chrome/browser/vr/color_scheme.cc index c3e7f882..2ff3358 100644 --- a/chrome/browser/vr/color_scheme.cc +++ b/chrome/browser/vr/color_scheme.cc
@@ -37,10 +37,8 @@ normal_scheme.loading_indicator_background = 0xFF454545; normal_scheme.exit_warning_foreground = SK_ColorWHITE; normal_scheme.exit_warning_background = 0xCC1A1A1A; - normal_scheme.transient_warning_foreground = - normal_scheme.exit_warning_foreground; - normal_scheme.transient_warning_background = - normal_scheme.exit_warning_background; + normal_scheme.transient_warning_foreground = 0xFFF3F3F3; + normal_scheme.transient_warning_background = SK_ColorBLACK; normal_scheme.exclusive_screen_toast_foreground = 0xCCFFFFFF; normal_scheme.exclusive_screen_toast_background = 0xCC2F2F2F;
diff --git a/chrome/browser/vr/elements/webvr_url_toast_texture.cc b/chrome/browser/vr/elements/webvr_url_toast_texture.cc index c611262..8201e488 100644 --- a/chrome/browser/vr/elements/webvr_url_toast_texture.cc +++ b/chrome/browser/vr/elements/webvr_url_toast_texture.cc
@@ -12,19 +12,21 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/render_text.h" #include "ui/gfx/text_constants.h" +#include "ui/gfx/text_elider.h" #include "url/gurl.h" namespace vr { namespace { -static constexpr float kWidth = 0.572; -static constexpr float kHeight = 0.088; +static constexpr float kWidth = 0.472; +static constexpr float kHeight = 0.064; static constexpr float kFontHeight = 0.027; -static constexpr float kSecurityIconFieldWidth = 0.058; +static constexpr float kSecurityIconOffsetLeft = 0.022; +static constexpr float kSecurityIconOffsetRight = 0.016; static constexpr float kSecurityIconSize = 0.03; static constexpr float kUrlRightMargin = 0.02; -static constexpr float kRadiusFactor = 0.055; +static constexpr float kRadius = 0.004; } // namespace @@ -57,13 +59,12 @@ size_.set_width(texture_size.width()); // Draw background. - float radius = size_.height() * kRadiusFactor; SkPaint paint; paint.setColor(color_scheme().transient_warning_background); paint.setAlpha(255); canvas->drawRoundRect( - SkRect::MakeXYWH(0, 0, ToPixels(kWidth), ToPixels(kHeight)), radius, - radius, paint); + SkRect::MakeXYWH(0, 0, ToPixels(kWidth), ToPixels(kHeight)), + ToPixels(kRadius), ToPixels(kRadius), paint); // Make a gfx canvas to support utility drawing methods. cc::SkiaPaintCanvas paint_canvas(canvas); @@ -72,12 +73,10 @@ // Site security state icon. if ((state_.security_level != security_state::NONE || state_.offline_page) && state_.vector_icon != nullptr && state_.should_display_url) { - gfx::RectF icon_region(kSecurityIconFieldWidth / 2 - kSecurityIconSize / 2, - kHeight / 2 - kSecurityIconSize / 2, - kSecurityIconSize, kSecurityIconSize); canvas->save(); canvas->scale(size_.width() / kWidth, size_.width() / kWidth); - canvas->translate(icon_region.x(), icon_region.y()); + canvas->translate(kSecurityIconOffsetLeft, + kHeight / 2 - kSecurityIconSize / 2); const gfx::VectorIcon& icon = *state_.vector_icon; float icon_scale = kSecurityIconSize / GetDefaultSizeOfVectorIcon(icon); canvas->scale(icon_scale, icon_scale); @@ -87,7 +86,8 @@ } if (state_.should_display_url) { - float url_x = kSecurityIconFieldWidth; + float url_x = + kSecurityIconOffsetLeft + kSecurityIconSize + kSecurityIconOffsetRight; if (!url_render_text_ || url_dirty_) { float url_width = kWidth - url_x - kUrlRightMargin; gfx::Rect text_bounds(ToPixels(url_x), 0, ToPixels(url_width), @@ -111,11 +111,19 @@ url_formatter::FormatUrlTypes format_types = url_formatter::kFormatUrlOmitDefaults; format_types |= url_formatter::kFormatUrlOmitHTTPS; - format_types |= url_formatter::kFormatUrlExperimentalElideAfterHost; const base::string16 formatted_url = url_formatter::FormatUrl( state_.gurl, format_types, net::UnescapeRule::NORMAL, &parsed, nullptr, nullptr); + base::string16 url; + if (parsed.host.is_valid()) + url = formatted_url.substr(parsed.host.begin, parsed.host.len); + + if (parsed.path.is_nonempty() || parsed.query.is_nonempty() || + parsed.ref.is_nonempty()) { + url += gfx::kForwardSlash + base::string16(gfx::kEllipsisUTF16); + } + gfx::FontList font_list; if (!UiTexture::GetFontList(pixel_font_height, formatted_url, &font_list)) failure_callback_.Run(UiUnsupportedMode::kUnhandledCodePoint); @@ -125,7 +133,7 @@ render_text->SetHorizontalAlignment(gfx::ALIGN_LEFT); render_text->SetElideBehavior(gfx::ELIDE_HEAD); render_text->SetDirectionalityMode(gfx::DIRECTIONALITY_FORCE_LTR); - render_text->SetText(formatted_url); + render_text->SetText(url); url_render_text_ = std::move(render_text); }
diff --git a/chrome/browser/vr/gltf_asset.cc b/chrome/browser/vr/gltf_asset.cc index 4591715..e3d9ecb 100644 --- a/chrome/browser/vr/gltf_asset.cc +++ b/chrome/browser/vr/gltf_asset.cc
@@ -7,6 +7,7 @@ #include <unordered_map> #include "base/logging.h" +#include "base/macros.h" namespace vr { @@ -14,33 +15,49 @@ namespace { -const std::unordered_map<std::string, Type> kTypeMap = { - {"SCALAR", SCALAR}, {"VEC2", VEC2}, {"VEC3", VEC3}, {"VEC4", VEC4}, - {"MAT2", MAT2}, {"MAT3", MAT3}, {"MAT4", MAT4}, -}; +using TypeMap = std::unordered_map<std::string, Type>; -const std::vector<int> kTypeComponents = { - 0, - 1, // SCALAR - 2, // VEC2 - 3, // VEC3 - 4, // VEC4 - 4, // MAT2 - 9, // MAT3 - 16, // MAT4 -}; +static const std::unordered_map<std::string, Type>& GetTypeMap() { + CR_DEFINE_STATIC_LOCAL(TypeMap, type_map, + ({ + {"SCALAR", SCALAR}, + {"VEC2", VEC2}, + {"VEC3", VEC3}, + {"VEC4", VEC4}, + {"MAT2", MAT2}, + {"MAT3", MAT3}, + {"MAT4", MAT4}, + })); + return type_map; +} + +static const std::vector<int>& GetTypeComponents() { + CR_DEFINE_STATIC_LOCAL(std::vector<int>, type_components, + ({ + 0, + 1, // SCALAR + 2, // VEC2 + 3, // VEC3 + 4, // VEC4 + 4, // MAT2 + 9, // MAT3 + 16, // MAT4 + })); + return type_components; +} } // namespace Type GetType(const std::string& type) { - auto it = kTypeMap.find(type); - if (it == kTypeMap.end()) + const TypeMap& type_map = GetTypeMap(); + auto it = type_map.find(type); + if (it == type_map.end()) return UNKNOWN; return it->second; } GLint GetTypeComponents(Type type) { - return kTypeComponents[type]; + return GetTypeComponents()[type]; } Mesh::Primitive::Primitive() : indices(nullptr), mode(4) {}
diff --git a/chrome/browser/vr/ui_input_manager.cc b/chrome/browser/vr/ui_input_manager.cc index 8d3b0f9..21df1bb 100644 --- a/chrome/browser/vr/ui_input_manager.cc +++ b/chrome/browser/vr/ui_input_manager.cc
@@ -210,20 +210,23 @@ } DCHECK(input_locked_element_->scrollable()); if (gesture_list->empty() || (gesture_list->front()->GetType() != - blink::WebInputEvent::kGestureScrollEnd)) { + blink::WebInputEvent::kGestureScrollEnd && + gesture_list->front()->GetType() != + blink::WebInputEvent::kGestureFlingStart)) { return; } DCHECK_LE(gesture_list->size(), 2LU); - input_locked_element_->OnScrollEnd(std::move(gesture_list->front()), - target_point); - gesture_list->erase(gesture_list->begin()); - if (!gesture_list->empty()) { + if (gesture_list->front()->GetType() == + blink::WebInputEvent::kGestureScrollEnd) { + input_locked_element_->OnScrollEnd(std::move(gesture_list->front()), + target_point); + } else { DCHECK_EQ(gesture_list->front()->GetType(), blink::WebInputEvent::kGestureFlingStart); fling_target_ = input_locked_element_; fling_target_->OnFlingStart(std::move(gesture_list->front()), target_point); - gesture_list->erase(gesture_list->begin()); } + gesture_list->erase(gesture_list->begin()); input_locked_element_ = nullptr; in_scroll_ = false; }
diff --git a/chrome/browser/vr/ui_scene_manager.cc b/chrome/browser/vr/ui_scene_manager.cc index 406854c..41f7e94c 100644 --- a/chrome/browser/vr/ui_scene_manager.cc +++ b/chrome/browser/vr/ui_scene_manager.cc
@@ -89,14 +89,15 @@ static constexpr float kIndicatorVerticalOffset = 0.1; static constexpr float kIndicatorDistanceOffset = 0.1; +static constexpr float kWebVrUrlToastWidthDMM = 0.472; +static constexpr float kWebVrUrlToastHeightDMM = 0.064; static constexpr float kWebVrUrlToastDistance = 1.0; static constexpr float kWebVrUrlToastWidth = - kUrlBarWidthDMM * kWebVrUrlToastDistance; + kWebVrUrlToastWidthDMM * kWebVrUrlToastDistance; static constexpr float kWebVrUrlToastHeight = - kUrlBarHeightDMM * kWebVrUrlToastDistance; -static constexpr float kWebVrUrlToastVerticalOffset = - -0.2 * kWebVrUrlToastDistance; + kWebVrUrlToastHeightDMM * kWebVrUrlToastDistance; static constexpr int kWebVrUrlToastTimeoutSeconds = 6; +static constexpr float kWebVrUrlToastRotationRad = 14 * M_PI / 180.0; static constexpr float kWebVrToastDistance = 1.0; static constexpr float kFullscreenToastDistance = kFullscreenDistance; @@ -558,13 +559,14 @@ 512, base::TimeDelta::FromSeconds(kWebVrUrlToastTimeoutSeconds), base::Bind(&UiSceneManager::OnUnsupportedMode, base::Unretained(this))); url_bar->set_name(kWebVrUrlToast); + url_bar->set_opacity_when_visible(0.8); url_bar->set_draw_phase(kPhaseForeground); url_bar->set_viewport_aware(true); url_bar->SetVisible(false); url_bar->set_hit_testable(false); - url_bar->SetTranslate(0, kWebVrUrlToastVerticalOffset, - -kWebVrUrlToastDistance); - url_bar->SetRotate(1, 0, 0, kUrlBarRotationRad); + url_bar->SetTranslate(0, kWebVrToastDistance * sin(kWebVrUrlToastRotationRad), + -kWebVrToastDistance * cos(kWebVrUrlToastRotationRad)); + url_bar->SetRotate(1, 0, 0, kWebVrUrlToastRotationRad); url_bar->SetSize(kWebVrUrlToastWidth, kWebVrUrlToastHeight); webvr_url_toast_ = url_bar.get(); scene_->AddUiElement(kWebVrViewportAwareRoot, std::move(url_bar));
diff --git a/chrome/child/BUILD.gn b/chrome/child/BUILD.gn index 11f83d3f..8126ea6 100644 --- a/chrome/child/BUILD.gn +++ b/chrome/child/BUILD.gn
@@ -20,4 +20,8 @@ "//gin", "//v8", ] + + if (is_win) { + deps += [ "//components/crash/content/app:crash_export_thunk_include" ] + } }
diff --git a/chrome/child/DEPS b/chrome/child/DEPS index d79acdd4..95f096e 100644 --- a/chrome/child/DEPS +++ b/chrome/child/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+components/crash/content/app", "+content/public/child", "+gin/public", "+v8",
diff --git a/chrome/child/v8_breakpad_support_win.cc b/chrome/child/v8_breakpad_support_win.cc index 6cc7f8b..a86c8e12 100644 --- a/chrome/child/v8_breakpad_support_win.cc +++ b/chrome/child/v8_breakpad_support_win.cc
@@ -7,27 +7,17 @@ #include <windows.h> #include "base/logging.h" +#include "build/build_config.h" #include "chrome/common/chrome_constants.h" +#include "components/crash/content/app/crash_export_thunks.h" #include "gin/public/debug.h" namespace v8_breakpad_support { void SetUp() { -#ifdef _WIN64 - // Get the breakpad pointer from chrome.exe - gin::Debug::CodeRangeCreatedCallback create_callback = - reinterpret_cast<gin::Debug::CodeRangeCreatedCallback>( - ::GetProcAddress(::GetModuleHandle(chrome::kChromeElfDllName), - "RegisterNonABICompliantCodeRange")); - gin::Debug::CodeRangeDeletedCallback delete_callback = - reinterpret_cast<gin::Debug::CodeRangeDeletedCallback>( - ::GetProcAddress(::GetModuleHandle(chrome::kChromeElfDllName), - "UnregisterNonABICompliantCodeRange")); - // When running e.g. browser_tests.exe, these might be NULL. - if (create_callback && delete_callback) { - gin::Debug::SetCodeRangeCreatedCallback(create_callback); - gin::Debug::SetCodeRangeDeletedCallback(delete_callback); - } +#if defined(ARCH_CPU_X86_64) + gin::Debug::SetCodeRangeCreatedCallback(&RegisterNonABICompliantCodeRange); + gin::Debug::SetCodeRangeDeletedCallback(&UnregisterNonABICompliantCodeRange); #endif }
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index e3dc174..653e769 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -168,7 +168,6 @@ "search/instant_types.cc", "search/instant_types.h", "search/ntp_logging_events.h", - "search/search_types.h", "search/search_urls.cc", "search/search_urls.h", "secure_origin_whitelist.cc",
diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc index 17d9819..3182e96 100644 --- a/chrome/common/chrome_content_client.cc +++ b/chrome/common/chrome_content_client.cc
@@ -15,6 +15,7 @@ #include "base/debug/crash_logging.h" #include "base/files/file_util.h" #include "base/json/json_reader.h" +#include "base/lazy_instance.h" #include "base/memory/ptr_util.h" #include "base/native_library.h" #include "base/path_service.h" @@ -31,6 +32,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/crash_keys.h" #include "chrome/common/pepper_flash.h" +#include "chrome/common/profiling/memlog_client.h" #include "chrome/common/secure_origin_whitelist.h" #include "chrome/common/url_constants.h" #include "chrome/grit/common_resources.h" @@ -713,5 +715,7 @@ void ChromeContentClient::OnServiceManagerConnected( content::ServiceManagerConnection* connection) { - memlog_client_.OnServiceManagerConnected(connection); + static base::LazyInstance<profiling::MemlogClient>::Leaky memlog_client = + LAZY_INSTANCE_INITIALIZER; + memlog_client.Get().OnServiceManagerConnected(connection); }
diff --git a/chrome/common/chrome_content_client.h b/chrome/common/chrome_content_client.h index e2790e45..683f4344 100644 --- a/chrome/common/chrome_content_client.h +++ b/chrome/common/chrome_content_client.h
@@ -16,7 +16,6 @@ #include "build/build_config.h" #include "chrome/common/features.h" #include "chrome/common/origin_trials/chrome_origin_trial_policy.h" -#include "chrome/common/profiling/memlog_client.h" #include "content/public/common/content_client.h" #include "ppapi/features/features.h" @@ -114,7 +113,6 @@ // Used to lock when |origin_trial_policy_| is initialized. base::Lock origin_trial_policy_lock_; std::unique_ptr<ChromeOriginTrialPolicy> origin_trial_policy_; - profiling::MemlogClient memlog_client_; }; #endif // CHROME_COMMON_CHROME_CONTENT_CLIENT_H_
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index c271394f..a1fe637 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -326,6 +326,12 @@ base::FEATURE_DISABLED_BY_DEFAULT}; #endif +// Adds the base language code to the Language-Accept headers if at least one +// corresponding language+region code is present in the user preferences. +// For example: "en-US, fr-FR" --> "en-US, en, fr-FR, fr". +const base::Feature kUseNewAcceptLanguageHeader{ + "UseNewAcceptLanguageHeader", base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables Permissions Blacklisting via Safe Browsing. const base::Feature kPermissionsBlacklist{ "PermissionsBlacklist", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 7612bcb9..38c69fec 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -169,6 +169,8 @@ extern const base::Feature kOneGoogleBarOnLocalNtp; #endif +extern const base::Feature kUseNewAcceptLanguageHeader; + extern const base::Feature kPermissionsBlacklist; #if defined(OS_WIN)
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 78eef16..19344aaa 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -727,7 +727,8 @@ const char kUnlimitedStorage[] = "unlimited-storage"; // Treat given (insecure) origins as secure origins. Multiple origins can be -// supplied as a comma-separated list. +// supplied as a comma-separated list. For the definition of secure contexts, +// see https://w3c.github.io/webappsec-secure-contexts/ // // Example: // --unsafely-treat-insecure-origin-as-secure=http://a.test,http://b.test
diff --git a/chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc b/chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc index 396d502e..5a25005 100644 --- a/chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc +++ b/chrome/common/extensions/permissions/chrome_permission_message_provider_unittest.cc
@@ -9,6 +9,7 @@ #include "base/macros.h" #include "base/strings/string16.h" +#include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/grit/generated_resources.h" #include "extensions/common/permissions/permission_set.h" @@ -52,6 +53,10 @@ Manifest::TYPE_EXTENSION); } + ChromePermissionMessageProvider* message_provider() { + return message_provider_.get(); + } + private: std::unique_ptr<ChromePermissionMessageProvider> message_provider_; @@ -156,4 +161,30 @@ EXPECT_TRUE(IsPrivilegeIncrease(APIPermissionSet(), actual_permissions)); } +// Check that if IDN domains are provided in host permissions, then those +// domains are converted to punycode. +TEST_F(ChromePermissionMessageProviderUnittest, + IDNDomainsInHostPermissionsArePunycoded) { + extensions::URLPatternSet explicit_hosts; + + explicit_hosts.AddPattern( + URLPattern(URLPattern::SCHEME_ALL, "https://ɡoogle.com/")); + explicit_hosts.AddPattern( + URLPattern(URLPattern::SCHEME_ALL, "https://*.ɡoogle.com/")); + extensions::PermissionSet permissions(APIPermissionSet(), + ManifestPermissionSet(), explicit_hosts, + URLPatternSet()); + + PermissionMessages messages = message_provider()->GetPermissionMessages( + message_provider()->GetAllPermissionIDs(permissions, + Manifest::TYPE_EXTENSION)); + + ASSERT_EQ(1U, messages.size()); + EXPECT_EQ(l10n_util::GetStringFUTF16( + IDS_EXTENSION_PROMPT_WARNING_2_HOSTS, + base::ASCIIToUTF16("all xn--oogle-qmc.com sites"), + base::ASCIIToUTF16("xn--oogle-qmc.com")), + messages.front().message()); +} + } // namespace extensions
diff --git a/chrome/common/importer/profile_import.mojom b/chrome/common/importer/profile_import.mojom index f366a941..d5fa210 100644 --- a/chrome/common/importer/profile_import.mojom +++ b/chrome/common/importer/profile_import.mojom
@@ -9,6 +9,8 @@ import "mojo/common/values.mojom"; import "url/mojo/url.mojom"; +const string kProfileImportServiceName = "profile_import"; + [Native] struct ImportedBookmarkEntry;
diff --git a/chrome/common/pdf_uma.h b/chrome/common/pdf_uma.h index e678adab..409bdf68 100644 --- a/chrome/common/pdf_uma.h +++ b/chrome/common/pdf_uma.h
@@ -12,6 +12,8 @@ kLoadedEmbeddedPdfWithPdfium = 1, kShowedDisabledPluginPlaceholderForEmbeddedPdf = 2, kTriggeredNoGestureDriveByDownload = 3, + kLoadedIframePdfWithNoPdfViewer = 4, + kViewPdfClickedInPdfPluginPlaceholder = 5, kPdfLoadStatusCount };
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index b664681..6c3c047f 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -1226,6 +1226,22 @@ // List of printers configured by policy. const char kRecommendedNativePrinters[] = "native_printing.recommended_printers"; + +// External resource containing all printer configurations for an enterprise. +const char kRecommendedNativePrintersFile[] = + "native_printing.recommended_printers_file"; + +// Enum designating the type of restrictions bulk printers are using. +const char kRecommendedNativePrintersAccessMode[] = + "native_printing.recommended_printers_access_mode"; + +// List of printer ids which are explicitly disallowed. List of strings. +const char kRecommendedNativePrintersBlacklist[] = + "native_printing.recommended_printers_blacklist"; + +// List of printer ids that are allowed. List of strings. +const char kRecommendedNativePrintersWhitelist[] = + "native_printing.recommended_printers_whitelist"; #endif // OS_CHROMEOS // An integer pref specifying the fallback behavior for sites outside of content @@ -1926,9 +1942,6 @@ // and download rate in kbits/s to throttle to) const char kNetworkThrottlingEnabled[] = "net.throttling_enabled"; -// Boolean prefs for the local status of the touchscreen. -const char kTouchscreenEnabledLocal[] = "events.touch_screen.enabled_local"; - #endif // defined(OS_CHROMEOS) // Whether there is a Flash version installed that supports clearing LSO data. @@ -2529,4 +2542,9 @@ const char kOfflineUsageMixedCount[] = "offline_pages.mixed_count"; #endif +// Stores the Media Engagement Index schema version. If the stored value +// is lower than the value in MediaEngagementService then the MEI data +// will be wiped. +const char kMediaEngagementSchemaVersion[] = "media.engagement.schema_version"; + } // namespace prefs
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 17b4577..6640179c8 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -421,6 +421,10 @@ #if defined(OS_CHROMEOS) extern const char kPrintingDevices[]; extern const char kRecommendedNativePrinters[]; +extern const char kRecommendedNativePrintersFile[]; +extern const char kRecommendedNativePrintersAccessMode[]; +extern const char kRecommendedNativePrintersBlacklist[]; +extern const char kRecommendedNativePrintersWhitelist[]; #endif // OS_CHROMEOS extern const char kDefaultSupervisedUserFilteringBehavior[]; @@ -679,7 +683,6 @@ extern const char kIsBootstrappingSlave[]; extern const char kReportArcStatusEnabled[]; extern const char kNetworkThrottlingEnabled[]; -extern const char kTouchscreenEnabledLocal[]; #endif // defined(OS_CHROMEOS) extern const char kClearPluginLSODataEnabled[]; @@ -904,6 +907,8 @@ extern const char kOfflineUsageMixedCount[]; #endif +extern const char kMediaEngagementSchemaVersion[]; + } // namespace prefs #endif // CHROME_COMMON_PREF_NAMES_H_
diff --git a/chrome/common/profiling/memlog_allocator_shim.cc b/chrome/common/profiling/memlog_allocator_shim.cc index 50584ce..42cd8a9 100644 --- a/chrome/common/profiling/memlog_allocator_shim.cc +++ b/chrome/common/profiling/memlog_allocator_shim.cc
@@ -29,9 +29,12 @@ // Matches the native buffer size on the pipe. constexpr int kSendBufferSize = 65536; #else -// Writes on Posix greater than PIPE_BUF are not guaranteed to be atomic so -// our buffers can't be larger than that. -constexpr int kSendBufferSize = PIPE_BUF; +// Writes on Posix greater than PIPE_BUF are not guaranteed to be atomic, but +// PIPE_BUF is potentially as low as 512, which isn't large enough to accomodate +// a message with 256 stack frames. Instead, we use a large value [artifically +// chosen to match that of Windows], and make the Send() method of the +// MemlogSenderPipe a critical section. +constexpr int kSendBufferSize = 65536; #endif // Prime since this is used like a hash table. Numbers of this magnitude seemed @@ -187,12 +190,19 @@ #endif } +void StopAllocatorShimDangerous() { + g_send_buffers = nullptr; +} + void AllocatorShimLogAlloc(void* address, size_t sz) { if (!g_send_buffers) return; if (address) { constexpr size_t max_message_size = sizeof(AllocPacket) + kMaxStackEntries * sizeof(uint64_t); + static_assert(max_message_size < kSendBufferSize, + "We can't have a message size that exceeds the pipe write " + "buffer size."); char message[max_message_size]; // TODO(ajwong) check that this is technically valid. AllocPacket* alloc_packet = reinterpret_cast<AllocPacket*>(message);
diff --git a/chrome/common/profiling/memlog_allocator_shim.h b/chrome/common/profiling/memlog_allocator_shim.h index 17da0e6..bf781802 100644 --- a/chrome/common/profiling/memlog_allocator_shim.h +++ b/chrome/common/profiling/memlog_allocator_shim.h
@@ -15,8 +15,20 @@ namespace profiling { +// Begin profiling all allocations in the process. Send the results to +// |sender_pipe|. void InitAllocatorShim(MemlogSenderPipe* sender_pipe); +// Stop profiling allocations by dropping shim callbacks. There is no way to +// consistently, synchronously stop the allocator shim without negatively +// impacting fast-path performance. This method eventually "turns off" the +// allocator shim by turning future calls to AllocatorShimLogAlloc and +// AllocatorShimLogFree into no-ops, modulo caching [g_send_buffers is not +// volatile, intentionally]. This method is well-defined, but isn't guaranteed +// to stop all messages to sender_pipe, since another thread might already be in +// the process of forming a message. +void StopAllocatorShimDangerous(); + void AllocatorShimLogAlloc(void* address, size_t sz); void AllocatorShimLogFree(void* address);
diff --git a/chrome/common/profiling/memlog_client.cc b/chrome/common/profiling/memlog_client.cc index 8512a8b..d47c18c 100644 --- a/chrome/common/profiling/memlog_client.cc +++ b/chrome/common/profiling/memlog_client.cc
@@ -17,7 +17,15 @@ MemlogClient::MemlogClient() = default; -MemlogClient::~MemlogClient() = default; +MemlogClient::~MemlogClient() { + StopAllocatorShimDangerous(); + + // The allocator shim cannot be synchronously, consistently stopped. We leak + // the memlog_sender_pipe_, with the idea that very few future messages will + // be sent to it. This happens at shutdown, so resources will be reclaimed by + // the OS after the process is terminated. + memlog_sender_pipe_.release(); +} void MemlogClient::OnServiceManagerConnected( content::ServiceManagerConnection* connection) {
diff --git a/chrome/common/profiling/memlog_sender_pipe_posix.cc b/chrome/common/profiling/memlog_sender_pipe_posix.cc index ba3b6775..b3b1e8b 100644 --- a/chrome/common/profiling/memlog_sender_pipe_posix.cc +++ b/chrome/common/profiling/memlog_sender_pipe_posix.cc
@@ -25,6 +25,7 @@ } bool MemlogSenderPipe::Send(const void* data, size_t sz) { + base::AutoLock lock(lock_); return mojo::edk::PlatformChannelWrite(handle_.get(), data, sz); }
diff --git a/chrome/common/profiling/memlog_sender_pipe_posix.h b/chrome/common/profiling/memlog_sender_pipe_posix.h index 70296a1e..391f2a8f 100644 --- a/chrome/common/profiling/memlog_sender_pipe_posix.h +++ b/chrome/common/profiling/memlog_sender_pipe_posix.h
@@ -10,6 +10,7 @@ #include "base/files/platform_file.h" #include "base/macros.h" +#include "base/synchronization/lock.h" #include "mojo/edk/embedder/scoped_platform_handle.h" namespace profiling { @@ -26,6 +27,10 @@ private: mojo::edk::ScopedPlatformHandle handle_; + // All calls to Send() are wrapped in a Lock, since the size of the data might + // be larger than the maximum atomic write size of a pipe on Posix [PIPE_BUF]. + base::Lock lock_; + DISALLOW_COPY_AND_ASSIGN(MemlogSenderPipe); };
diff --git a/chrome/common/search/search_types.h b/chrome/common/search/search_types.h deleted file mode 100644 index 4d04b048..0000000 --- a/chrome/common/search/search_types.h +++ /dev/null
@@ -1,42 +0,0 @@ -// Copyright (c) 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. - -#ifndef CHROME_COMMON_SEARCH_SEARCH_TYPES_H_ -#define CHROME_COMMON_SEARCH_SEARCH_TYPES_H_ - -// The Mode structure encodes the visual states encountered when interacting -// with the NTP and the Omnibox. -// TODO(treib): Replace this struct by just the enum Origin. crbug.com/627747 -struct SearchMode { - // The kind of page from which the user initiated the current search. - enum Origin { - // The user is searching from some random page. - ORIGIN_DEFAULT = 0, - - // The user is searching from the NTP. - ORIGIN_NTP, - }; - - SearchMode() : origin(ORIGIN_DEFAULT) {} - - explicit SearchMode(Origin in_origin) : origin(in_origin) {} - - bool operator==(const SearchMode& rhs) const { return origin == rhs.origin; } - - bool operator!=(const SearchMode& rhs) const { - return !(*this == rhs); - } - - bool is_origin_default() const { - return origin == ORIGIN_DEFAULT; - } - - bool is_origin_ntp() const { - return origin == ORIGIN_NTP; - } - - Origin origin; -}; - -#endif // CHROME_COMMON_SEARCH_SEARCH_TYPES_H_
diff --git a/chrome/common/stack_sampling_configuration.cc b/chrome/common/stack_sampling_configuration.cc index b27023c..2aa9bad 100644 --- a/chrome/common/stack_sampling_configuration.cc +++ b/chrome/common/stack_sampling_configuration.cc
@@ -218,6 +218,13 @@ {PROFILE_BROWSER_AND_GPU_PROCESS, 50}, {PROFILE_CONTROL, 50}, {PROFILE_DISABLED, 0}}); + + case version_info::Channel::DEV: + return ChooseConfiguration({{PROFILE_BROWSER_PROCESS, 0}, + {PROFILE_GPU_PROCESS, 0}, + {PROFILE_BROWSER_AND_GPU_PROCESS, 10}, + {PROFILE_CONTROL, 10}, + {PROFILE_DISABLED, 80}}); #endif default:
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc index 90926cb..8a3f7529 100644 --- a/chrome/common/url_constants.cc +++ b/chrome/common/url_constants.cc
@@ -271,10 +271,6 @@ const char kChromeUIPrintHost[] = "print"; #endif // ENABLE_PRINT_PREVIEW -#if BUILDFLAG(ENABLE_DICE_SUPPORT) -const char kChromeUISigninDiceInternalsHost[] = "signin-dice-internals"; -#endif - #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) const char kChromeUIDiscardsHost[] = "discards"; #endif
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h index 03b65750..071ccfab 100644 --- a/chrome/common/url_constants.h +++ b/chrome/common/url_constants.h
@@ -255,10 +255,6 @@ extern const char kChromeUIPrintHost[]; #endif // ENABLE_PRINT_PREVIEW -#if BUILDFLAG(ENABLE_DICE_SUPPORT) -extern const char kChromeUISigninDiceInternalsHost[]; -#endif - #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) extern const char kChromeUIDiscardsHost[]; #endif
diff --git a/chrome/installer/linux/BUILD.gn b/chrome/installer/linux/BUILD.gn index c055862..927b1b2 100644 --- a/chrome/installer/linux/BUILD.gn +++ b/chrome/installer/linux/BUILD.gn
@@ -265,19 +265,22 @@ args = [ rebase_path("$root_out_dir/linux_package.lock", root_build_dir), rebase_path("$root_out_dir/installer/debian/build.sh", root_build_dir), - "-o", - rebase_path(root_out_dir, root_build_dir), - "-b", - rebase_path(root_out_dir, root_build_dir), "-a", build_script_arch, + "-b", + rebase_path(root_out_dir, root_build_dir), "-c", invoker.channel, "-d", branding_path_component, + "-o", + rebase_path(root_out_dir, root_build_dir), "-s", rebase_path(sysroot), ] + if (is_official_build) { + args += [ "-f" ] + } deps = [ ":installer_deps", ] @@ -301,23 +304,26 @@ inputs = packaging_files_binaries outputs = [ - "$root_out_dir/google-chrome-${channel}_${chrome_version_full}-1.${rpm_arch}.rpm", + "$root_out_dir/google-chrome-${channel}-${chrome_version_full}-1.${rpm_arch}.rpm", ] args = [ rebase_path("$root_out_dir/linux_package.lock", root_build_dir), rebase_path("$root_out_dir/installer/rpm/build.sh", root_build_dir), - "-o", - rebase_path(root_out_dir, root_build_dir), - "-b", - rebase_path(root_out_dir, root_build_dir), "-a", build_script_arch, + "-b", + rebase_path(root_out_dir, root_build_dir), "-c", invoker.channel, "-d", branding_path_component, + "-o", + rebase_path(root_out_dir, root_build_dir), ] + if (is_official_build) { + args += [ "-f" ] + } deps = [ ":installer_deps", ]
diff --git a/chrome/installer/linux/debian/build.sh b/chrome/installer/linux/debian/build.sh index 28bf2d8..7aa9c7c3 100755 --- a/chrome/installer/linux/debian/build.sh +++ b/chrome/installer/linux/debian/build.sh
@@ -118,7 +118,12 @@ if [ -f "${DEB_CONTROL}" ]; then gen_control fi - fakeroot dpkg-deb -Zxz -z9 -b "${STAGEDIR}" . + if [ ${IS_OFFICIAL_BUILD} -ne 0 ]; then + local COMPRESSION_OPTS="-Zxz -z9" + else + local COMPRESSION_OPTS="-Znone" + fi + fakeroot dpkg-deb ${COMPRESSION_OPTS} -b "${STAGEDIR}" . verify_package "$DEPENDS" } @@ -130,15 +135,16 @@ } usage() { - echo "usage: $(basename $0) [-c channel] [-a target_arch] [-o 'dir'] " - echo " [-b 'dir'] -d branding" - echo "-c channel the package channel (trunk, asan, unstable, beta, stable)" - echo "-a arch package architecture (ia32 or x64)" - echo "-o dir package output directory [${OUTPUTDIR}]" - echo "-b dir build input directory [${BUILDDIR}]" - echo "-d brand either chromium or google_chrome" - echo "-s dir /path/to/sysroot" - echo "-h this help message" + echo "usage: $(basename $0) [-a target_arch] [-b 'dir'] [-c channel]" + echo " -d branding [-f] [-o 'dir'] -s 'dir'" + echo "-a arch package architecture (ia32 or x64)" + echo "-b dir build input directory [${BUILDDIR}]" + echo "-c channel the package channel (trunk, asan, unstable, beta, stable)" + echo "-d brand either chromium or google_chrome" + echo "-f indicates that this is an official build" + echo "-h this help message" + echo "-o dir package output directory [${OUTPUTDIR}]" + echo "-s dir /path/to/sysroot" } # Check that the channel name is one of the allowable ones. @@ -172,12 +178,11 @@ } process_opts() { - while getopts ":s:o:b:c:a:d:h" OPTNAME + while getopts ":a:b:c:d:fho:s:" OPTNAME do case $OPTNAME in - o ) - OUTPUTDIR=$(readlink -f "${OPTARG}") - mkdir -p "${OUTPUTDIR}" + a ) + TARGETARCH="$OPTARG" ;; b ) BUILDDIR=$(readlink -f "${OPTARG}") @@ -185,20 +190,24 @@ c ) CHANNEL="$OPTARG" ;; - a ) - TARGETARCH="$OPTARG" - ;; d ) BRANDING="$OPTARG" ;; - s ) - SYSROOT="$OPTARG" + f ) + IS_OFFICIAL_BUILD=1 ;; h ) usage exit 0 ;; - \: ) + o ) + OUTPUTDIR=$(readlink -f "${OPTARG}") + mkdir -p "${OUTPUTDIR}" + ;; + s ) + SYSROOT="$OPTARG" + ;; + \: ) echo "'-$OPTARG' needs an argument." usage exit 1 @@ -218,11 +227,6 @@ SCRIPTDIR=$(readlink -f "$(dirname "$0")") OUTPUTDIR="${PWD}" -STAGEDIR=$(mktemp -d -t deb.build.XXXXXX) || exit 1 -TMPFILEDIR=$(mktemp -d -t deb.tmp.XXXXXX) || exit 1 -DEB_CHANGELOG="${TMPFILEDIR}/changelog" -DEB_FILES="${TMPFILEDIR}/files" -DEB_CONTROL="${TMPFILEDIR}/control" CHANNEL="trunk" # Default target architecture to same as build host. if [ "$(uname -m)" = "x86_64" ]; then @@ -235,6 +239,15 @@ trap cleanup 0 process_opts "$@" BUILDDIR=${BUILDDIR:=$(readlink -f "${SCRIPTDIR}/../../../../out/Release")} +IS_OFFICIAL_BUILD=${IS_OFFICIAL_BUILD:=0} + +STAGEDIR="${BUILDDIR}/deb-staging-${CHANNEL}" +mkdir -p "${STAGEDIR}" +TMPFILEDIR="${BUILDDIR}/deb-tmp-${CHANNEL}" +mkdir -p "${TMPFILEDIR}" +DEB_CHANGELOG="${TMPFILEDIR}/changelog" +DEB_FILES="${TMPFILEDIR}/files" +DEB_CONTROL="${TMPFILEDIR}/control" source ${BUILDDIR}/installer/common/installer.include
diff --git a/chrome/installer/linux/debian/check-package-constraints-satisfied.py b/chrome/installer/linux/debian/check-package-constraints-satisfied.py new file mode 100755 index 0000000..7aa379a2 --- /dev/null +++ b/chrome/installer/linux/debian/check-package-constraints-satisfied.py
@@ -0,0 +1,102 @@ +#!/usr/bin/env python +# 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. + +"""Given a binary, uses dpkg-shlibdeps to check that its package dependencies +are satisfiable on all supported debian-based distros. +""" + +import json +import os +import re +import subprocess +import sys + +import deb_version + +if len(sys.argv) != 4: + print 'Usage: %s /path/to/binary /path/to/sysroot arch' % sys.argv[0] + sys.exit(1) + +binary = os.path.abspath(sys.argv[1]) +sysroot = os.path.abspath(sys.argv[2]) +arch = sys.argv[3] + +cmd = ['dpkg-shlibdeps'] +if arch == 'amd64': + cmd.extend(['-l%s/usr/lib/x86_64-linux-gnu' % sysroot, + '-l%s/lib/x86_64-linux-gnu' % sysroot]) +elif arch == 'i386': + cmd.extend(['-l%s/usr/lib/i386-linux-gnu' % sysroot, + '-l%s/lib/i386-linux-gnu' % sysroot]) +else: + print 'Unsupported architecture ' + arch + sys.exit(1) +cmd.extend(['-l%s/usr/lib' % sysroot, '-O', '-e', binary]) + +proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + cwd=sysroot) +exit_code = proc.wait() +(stdout, stderr) = proc.communicate() +if exit_code != 0: + print 'dpkg-shlibdeps failed with exit code ' + str(exit_code) + print 'stderr was ' + stderr + sys.exit(1) + +def version_statement_satisfied(left_version, op, right_version): + # Allowed relationship operators are specified in: + # https://www.debian.org/doc/debian-policy/ch-relationships.html + if op == '>=': + return left_version >= right_version + if op == '<=': + return left_version <= right_version + if op == '>>': + return left_version > right_version + if op == '<<': + return left_version < right_version + assert op == '=' + return left_version == right_version + +def get_package_and_version_requirement(dep): + package_name_regex = '[a-z][a-z0-9\+\-\.]+' + match = re.match('^(%s)$' % package_name_regex, dep) + if match: + return (match.group(1), lambda version: True) + match = re.match('^(%s) \(([\>\=\<]+) ([\~0-9A-Za-z\+\-\.\:]+)\)$' % + package_name_regex, dep) + if match: + return (match.group(1), lambda version: version_statement_satisfied( + version, match.group(2), deb_version.DebVersion(match.group(3)))) + # At the time of writing this script, Chrome does not have any + # complex version requirements like 'version >> 3 | version << 2'. + print ('Conjunctions and disjunctions in package version requirements are ' + + 'not implemented at this time.') + sys.exit(1) + +deps = stdout.replace('shlibs:Depends=', '').replace('\n', '').split(', ') +package_requirements = {} +for dep in deps: + (package, requirement) = get_package_and_version_requirement(dep) + package_requirements[package] = requirement + +script_dir = os.path.dirname(os.path.abspath(__file__)) +deps_file = os.path.join(script_dir, 'dist-package-versions.json') +distro_package_versions = json.load(open(deps_file)) + +ret_code = 0 +for distro in distro_package_versions: + for package in package_requirements: + if package not in distro_package_versions[distro]: + print >> sys.stderr, ( + 'Unexpected new dependency %s on distro %s caused by binary %s' % ( + package, distro, os.path.basename(binary))) + ret_code = 1 + continue + distro_version = deb_version.DebVersion( + distro_package_versions[distro][package]) + if not package_requirements[package](distro_version): + print >> sys.stderr, 'Dependency on package %s not satisfiable on %s' % ( + package, distro) + ret_code = 1 +exit(ret_code)
diff --git a/chrome/installer/linux/debian/deb_version.py b/chrome/installer/linux/debian/deb_version.py new file mode 100755 index 0000000..916df1a4 --- /dev/null +++ b/chrome/installer/linux/debian/deb_version.py
@@ -0,0 +1,116 @@ +#!/usr/bin/env python +# 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. + +def compare_int(left, right): + if left == right: + return 0 + return -1 if left < right else 1 + +def compare_char(left, right): + # 'man deb-version' specifies that characters are compared using + # their ASCII values, except alphabetic characters come before + # special characters and ~ comes before everything else. + table = '~$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-.:' + left = table.find(left) + right = table.find(right) + assert left >= 0 and right >= 0 + return compare_int(left, right) + +def compare_part(left, right): + if isinstance(left, int) and isinstance(right, int): + return compare_int(left, right) + assert isinstance(left, (str, unicode)) and isinstance(right, (str, unicode)) + # 'man deb-version' specifies that '~' should be matched before the + # empty string. Add a '$' to the end of the strings to make this + # comparison easier. + left += '$' + right += '$' + i = 0 + while i < len(left) and i < len(right): + comp = compare_char(left[i], right[i]) + if comp != 0: + return comp + i += 1 + return compare_int(len(left), len(right)) + +def get_parts_from_component(component): + # 'man deb-version' specifies that components should be compared + # part-by-part, where parts are either strings or numbers. Strings + # are compared lexicographically while numbers are compared using + # magnitude. Components must start with a string part and end with + # a number part. The empty string will be prepended and 0 will be + # appended to satisfy this requirement. For example, the component + # '1.2.3' will be expanded to ['', 1, '.', 2, '.', 3], and the empty + # component will be expanded to ['', 0]. + part_is_string = True + parts = [] + part = '' + for c in component: + char_is_string = not c.isdigit() + if char_is_string != part_is_string: + parts.append(part if part_is_string else int(part)) + part = '' + part_is_string = char_is_string + part += c + if part_is_string: + parts.append(part) + part = '' + parts.append(0 if part == '' else int(part)) + return parts + +def compare_component(left, right): + i = 0 + left = get_parts_from_component(left) + right = get_parts_from_component(right) + while i < len(left) and i < len(right): + comp = compare_part(left[i], right[i]) + if comp != 0: + return comp + i += 1 + return compare_int(len(left), len(right)) + +class DebVersion: + def __init__(self, version_string): + self.version_string = version_string + self.epoch = 0 + self.upstream_version = '' + self.debian_revision = None + + colon = version_string.find(':') + if colon >= 0: + self.epoch = int(version_string[:colon]) + hyphen = version_string.rfind('-') + if hyphen >= 0: + self.debian_revision = version_string[hyphen + 1:] + upstream_version_start = colon + 1 + upstream_version_end = hyphen if hyphen >= 0 else len(version_string) + self.upstream_version = version_string[upstream_version_start: + upstream_version_end] + + def __str__(self): + return 'DebVersion(%s)' % self.version_string + + # Comparison algorithm is specified in 'man deb-version'. + def __cmp__(self, other): + assert(isinstance(other, DebVersion)) + + # Epoch comparison. + if self.epoch != other.epoch: + return 1 if self.epoch > other.epoch else -1 + + # Upstream version comparison. + upstream_version_cmp = compare_component(self.upstream_version, + other.upstream_version) + if upstream_version_cmp != 0: + return upstream_version_cmp + + # Debian revision comparison. + if self.debian_revision == None and other.debian_revision == None: + return 0 + if self.debian_revision == None: + return -1 + if other.debian_revision == None: + return 1 + return compare_component(self.debian_revision, other.debian_revision)
diff --git a/chrome/installer/linux/debian/deb_version_test.py b/chrome/installer/linux/debian/deb_version_test.py new file mode 100755 index 0000000..59d0dc784 --- /dev/null +++ b/chrome/installer/linux/debian/deb_version_test.py
@@ -0,0 +1,53 @@ +#!/usr/bin/env python +# 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 deb_version + +versions = [ + '0:~~~', + '~~', + '~', + '', + '1.2', + '1.3', + '99999', + 'a.1', + 'a.1-1', + 'a.1-2', + 'a.2', + '.1', + '1:~~~', + '1:2:3', + '1:abc', + '1:abc:::---1', + '1:zzz999', + '2:~~~', +] + +for i in range(len(versions)): + for j in range(len(versions)): + version_i = deb_version.DebVersion(versions[i]) + version_j = deb_version.DebVersion(versions[j]) + if i < j: + assert version_i < version_j + assert version_i <= version_j + assert not version_i > version_j + assert not version_i >= version_j + assert not version_i == version_j + assert version_i != version_j + elif i > j: + assert not version_i < version_j + assert not version_i <= version_j + assert version_i > version_j + assert version_i >= version_j + assert not version_i == version_j + assert version_i != version_j + else: + assert not version_i < version_j + assert version_i <= version_j + assert not version_i > version_j + assert version_i >= version_j + assert version_i == version_j + assert not version_i != version_j
diff --git a/chrome/installer/linux/rpm/build.sh b/chrome/installer/linux/rpm/build.sh index 59875c1..e0b19e3 100755 --- a/chrome/installer/linux/rpm/build.sh +++ b/chrome/installer/linux/rpm/build.sh
@@ -59,8 +59,11 @@ local ADDITIONAL_RPM_DEPENDS="/bin/sh, \ rpmlib(CompressedFileNames) <= 3.0.4-1, \ rpmlib(PayloadFilesHavePrefix) <= 4.0-1, \ - rpmlib(PayloadIsXz) <= 5.2-1, \ /usr/sbin/update-alternatives" + if [ ${IS_OFFICIAL_BUILD} -ne 0 ]; then + ADDITIONAL_RPM_DEPENDS="${ADDITIONAL_RPM_DEPENDS}, \ + rpmlib(PayloadIsXz) <= 5.2-1" + fi echo "${DEPENDS}" "${ADDITIONAL_RPM_DEPENDS}" | sed 's/,/\n/g' | \ sed 's/^ *//' | LANG=C sort > expected_rpm_depends rpm -qpR "${OUTPUTDIR}/${PKGNAME}.${ARCHITECTURE}.rpm" | LANG=C sort | uniq \ @@ -179,17 +182,22 @@ gen_spec # Create temporary rpmbuild dirs. - RPMBUILD_DIR=$(mktemp -d -t rpmbuild.XXXXXX) || exit 1 mkdir -p "$RPMBUILD_DIR/BUILD" mkdir -p "$RPMBUILD_DIR/RPMS" + if [ ${IS_OFFICIAL_BUILD} -ne 0 ]; then + local COMPRESSION_OPT="_binary_payload w9.xzdio" + else + local COMPRESSION_OPT="_binary_payload w0.gzdio" + fi + # '__os_install_post ${nil}' disables a bunch of automatic post-processing # (brp-compress, etc.), which by default appears to only be enabled on 32-bit, # and which doesn't gain us anything since we already explicitly do all the # compression, symbol stripping, etc. that we want. fakeroot rpmbuild -bb --target="$ARCHITECTURE" --rmspec \ --define "_topdir $RPMBUILD_DIR" \ - --define "_binary_payload w9.xzdio" \ + --define "${COMPRESSION_OPT}" \ --define "__os_install_post %{nil}" \ "${SPEC}" PKGNAME="${PACKAGE}-${CHANNEL}-${VERSION}-${PACKAGE_RELEASE}" @@ -198,7 +206,6 @@ # Make sure the package is world-readable, otherwise it causes problems when # copied to share drive. chmod a+r "${OUTPUTDIR}/${PKGNAME}.${ARCHITECTURE}.rpm" - rm -rf "$RPMBUILD_DIR" verify_package "$DEPENDS" } @@ -207,17 +214,19 @@ cleanup() { rm -rf "${STAGEDIR}" rm -rf "${TMPFILEDIR}" + rm -rf "${RPMBUILD_DIR}" } usage() { - echo "usage: $(basename $0) [-c channel] [-a target_arch] [-o 'dir']" - echo " [-b 'dir'] -d branding" - echo "-c channel the package channel (trunk, asan, unstable, beta, stable)" - echo "-a arch package architecture (ia32 or x64)" - echo "-o dir package output directory [${OUTPUTDIR}]" - echo "-b dir build input directory [${BUILDDIR}]" - echo "-d brand either chromium or google_chrome" - echo "-h this help message" + echo "usage: $(basename $0) [-a target_arch] [-b 'dir'] [-c channel]" + echo " -d branding [-f] [-o 'dir']" + echo "-a arch package architecture (ia32 or x64)" + echo "-b dir build input directory [${BUILDDIR}]" + echo "-c channel the package channel (trunk, asan, unstable, beta, stable)" + echo "-d brand either chromium or google_chrome" + echo "-f indicates that this is an official build" + echo "-h this help message" + echo "-o dir package output directory [${OUTPUTDIR}]" } # Check that the channel name is one of the allowable ones. @@ -257,12 +266,11 @@ } process_opts() { - while getopts ":o:b:c:a:d:h" OPTNAME + while getopts ":a:b:c:d:fho:" OPTNAME do case $OPTNAME in - o ) - OUTPUTDIR=$(readlink -f "${OPTARG}") - mkdir -p "${OUTPUTDIR}" + a ) + TARGETARCH="$OPTARG" ;; b ) BUILDDIR=$(readlink -f "${OPTARG}") @@ -271,16 +279,20 @@ CHANNEL="$OPTARG" verify_channel ;; - a ) - TARGETARCH="$OPTARG" - ;; d ) BRANDING="$OPTARG" ;; + f ) + IS_OFFICIAL_BUILD=1 + ;; h ) usage exit 0 ;; + o ) + OUTPUTDIR=$(readlink -f "${OPTARG}") + mkdir -p "${OUTPUTDIR}" + ;; \: ) echo "'-$OPTARG' needs an argument." usage @@ -301,8 +313,6 @@ SCRIPTDIR=$(readlink -f "$(dirname "$0")") OUTPUTDIR="${PWD}" -STAGEDIR=$(mktemp -d -t rpm.build.XXXXXX) || exit 1 -TMPFILEDIR=$(mktemp -d -t rpm.tmp.XXXXXX) || exit 1 CHANNEL="trunk" # Default target architecture to same as build host. if [ "$(uname -m)" = "x86_64" ]; then @@ -310,12 +320,20 @@ else TARGETARCH="ia32" fi -SPEC="${TMPFILEDIR}/chrome.spec" # call cleanup() on exit trap cleanup 0 process_opts "$@" BUILDDIR=${BUILDDIR:=$(readlink -f "${SCRIPTDIR}/../../../../out/Release")} +IS_OFFICIAL_BUILD=${IS_OFFICIAL_BUILD:=0} + +STAGEDIR="${BUILDDIR}/rpm-staging-${CHANNEL}" +mkdir -p "${STAGEDIR}" +TMPFILEDIR="${BUILDDIR}/rpm-tmp-${CHANNEL}" +mkdir -p "${TMPFILEDIR}" +RPMBUILD_DIR="${BUILDDIR}/rpm-build-${CHANNEL}" +mkdir -p "${RPMBUILD_DIR}" +SPEC="${TMPFILEDIR}/chrome.spec" source ${BUILDDIR}/installer/common/installer.include
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc index 4b97f74..6ebded0 100644 --- a/chrome/installer/setup/install.cc +++ b/chrome/installer/setup/install.cc
@@ -15,6 +15,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/files/file_util.h" +#include "base/files/important_file_writer.h" #include "base/logging.h" #include "base/numerics/safe_conversions.h" #include "base/path_service.h" @@ -22,6 +23,7 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/time/time.h" #include "base/win/shortcut.h" #include "chrome/install_static/install_details.h" #include "chrome/install_static/install_util.h" @@ -39,12 +41,16 @@ #include "chrome/installer/util/delete_old_versions.h" #include "chrome/installer/util/install_util.h" #include "chrome/installer/util/installation_state.h" +#include "chrome/installer/util/installer_util_strings.h" +#include "chrome/installer/util/l10n_string_util.h" #include "chrome/installer/util/master_preferences.h" #include "chrome/installer/util/master_preferences_constants.h" #include "chrome/installer/util/util_constants.h" #include "chrome/installer/util/work_item.h" #include "chrome/installer/util/work_item_list.h" +namespace installer { + namespace { void LogShortcutOperation(ShellUtil::ShortcutLocation location, @@ -128,10 +134,10 @@ } void AddChromeToMediaPlayerList() { - base::string16 reg_path(installer::kMediaPlayerRegPath); + base::string16 reg_path(kMediaPlayerRegPath); // registry paths can also be appended like file system path reg_path.push_back(base::FilePath::kSeparators[0]); - reg_path.append(installer::kChromeExe); + reg_path.append(kChromeExe); VLOG(1) << "Adding Chrome to Media player list at " << reg_path; std::unique_ptr<WorkItem> work_item(WorkItem::CreateCreateRegKeyWorkItem( HKEY_LOCAL_MACHINE, reg_path, WorkItem::kWow64Default)); @@ -144,11 +150,10 @@ // Copy master_preferences file provided to installer, in the same folder // as chrome.exe so Chrome first run can find it. This function will be called // only on the first install of Chrome. -void CopyPreferenceFileForFirstRun( - const installer::InstallerState& installer_state, - const base::FilePath& prefs_source_path) { - base::FilePath prefs_dest_path(installer_state.target_path().AppendASCII( - installer::kDefaultMasterPrefs)); +void CopyPreferenceFileForFirstRun(const InstallerState& installer_state, + const base::FilePath& prefs_source_path) { + base::FilePath prefs_dest_path( + installer_state.target_path().AppendASCII(kDefaultMasterPrefs)); if (!base::CopyFile(prefs_source_path, prefs_dest_path)) { VLOG(1) << "Failed to copy master preferences from:" << prefs_source_path.value() << " gle: " << ::GetLastError(); @@ -175,22 +180,21 @@ // package. If package does not exist before calling the function // (typical new install), the function creates package during install // and removes the whole directory during rollback. -installer::InstallStatus InstallNewVersion( - const installer::InstallationState& original_state, - const installer::InstallerState& installer_state, - const base::FilePath& setup_path, - const base::FilePath& archive_path, - const base::FilePath& src_path, - const base::FilePath& temp_path, - const base::Version& new_version, - std::unique_ptr<base::Version>* current_version, - bool is_downgrade_allowed) { +InstallStatus InstallNewVersion(const InstallationState& original_state, + const InstallerState& installer_state, + const base::FilePath& setup_path, + const base::FilePath& archive_path, + const base::FilePath& src_path, + const base::FilePath& temp_path, + const base::Version& new_version, + std::unique_ptr<base::Version>* current_version, + bool is_downgrade_allowed) { DCHECK(current_version); - installer_state.SetStage(installer::BUILDING); + installer_state.SetStage(BUILDING); current_version->reset(installer_state.GetCurrentVersion(original_state)); - installer::SetCurrentVersionCrashKey(current_version->get()); + SetCurrentVersionCrashKey(current_version->get()); std::unique_ptr<WorkItemList> install_list(WorkItem::CreateWorkItemList()); @@ -205,17 +209,17 @@ install_list.get()); base::FilePath new_chrome_exe( - installer_state.target_path().Append(installer::kChromeNewExe)); + installer_state.target_path().Append(kChromeNewExe)); - installer_state.SetStage(installer::EXECUTING); + installer_state.SetStage(EXECUTING); if (!install_list->Do()) { - installer_state.SetStage(installer::ROLLINGBACK); - installer::InstallStatus result = - base::PathExists(new_chrome_exe) && current_version->get() && - new_version == *current_version->get() ? - installer::SAME_VERSION_REPAIR_FAILED : - installer::INSTALL_FAILED; + installer_state.SetStage(ROLLINGBACK); + InstallStatus result = base::PathExists(new_chrome_exe) && + current_version->get() && + new_version == *current_version->get() + ? SAME_VERSION_REPAIR_FAILED + : INSTALL_FAILED; LOG(ERROR) << "Install failed, rolling back... result: " << result; install_list->Rollback(); LOG(ERROR) << "Rollback complete. "; @@ -224,12 +228,12 @@ if (!current_version->get()) { VLOG(1) << "First install of version " << new_version; - return installer::FIRST_INSTALL_SUCCESS; + return FIRST_INSTALL_SUCCESS; } if (new_version == **current_version) { VLOG(1) << "Install repaired of version " << new_version; - return installer::INSTALL_REPAIRED; + return INSTALL_REPAIRED; } bool new_chrome_exe_exists = base::PathExists(new_chrome_exe); @@ -237,111 +241,192 @@ if (new_chrome_exe_exists) { VLOG(1) << "Version updated to " << new_version << " while running " << **current_version; - return installer::IN_USE_UPDATED; + return IN_USE_UPDATED; } VLOG(1) << "Version updated to " << new_version; - return installer::NEW_VERSION_UPDATED; + return NEW_VERSION_UPDATED; } if (is_downgrade_allowed) { if (new_chrome_exe_exists) { VLOG(1) << "Version downgrades to " << new_version << " while running " << **current_version; - return installer::IN_USE_DOWNGRADE; + return IN_USE_DOWNGRADE; } VLOG(1) << "Version downgrades to " << new_version; - return installer::OLD_VERSION_DOWNGRADE; + return OLD_VERSION_DOWNGRADE; } LOG(ERROR) << "Not sure how we got here while updating" << ", new version: " << new_version << ", old version: " << **current_version; - return installer::INSTALL_FAILED; + return INSTALL_FAILED; +} + +std::string GenerateVisualElementsManifest(const base::Version& version, + bool use_light_assets) { + // A printf-style format string for generating the visual elements manifest. + // Required arguments, in order, are thrice: + // - Relative path to the VisualElements directory. + // - Logo suffix for the channel. + // - "Light" or "", according to |use_light_assets|. + // followed by: + // - Foreground text value (light or dark). + static constexpr char kManifestTemplate[] = + "<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" + " <VisualElements\r\n" + " ShowNameOnSquare150x150Logo='on'\r\n" + " Square150x150Logo='%ls\\Logo%ls%ls.png'\r\n" + " Square70x70Logo='%ls\\SmallLogo%ls%ls.png'\r\n" + " Square44x44Logo='%ls\\SmallLogo%ls%ls.png'\r\n" + " ForegroundText='%ls'\r\n" + " BackgroundColor='#212121'/>\r\n" + "</Application>\r\n"; + static constexpr wchar_t kLight[] = L"Light"; + + // Construct the relative path to the versioned VisualElements directory. + base::string16 elements_dir(base::ASCIIToUTF16(version.GetString())); + elements_dir.push_back(base::FilePath::kSeparators[0]); + elements_dir.append(kVisualElements); + + const base::string16 manifest_template(base::ASCIIToUTF16(kManifestTemplate)); + + // Fill the manifest with the desired values. + const base::char16* logo_suffix = + install_static::InstallDetails::Get().logo_suffix(); + const wchar_t* const light_suffix = use_light_assets ? kLight : L""; + base::string16 manifest16(base::StringPrintf( + manifest_template.c_str(), elements_dir.c_str(), logo_suffix, + light_suffix, elements_dir.c_str(), logo_suffix, light_suffix, + elements_dir.c_str(), logo_suffix, light_suffix, + use_light_assets ? L"dark" : L"light")); + + return base::UTF16ToUTF8(manifest16); +} + +enum class VEAssetType { + kNone, // No VisualElements for this install. + kDarkOnly, // No "light" assets that require dark text. + kDarkAndLight, // "light" and "dark" assets are present. +}; + +// Returns the type of VisualElements assets present for this brand and mode. +VEAssetType DetermineVisualElementAssetType(const base::FilePath& base_path, + const base::Version& version) { + // There are no assets at all if there's no VisualElements directory. + base::FilePath visual_elements_dir = + base_path.AppendASCII(version.GetString()).Append(kVisualElements); + if (!base::DirectoryExists(visual_elements_dir)) + return VEAssetType::kNone; + + // Dark assets are unconditionally required. + const wchar_t* const logo_suffix = + install_static::InstallDetails::Get().logo_suffix(); + DCHECK(base::PathExists(visual_elements_dir.Append( + base::StringPrintf(L"Logo%ls.png", logo_suffix)))); + + // Check for light assets that require dark text. + base::string16 light_logo_file_name = + base::StringPrintf(L"Logo%lsLight.png", logo_suffix); + return base::PathExists(visual_elements_dir.Append(light_logo_file_name)) + ? VEAssetType::kDarkAndLight + : VEAssetType::kDarkOnly; } } // namespace -namespace installer { +bool CreateVisualElementsManifest(const base::FilePath& src_path, + const base::Version& version, + bool supports_dark_text) { + VEAssetType asset_type = DetermineVisualElementAssetType(src_path, version); + if (asset_type == VEAssetType::kNone) { + VLOG(1) << "No visual elements found, not writing " + << kVisualElementsManifest << " to " << src_path.value(); + return true; + } -void EscapeXmlAttributeValueInSingleQuotes(base::string16* att_value) { - base::ReplaceChars(*att_value, base::ASCIIToUTF16("&"), - base::ASCIIToUTF16("&"), att_value); - base::ReplaceChars(*att_value, base::ASCIIToUTF16("'"), - base::ASCIIToUTF16("'"), att_value); - base::ReplaceChars(*att_value, base::ASCIIToUTF16("<"), - base::ASCIIToUTF16("<"), att_value); + // Generate the manifest, using "light" assets if and only if the OS supports + // drawing dark text. + const std::string manifest(GenerateVisualElementsManifest( + version, supports_dark_text && asset_type == VEAssetType::kDarkAndLight)); + + // Write the manifest to |src_path|. + int size = base::checked_cast<int>(manifest.size()); + if (base::WriteFile(src_path.Append(kVisualElementsManifest), + manifest.c_str(), size) == size) { + VLOG(1) << "Successfully wrote " << kVisualElementsManifest << " to " + << src_path.value(); + return true; + } + PLOG(ERROR) << "Error writing " << kVisualElementsManifest << " to " + << src_path.value(); + return false; } -bool CreateVisualElementsManifest(const base::FilePath& src_path, - const base::Version& version) { - // Construct the relative path to the versioned VisualElements directory. - base::string16 elements_dir(base::ASCIIToUTF16(version.GetString())); - elements_dir.push_back(base::FilePath::kSeparators[0]); - elements_dir.append(installer::kVisualElements); +void UpdateVisualElementsManifest(const base::FilePath& target_path, + const base::Version& version, + bool supports_dark_text) { + VEAssetType asset_type = + DetermineVisualElementAssetType(target_path, version); + if (asset_type == VEAssetType::kNone) { + VLOG(1) << "No visual elements found, not updating " + << kVisualElementsManifest << " in " << target_path.value(); + return; + } - // Some distributions of Chromium may not include visual elements. Only - // proceed if this distribution does. - if (!base::PathExists(src_path.Append(elements_dir))) { - VLOG(1) << "No visual elements found, not writing " - << installer::kVisualElementsManifest << " to " << src_path.value(); - return true; + // Generate the manifest, using "light" assets if and only if the OS supports + // drawing dark text. + const std::string manifest(GenerateVisualElementsManifest( + version, supports_dark_text && asset_type == VEAssetType::kDarkAndLight)); + + // Load existing manifest. + base::FilePath manifest_path(target_path.Append(kVisualElementsManifest)); + std::string old_manifest; + + // Nothing to do if the manifest hasn't changed. + if (base::ReadFileToString(manifest_path, &old_manifest) && + manifest == old_manifest) { + VLOG(1) << "No need to update " << kVisualElementsManifest << " in " + << target_path.value(); + return; + } + + if (!base::ImportantFileWriter::WriteFileAtomically(manifest_path, + manifest)) { + PLOG(ERROR) << "Error updating " << kVisualElementsManifest << " in " + << target_path.value(); + return; + } + VLOG(1) << "Successfully updated " << kVisualElementsManifest << " in " + << target_path.value(); + + // Touch the shortcut to force the Start Menu to refresh the tile. + base::FilePath start_menu_shortcut; + base::Time now(base::Time::Now()); + BrowserDistribution* dist = BrowserDistribution::GetDistribution(); + if (!ShellUtil::GetShortcutPath( + ShellUtil::SHORTCUT_LOCATION_START_MENU_ROOT, dist, + install_static::IsSystemInstall() ? ShellUtil::SYSTEM_LEVEL + : ShellUtil::CURRENT_USER, + &start_menu_shortcut)) { + LOG(ERROR) << "Failed finding the Start Menu shortcut directory."; + return; + } + start_menu_shortcut = + start_menu_shortcut.Append(dist->GetShortcutName() + kLnkExt); + if (base::TouchFile(start_menu_shortcut, now, now)) { + VLOG(1) << "Successfully touched " << start_menu_shortcut.value(); } else { - // A printf-style format string for generating the visual elements - // manifest. Required arguments, in order, are: - // - Localized display name for the product. - // - Relative path to the VisualElements directory, three times. - static const char kManifestTemplate[] = - "<Application " - "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" - " <VisualElements\r\n" - " ShowNameOnSquare150x150Logo='on'\r\n" - " Square150x150Logo='%ls\\Logo%ls.png'\r\n" - " Square70x70Logo='%ls\\SmallLogo%ls.png'\r\n" - " Square44x44Logo='%ls\\SmallLogo%ls.png'\r\n" - " ForegroundText='light'\r\n" - " BackgroundColor='#212121'/>\r\n" - "</Application>\r\n"; - - const base::string16 manifest_template( - base::ASCIIToUTF16(kManifestTemplate)); - - BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - // TODO(grt): http://crbug.com/75152 Write a reference to a localized - // resource for |display_name|. - base::string16 display_name(dist->GetDisplayName()); - EscapeXmlAttributeValueInSingleQuotes(&display_name); - - // Fill the manifest with the desired values. - const base::char16* logo_suffix = - install_static::InstallDetails::Get().logo_suffix(); - base::string16 manifest16(base::StringPrintf( - manifest_template.c_str(), elements_dir.c_str(), logo_suffix, - elements_dir.c_str(), logo_suffix, elements_dir.c_str(), logo_suffix)); - - // Write the manifest to |src_path|. - const std::string manifest(base::UTF16ToUTF8(manifest16)); - int size = base::checked_cast<int>(manifest.size()); - if (base::WriteFile( - src_path.Append(installer::kVisualElementsManifest), - manifest.c_str(), size) == size) { - VLOG(1) << "Successfully wrote " << installer::kVisualElementsManifest - << " to " << src_path.value(); - return true; - } else { - PLOG(ERROR) << "Error writing " << installer::kVisualElementsManifest - << " to " << src_path.value(); - return false; - } + PLOG(ERROR) << "Error touching " << start_menu_shortcut.value(); } } -void CreateOrUpdateShortcuts( - const base::FilePath& target, - const installer::Product& product, - const MasterPreferences& prefs, - InstallShortcutLevel install_level, - InstallShortcutOperation install_operation) { +void CreateOrUpdateShortcuts(const base::FilePath& target, + const Product& product, + const MasterPreferences& prefs, + InstallShortcutLevel install_level, + InstallShortcutOperation install_operation) { bool do_not_create_any_shortcuts = false; prefs.GetBool(master_preferences::kDoNotCreateAnyShortcuts, &do_not_create_any_shortcuts); @@ -432,8 +517,8 @@ start_menu_properties, shortcut_operation); } -void RegisterChromeOnMachine(const installer::InstallerState& installer_state, - const installer::Product& product, +void RegisterChromeOnMachine(const InstallerState& installer_state, + const Product& product, bool make_chrome_default, const base::Version& version) { // Try to add Chrome to Media Player shim inclusion list. We don't do any @@ -450,7 +535,7 @@ // register it with Windows. BrowserDistribution* dist = product.distribution(); const base::FilePath chrome_exe( - installer_state.target_path().Append(installer::kChromeExe)); + installer_state.target_path().Append(kChromeExe)); VLOG(1) << "Registering Chrome as browser: " << chrome_exe.value(); if (make_chrome_default && install_static::SupportsSetAsDefaultBrowser() && ShellUtil::CanMakeChromeDefaultUnattended()) { @@ -463,16 +548,15 @@ } } -InstallStatus InstallOrUpdateProduct( - const installer::InstallationState& original_state, - const installer::InstallerState& installer_state, - const base::FilePath& setup_path, - const base::FilePath& archive_path, - const base::FilePath& install_temp_path, - const base::FilePath& src_path, - const base::FilePath& prefs_path, - const MasterPreferences& prefs, - const base::Version& new_version) { +InstallStatus InstallOrUpdateProduct(const InstallationState& original_state, + const InstallerState& installer_state, + const base::FilePath& setup_path, + const base::FilePath& archive_path, + const base::FilePath& install_temp_path, + const base::FilePath& src_path, + const base::FilePath& prefs_path, + const MasterPreferences& prefs, + const base::Version& new_version) { // TODO(robertshield): Removing the pending on-reboot moves should be done // elsewhere. // Remove any scheduled MOVEFILE_DELAY_UNTIL_REBOOT entries in the target of @@ -485,7 +569,8 @@ // looks as if it had been extracted from the archive when calling // InstallNewVersion() below. installer_state.SetStage(CREATING_VISUAL_MANIFEST); - CreateVisualElementsManifest(src_path, new_version); + CreateVisualElementsManifest(src_path, new_version, + OsSupportsDarkTextTiles()); std::unique_ptr<base::Version> existing_version; InstallStatus result = @@ -524,8 +609,7 @@ InstallShortcutOperation install_operation = INSTALL_SHORTCUT_REPLACE_EXISTING; - if (result == installer::FIRST_INSTALL_SUCCESS || - result == installer::INSTALL_REPAIRED || + if (result == FIRST_INSTALL_SUCCESS || result == INSTALL_REPAIRED || !original_state.GetProductState(installer_state.system_install())) { // Always create the shortcuts on a new install, a repair install, and // when the Chrome product is being added to the current install. @@ -560,7 +644,7 @@ DCHECK_EQ(chrome_product.distribution(), BrowserDistribution::GetDistribution()); UpdateDefaultBrowserBeaconForPath( - installer_state.target_path().Append(installer::kChromeExe)); + installer_state.target_path().Append(kChromeExe)); } // Delete files that belong to old versions of Chrome. If that fails during @@ -607,8 +691,8 @@ << "Failed to launch \"" << command_line.GetCommandLineString() << "\""; } -void HandleOsUpgradeForBrowser(const installer::InstallerState& installer_state, - const installer::Product& chrome, +void HandleOsUpgradeForBrowser(const InstallerState& installer_state, + const Product& chrome, const base::Version& installed_version) { VLOG(1) << "Updating and registering shortcuts for --on-os-upgrade."; @@ -616,6 +700,11 @@ const MasterPreferences prefs( installer_state.target_path().AppendASCII(kDefaultMasterPrefs)); + // Update chrome.VisualElementsManifest.xml in case the upgrade was to an OS + // version that supports dark text on light backgrounds. + UpdateVisualElementsManifest(installer_state.target_path(), installed_version, + OsSupportsDarkTextTiles()); + // Update shortcuts at this install level (per-user shortcuts on system-level // installs will be updated through Active Setup). const InstallShortcutLevel level =
diff --git a/chrome/installer/setup/install.h b/chrome/installer/setup/install.h index a0af5c2b..f4631ef 100644 --- a/chrome/installer/setup/install.h +++ b/chrome/installer/setup/install.h
@@ -44,16 +44,26 @@ ALL_USERS, }; -// Escape |att_value| as per the XML AttValue production -// (http://www.w3.org/TR/2008/REC-xml-20081126/#NT-AttValue) for a value in -// single quotes. -void EscapeXmlAttributeValueInSingleQuotes(base::string16* att_value); - -// Creates VisualElementsManifest.xml beside chrome.exe in |src_path| if -// |src_path|\VisualElements exists. -// Returns true unless the manifest is supposed to be created, but fails to be. +// Creates chrome.VisualElementsManifest.xml in |src_path| if +// |src_path|\VisualElements exists. |supports_dark_text| indicates whether or +// not the OS supports drawing dark text on light assets. When true, and such +// light assets are present, the generated manifest references those light +// assets. Returns true unless the manifest is supposed to be created, but fails +// to be. bool CreateVisualElementsManifest(const base::FilePath& src_path, - const base::Version& version); + const base::Version& version, + bool supports_dark_text); + +// Updates chrome.VisualElementsManifest.xml in |target_path| if +// |target_path|\VisualElements exists. |supports_dark_text| indicates whether +// or not the OS supports drawing dark text on light assets. When true, and such +// light assets are present, the generated manifest references those light +// assets. The file is not modified if no changes are needed. If it is modified, +// Chrome's start menu shortcut is touched so that the Start Menu refreshes its +// representation of the tile. +void UpdateVisualElementsManifest(const base::FilePath& target_path, + const base::Version& version, + bool supports_dark_text); // Overwrites shortcuts (desktop, quick launch, and start menu) if they are // present on the system.
diff --git a/chrome/installer/setup/install_unittest.cc b/chrome/installer/setup/install_unittest.cc index da1e76e..ee244cd 100644 --- a/chrome/installer/setup/install_unittest.cc +++ b/chrome/installer/setup/install_unittest.cc
@@ -12,16 +12,20 @@ #include <tuple> #include "base/base_paths.h" +#include "base/files/file.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/path_service.h" #include "base/strings/string16.h" +#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_path_override.h" #include "base/test/test_shortcut_win.h" #include "base/version.h" #include "base/win/shortcut.h" +#include "chrome/install_static/install_details.h" #include "chrome/install_static/install_modes.h" #include "chrome/install_static/test/scoped_install_details.h" #include "chrome/installer/setup/install_worker.h" @@ -29,6 +33,8 @@ #include "chrome/installer/setup/setup_constants.h" #include "chrome/installer/util/browser_distribution.h" #include "chrome/installer/util/install_util.h" +#include "chrome/installer/util/installer_util_strings.h" +#include "chrome/installer/util/l10n_string_util.h" #include "chrome/installer/util/master_preferences.h" #include "chrome/installer/util/master_preferences_constants.h" #include "chrome/installer/util/product.h" @@ -42,14 +48,22 @@ // installer::CreateVisualElementsManifest. The parameters are: // 0: an index into a brand's install_static::kInstallModes array. // 1: the expected manifest. +// 2: true to test for OS versions that support dark text on light images. +// 3: true to test brands that include light assets. class CreateVisualElementsManifestTest : public ::testing::TestWithParam< - std::tuple<install_static::InstallConstantIndex, const char*>> { + std::tuple<install_static::InstallConstantIndex, + const char*, + bool, + bool>> { protected: CreateVisualElementsManifestTest() : scoped_install_details_(false /* !system_level */, std::get<0>(GetParam())), + start_menu_override_(base::DIR_START_MENU), expected_manifest_(std::get<1>(GetParam())), + supports_dark_text_(std::get<2>(GetParam())), + has_light_assets_(std::get<3>(GetParam())), version_("0.0.0.0") {} void SetUp() override { @@ -61,6 +75,12 @@ manifest_path_ = test_dir_.GetPath().Append(installer::kVisualElementsManifest); + + ASSERT_TRUE(base::PathService::Get(base::DIR_START_MENU, + &start_menu_shortcut_path_)); + start_menu_shortcut_path_ = start_menu_shortcut_path_.Append( + installer::GetLocalizedString(IDS_PRODUCT_NAME_BASE) + + installer::kLnkExt); } void TearDown() override { @@ -68,12 +88,51 @@ ASSERT_TRUE(test_dir_.Delete()); } + // Creates a dummy test file at |path|. + void CreateTestFile(const base::FilePath& path) { + static constexpr char kBlah[] = "blah"; + ASSERT_EQ(static_cast<int>(arraysize(kBlah) - 1), + base::WriteFile(path, &kBlah[0], arraysize(kBlah) - 1)); + } + + // Creates the VisualElements directory and a light asset, if testing such. + void PrepareTestVisualElementsDirectory() { + base::FilePath visual_elements_dir = + version_dir_.Append(installer::kVisualElements); + ASSERT_TRUE(base::CreateDirectory(visual_elements_dir)); + base::string16 light_logo_file_name = base::StringPrintf( + L"Logo%ls.png", install_static::InstallDetails::Get().logo_suffix()); + ASSERT_NO_FATAL_FAILURE( + CreateTestFile(visual_elements_dir.Append(light_logo_file_name))); + if (has_light_assets_) { + base::string16 light_logo_file_name = base::StringPrintf( + L"Logo%lsLight.png", + install_static::InstallDetails::Get().logo_suffix()); + ASSERT_NO_FATAL_FAILURE( + CreateTestFile(visual_elements_dir.Append(light_logo_file_name))); + } + } + + // Creates a bogus file at the location of the start menu shortcut. + void CreateStartMenuShortcut() { + ASSERT_NO_FATAL_FAILURE(CreateTestFile(start_menu_shortcut_path_)); + } + // InstallDetails for this test run. install_static::ScopedInstallDetails scoped_install_details_; + // Override the location of the Start Menu shortcuts. + base::ScopedPathOverride start_menu_override_; + // The expected contents of the manifest. const char* const expected_manifest_; + // True to generate the manifest for systems that support dark text. + const bool supports_dark_text_; + + // True to test for brands that include light assets. + const bool has_light_assets_; + // A dummy version number used to create the version directory. const base::Version version_; @@ -86,6 +145,9 @@ // The path to VisualElementsManifest.xml. base::FilePath manifest_path_; + // The path to the Start Menu shortcut. + base::FilePath start_menu_shortcut_path_; + private: DISALLOW_COPY_AND_ASSIGN(CreateVisualElementsManifestTest); }; @@ -101,6 +163,17 @@ " BackgroundColor='#212121'/>\r\n" "</Application>\r\n"; +constexpr char kExpectedPrimaryLightManifest[] = + "<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" + " <VisualElements\r\n" + " ShowNameOnSquare150x150Logo='on'\r\n" + " Square150x150Logo='0.0.0.0\\VisualElements\\LogoLight.png'\r\n" + " Square70x70Logo='0.0.0.0\\VisualElements\\SmallLogoLight.png'\r\n" + " Square44x44Logo='0.0.0.0\\VisualElements\\SmallLogoLight.png'\r\n" + " ForegroundText='dark'\r\n" + " BackgroundColor='#212121'/>\r\n" + "</Application>\r\n"; + #if defined(GOOGLE_CHROME_BUILD) constexpr char kExpectedBetaManifest[] = "<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" @@ -113,6 +186,19 @@ " BackgroundColor='#212121'/>\r\n" "</Application>\r\n"; +constexpr char kExpectedBetaLightManifest[] = + "<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" + " <VisualElements\r\n" + " ShowNameOnSquare150x150Logo='on'\r\n" + " Square150x150Logo='0.0.0.0\\VisualElements\\LogoBetaLight.png'\r\n" + " " + "Square70x70Logo='0.0.0.0\\VisualElements\\SmallLogoBetaLight.png'\r\n" + " " + "Square44x44Logo='0.0.0.0\\VisualElements\\SmallLogoBetaLight.png'\r\n" + " ForegroundText='dark'\r\n" + " BackgroundColor='#212121'/>\r\n" + "</Application>\r\n"; + constexpr char kExpectedDevManifest[] = "<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" " <VisualElements\r\n" @@ -124,6 +210,17 @@ " BackgroundColor='#212121'/>\r\n" "</Application>\r\n"; +constexpr char kExpectedDevLightManifest[] = + "<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" + " <VisualElements\r\n" + " ShowNameOnSquare150x150Logo='on'\r\n" + " Square150x150Logo='0.0.0.0\\VisualElements\\LogoDevLight.png'\r\n" + " Square70x70Logo='0.0.0.0\\VisualElements\\SmallLogoDevLight.png'\r\n" + " Square44x44Logo='0.0.0.0\\VisualElements\\SmallLogoDevLight.png'\r\n" + " ForegroundText='dark'\r\n" + " BackgroundColor='#212121'/>\r\n" + "</Application>\r\n"; + constexpr char kExpectedCanaryManifest[] = "<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\r\n" " <VisualElements\r\n" @@ -139,28 +236,94 @@ GoogleChrome, CreateVisualElementsManifestTest, testing::Combine(testing::Values(install_static::STABLE_INDEX), - testing::Values(kExpectedPrimaryManifest))); + testing::Values(kExpectedPrimaryManifest), + testing::Bool(), + testing::Values(false))); +INSTANTIATE_TEST_CASE_P( + GoogleChromeLightAssetNoSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::STABLE_INDEX), + testing::Values(kExpectedPrimaryManifest), + testing::Values(false), + testing::Values(true))); +INSTANTIATE_TEST_CASE_P( + GoogleChromeLightAssetWithSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::STABLE_INDEX), + testing::Values(kExpectedPrimaryLightManifest), + testing::Values(true), + testing::Values(true))); INSTANTIATE_TEST_CASE_P( BetaChrome, CreateVisualElementsManifestTest, testing::Combine(testing::Values(install_static::BETA_INDEX), - testing::Values(kExpectedBetaManifest))); + testing::Values(kExpectedBetaManifest), + testing::Bool(), + testing::Values(false))); +INSTANTIATE_TEST_CASE_P( + BetaChromeLightAssetNoSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::BETA_INDEX), + testing::Values(kExpectedBetaManifest), + testing::Values(false), + testing::Values(true))); +INSTANTIATE_TEST_CASE_P( + BetaChromeLightAssetWithSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::BETA_INDEX), + testing::Values(kExpectedBetaLightManifest), + testing::Values(true), + testing::Values(true))); INSTANTIATE_TEST_CASE_P( DevChrome, CreateVisualElementsManifestTest, testing::Combine(testing::Values(install_static::DEV_INDEX), - testing::Values(kExpectedDevManifest))); + testing::Values(kExpectedDevManifest), + testing::Bool(), + testing::Values(false))); +INSTANTIATE_TEST_CASE_P( + DevChromeLightAssetsNoSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::DEV_INDEX), + testing::Values(kExpectedDevManifest), + testing::Values(false), + testing::Values(true))); +INSTANTIATE_TEST_CASE_P( + DevChromeLightAssetsWithSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::DEV_INDEX), + testing::Values(kExpectedDevLightManifest), + testing::Values(true), + testing::Values(true))); INSTANTIATE_TEST_CASE_P( CanaryChrome, CreateVisualElementsManifestTest, testing::Combine(testing::Values(install_static::CANARY_INDEX), - testing::Values(kExpectedCanaryManifest))); + testing::Values(kExpectedCanaryManifest), + testing::Bool(), + testing::Values(false))); #else INSTANTIATE_TEST_CASE_P( Chromium, CreateVisualElementsManifestTest, testing::Combine(testing::Values(install_static::CHROMIUM_INDEX), - testing::Values(kExpectedPrimaryManifest))); + testing::Values(kExpectedPrimaryManifest), + testing::Bool(), + testing::Values(false))); +INSTANTIATE_TEST_CASE_P( + ChromiumLightAssetNoSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::CHROMIUM_INDEX), + testing::Values(kExpectedPrimaryManifest), + testing::Values(false), + testing::Values(true))); +INSTANTIATE_TEST_CASE_P( + ChromiumLightAssetWithSupport, + CreateVisualElementsManifestTest, + testing::Combine(testing::Values(install_static::CHROMIUM_INDEX), + testing::Values(kExpectedPrimaryLightManifest), + testing::Values(true), + testing::Values(true))); #endif class InstallShortcutTest : public testing::Test { @@ -298,18 +461,17 @@ // Test that VisualElementsManifest.xml is not created when VisualElements are // not present. TEST_P(CreateVisualElementsManifestTest, VisualElementsManifestNotCreated) { - ASSERT_TRUE( - installer::CreateVisualElementsManifest(test_dir_.GetPath(), version_)); + ASSERT_TRUE(installer::CreateVisualElementsManifest( + test_dir_.GetPath(), version_, supports_dark_text_)); ASSERT_FALSE(base::PathExists(manifest_path_)); } // Test that VisualElementsManifest.xml is created with the correct content when // VisualElements are present. TEST_P(CreateVisualElementsManifestTest, VisualElementsManifestCreated) { - ASSERT_TRUE(base::CreateDirectory( - version_dir_.Append(installer::kVisualElements))); - ASSERT_TRUE( - installer::CreateVisualElementsManifest(test_dir_.GetPath(), version_)); + ASSERT_NO_FATAL_FAILURE(PrepareTestVisualElementsDirectory()); + ASSERT_TRUE(installer::CreateVisualElementsManifest( + test_dir_.GetPath(), version_, supports_dark_text_)); ASSERT_TRUE(base::PathExists(manifest_path_)); std::string read_manifest; @@ -318,6 +480,82 @@ ASSERT_STREQ(expected_manifest_, read_manifest.c_str()); } +// Test that the VisualElementsManifest is not modified when not needed. +TEST_P(CreateVisualElementsManifestTest, UpdateVisualElementsNoChange) { + // Put the correct manifest into place. + const int expected_manifest_length = + static_cast<int>(strlen(expected_manifest_)); + ASSERT_NO_FATAL_FAILURE(PrepareTestVisualElementsDirectory()); + ASSERT_EQ(expected_manifest_length, + base::WriteFile(manifest_path_, expected_manifest_, + expected_manifest_length)); + + // Create a bogus start menu shortcut. + ASSERT_NO_FATAL_FAILURE(CreateStartMenuShortcut()); + + // Push those files back in time to avoid flakes in case the test is so fast + // that the times aren't modified when the files are touched/rewritten. + base::Time the_past = base::Time::Now() - base::TimeDelta::FromSeconds(5); + FILETIME creation_time = the_past.ToFileTime(); + FILETIME last_access_time = the_past.ToFileTime(); + FILETIME last_write_time = the_past.ToFileTime(); + ASSERT_TRUE(::SetFileTime( + base::File(manifest_path_, + base::File::FLAG_OPEN | base::File::FLAG_WRITE_ATTRIBUTES) + .GetPlatformFile(), + &creation_time, &last_access_time, &last_write_time)); + ASSERT_TRUE(::SetFileTime( + base::File(start_menu_shortcut_path_, + base::File::FLAG_OPEN | base::File::FLAG_WRITE_ATTRIBUTES) + .GetPlatformFile(), + &creation_time, &last_access_time, &last_write_time)); + + // Get the filetimes. + base::File::Info manifest_info_before = {}; + ASSERT_TRUE(base::GetFileInfo(manifest_path_, &manifest_info_before)); + base::File::Info shortcut_info_before = {}; + ASSERT_TRUE( + base::GetFileInfo(start_menu_shortcut_path_, &shortcut_info_before)); + + // Perform a no-op update. + installer::UpdateVisualElementsManifest(test_dir_.GetPath(), version_, + supports_dark_text_); + + // Make sure neither file was modified. + base::File::Info manifest_info_after = {}; + ASSERT_TRUE(base::GetFileInfo(manifest_path_, &manifest_info_after)); + EXPECT_EQ(manifest_info_before.last_modified, + manifest_info_after.last_modified); + base::File::Info shortcut_info_after = {}; + ASSERT_TRUE( + base::GetFileInfo(start_menu_shortcut_path_, &shortcut_info_after)); + EXPECT_EQ(shortcut_info_before.last_modified, + shortcut_info_after.last_modified); + + // Perform an update where OS support flips. + installer::UpdateVisualElementsManifest(test_dir_.GetPath(), version_, + !supports_dark_text_); + + // The file should have been modified only if the brand has light assets. + ASSERT_TRUE(base::GetFileInfo(manifest_path_, &manifest_info_after)); + if (has_light_assets_) { + EXPECT_NE(manifest_info_before.last_modified, + manifest_info_after.last_modified); + } else { + EXPECT_EQ(manifest_info_before.last_modified, + manifest_info_after.last_modified); + } + ASSERT_TRUE( + base::GetFileInfo(start_menu_shortcut_path_, &shortcut_info_after)); + if (has_light_assets_) { + EXPECT_NE(shortcut_info_before.last_modified, + shortcut_info_after.last_modified); + } else { + EXPECT_EQ(shortcut_info_before.last_modified, + shortcut_info_after.last_modified); + } +} + TEST_F(InstallShortcutTest, CreateAllShortcuts) { installer::CreateOrUpdateShortcuts( chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, @@ -542,18 +780,3 @@ base::win::ValidateShortcut(user_start_menu_shortcut_, expected_start_menu_properties_); } - -TEST(EscapeXmlAttributeValueTest, EscapeCrazyValue) { - base::string16 val(L"This has 'crazy' \"chars\" && < and > signs."); - static const wchar_t kExpectedEscapedVal[] = - L"This has 'crazy' \"chars\" && < and > signs."; - installer::EscapeXmlAttributeValueInSingleQuotes(&val); - ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); -} - -TEST(EscapeXmlAttributeValueTest, DontEscapeNormalValue) { - base::string16 val(L"Google Chrome"); - static const wchar_t kExpectedEscapedVal[] = L"Google Chrome"; - installer::EscapeXmlAttributeValueInSingleQuotes(&val); - ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); -}
diff --git a/chrome/installer/setup/setup_util.cc b/chrome/installer/setup/setup_util.cc index 748210d..6938c84 100644 --- a/chrome/installer/setup/setup_util.cc +++ b/chrome/installer/setup/setup_util.cc
@@ -36,6 +36,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/version.h" #include "base/win/registry.h" +#include "base/win/windows_version.h" #include "chrome/install_static/install_details.h" #include "chrome/install_static/install_modes.h" #include "chrome/install_static/install_util.h" @@ -847,4 +848,10 @@ return base::Time::FromFileTime(filetime); } +bool OsSupportsDarkTextTiles() { + auto windows_version = base::win::GetVersion(); + return windows_version == base::win::VERSION_WIN8_1 || + windows_version >= base::win::VERSION_WIN10_RS1; +} + } // namespace installer
diff --git a/chrome/installer/setup/setup_util.h b/chrome/installer/setup/setup_util.h index 5fbc3a1..18375c0 100644 --- a/chrome/installer/setup/setup_util.h +++ b/chrome/installer/setup/setup_util.h
@@ -151,6 +151,10 @@ // a null time in case of error. base::Time GetConsoleSessionStartTime(); +// Returns true if the current OS vesion suppors drawing dark text on Start Menu +// tiles. +bool OsSupportsDarkTextTiles(); + } // namespace installer #endif // CHROME_INSTALLER_SETUP_SETUP_UTIL_H_
diff --git a/chrome/installer/zucchini/BUILD.gn b/chrome/installer/zucchini/BUILD.gn index 952e5bb6..871d1cf2 100644 --- a/chrome/installer/zucchini/BUILD.gn +++ b/chrome/installer/zucchini/BUILD.gn
@@ -140,6 +140,8 @@ "rel32_finder_unittest.cc", "rel32_utils_unittest.cc", "suffix_array_unittest.cc", + "test_disassembler.cc", + "test_disassembler.h", "test_reference_reader.cc", "test_reference_reader.h", "typed_value_unittest.cc",
diff --git a/chrome/installer/zucchini/encoded_view.cc b/chrome/installer/zucchini/encoded_view.cc index 11d85a6..acc8397 100644 --- a/chrome/installer/zucchini/encoded_view.cc +++ b/chrome/installer/zucchini/encoded_view.cc
@@ -10,27 +10,25 @@ namespace zucchini { -EncodedView::EncodedView(const ImageIndex* image_index) +EncodedView::EncodedView(const ImageIndex& image_index) : image_index_(image_index) {} -// static -EncodedView::value_type EncodedView::Projection(const ImageIndex& image_index, - offset_t location) { - DCHECK_LT(location, image_index.size()); +EncodedView::value_type EncodedView::Projection(offset_t location) const { + DCHECK_LT(location, image_index_.size()); // Find out what lies at |location|. - TypeTag type = image_index.GetType(location); + TypeTag type = image_index_.LookupType(location); // |location| points into raw data. if (type == kNoTypeTag) { // The projection is the identity function on raw content. - return image_index.GetRawValue(location); + return image_index_.GetRawValue(location); } // |location| points into a Reference. - Reference ref = image_index.FindReference(type, location); + Reference ref = image_index_.FindReference(type, location); DCHECK_GE(location, ref.location); - DCHECK_LT(location, ref.location + image_index.GetTraits(type).width); + DCHECK_LT(location, ref.location + image_index_.GetTraits(type).width); // |location| is not the first byte of the reference. if (location != ref.location) { @@ -40,26 +38,26 @@ // Targets with an associated Label will use its Label index in projection. // Otherwise, LabelBound() is used for all targets with no Label. - size_t target = IsMarked(ref.target) - ? UnmarkIndex(ref.target) - : image_index.LabelBound(image_index.GetPoolTag(type)); + value_type target = + IsMarked(ref.target) + ? UnmarkIndex(ref.target) + : image_index_.LabelBound(image_index_.GetPoolTag(type)); // Projection is done on (|target|, |type|), shifted by a constant value to // avoid collisions with raw content. - size_t projection = target; - projection *= image_index.TypeCount(); + value_type projection = target; + projection *= image_index_.TypeCount(); projection += type.value(); return projection + kBaseReferenceProjection; } size_t EncodedView::Cardinality() const { size_t max_width = 0; - for (uint8_t pool = 0; pool < image_index_->PoolCount(); ++pool) { + for (uint8_t pool = 0; pool < image_index_.PoolCount(); ++pool) { // LabelBound() + 1 for the extra case of references with no Label. - max_width = - std::max(image_index_->LabelBound(PoolTag(pool)) + 1, max_width); + max_width = std::max(image_index_.LabelBound(PoolTag(pool)) + 1, max_width); } - return max_width * image_index_->TypeCount() + kBaseReferenceProjection; + return max_width * image_index_.TypeCount() + kBaseReferenceProjection; } } // namespace zucchini
diff --git a/chrome/installer/zucchini/encoded_view.h b/chrome/installer/zucchini/encoded_view.h index f0b3fad..e63dede 100644 --- a/chrome/installer/zucchini/encoded_view.h +++ b/chrome/installer/zucchini/encoded_view.h
@@ -35,17 +35,15 @@ using reference = size_t; using pointer = size_t*; - Iterator(const ImageIndex* image_index, difference_type pos) - : image_index_(image_index), pos_(pos) {} + Iterator(const EncodedView& encoded_view, difference_type pos) + : encoded_view_(encoded_view), pos_(pos) {} value_type operator*() const { - return EncodedView::Projection(*image_index_, - static_cast<offset_t>(pos_)); + return encoded_view_.Projection(static_cast<offset_t>(pos_)); } value_type operator[](difference_type n) const { - return EncodedView::Projection(*image_index_, - static_cast<offset_t>(pos_ + n)); + return encoded_view_.Projection(static_cast<offset_t>(pos_ + n)); } Iterator& operator++() { @@ -107,7 +105,7 @@ } private: - const ImageIndex* image_index_; + const EncodedView& encoded_view_; difference_type pos_; }; @@ -116,30 +114,31 @@ using difference_type = ptrdiff_t; using const_iterator = Iterator; - // Projects |location| to a scalar value that describe the content on a higher - // level of abstraction. - static value_type Projection(const ImageIndex& image_index, - offset_t location); - // |image_index| is the annotated image being adapted, and is required to // remain valid for the lifetime of the object. - explicit EncodedView(const ImageIndex* image_index); + explicit EncodedView(const ImageIndex& image_index); + + // Projects |location| to a scalar value that describes the content at a + // higher level of abstraction. + value_type Projection(offset_t location) const; // Returns the cardinality of the projection, i.e., the upper bound on // values returned by Projection(). value_type Cardinality() const; - // View functions. - size_type size() const { return size_type(image_index_->size()); } + const ImageIndex& image_index() const { return image_index_; } + + // Range functions. + size_type size() const { return size_type(image_index_.size()); } const_iterator begin() const { - return const_iterator{image_index_, difference_type(0)}; + return const_iterator{*this, difference_type(0)}; } const_iterator end() const { - return const_iterator{image_index_, difference_type(size())}; + return const_iterator{*this, difference_type(size())}; } private: - const ImageIndex* image_index_; + const ImageIndex& image_index_; }; } // namespace zucchini
diff --git a/chrome/installer/zucchini/encoded_view_unittest.cc b/chrome/installer/zucchini/encoded_view_unittest.cc index 38031eb..78ba15c 100644 --- a/chrome/installer/zucchini/encoded_view_unittest.cc +++ b/chrome/installer/zucchini/encoded_view_unittest.cc
@@ -9,7 +9,7 @@ #include "chrome/installer/zucchini/image_index.h" #include "chrome/installer/zucchini/label_manager.h" -#include "chrome/installer/zucchini/test_reference_reader.h" +#include "chrome/installer/zucchini/test_disassembler.h" #include "testing/gtest/include/gtest/gtest.h" namespace zucchini { @@ -113,36 +113,33 @@ protected: EncodedViewTest() : buffer_(20), - image_index_(ConstBufferView(buffer_.data(), buffer_.size()), - {ReferenceTypeTraits{2, TypeTag(0), PoolTag(0)}, - ReferenceTypeTraits{4, TypeTag(1), PoolTag(0)}, - ReferenceTypeTraits{3, TypeTag(2), PoolTag(1)}}), - encoded_view_(&image_index_) { + image_index_(ConstBufferView(buffer_.data(), buffer_.size())) { for (uint8_t i = 0; i < buffer_.size(); ++i) { buffer_[i] = i; } - EXPECT_TRUE(image_index_.InsertReferences( - TypeTag(0), TestReferenceReader({{1, 0}, {8, 1}, {10, 2}}))); - EXPECT_TRUE(image_index_.InsertReferences(TypeTag(1), - TestReferenceReader({{3, 3}}))); - EXPECT_TRUE(image_index_.InsertReferences( - TypeTag(2), TestReferenceReader({{12, 4}, {17, 5}}))); + TestDisassembler disasm({2, TypeTag(0), PoolTag(0)}, + {{1, 0}, {8, 1}, {10, 2}}, + {4, TypeTag(1), PoolTag(0)}, {{3, 3}}, + {3, TypeTag(2), PoolTag(1)}, {{12, 4}, {17, 5}}); + image_index_.Initialize(&disasm); } - void CheckView(std::vector<size_t> expected) const { - for (offset_t i = 0; i < image_index_.size(); ++i) { - EXPECT_EQ(expected[i], EncodedView::Projection(image_index_, i)) << i; + void CheckView(std::vector<size_t> expected, + const EncodedView& encoded_view) const { + for (offset_t i = 0; i < encoded_view.size(); ++i) { + EXPECT_EQ(expected[i], encoded_view.Projection(i)) << i; } TestRandomAccessIterator(expected.begin(), expected.end(), - encoded_view_.begin(), encoded_view_.end()); + encoded_view.begin(), encoded_view.end()); } std::vector<uint8_t> buffer_; ImageIndex image_index_; - EncodedView encoded_view_; }; TEST_F(EncodedViewTest, Unlabeled) { + EncodedView encoded_view(image_index_); + std::vector<size_t> expected = { 0, // raw kBaseReferenceProjection + 0 + 0 * 3, // ref 0 @@ -165,11 +162,13 @@ PADDING, PADDING, }; - EXPECT_EQ(kBaseReferenceProjection + 3 * 1, encoded_view_.Cardinality()); - CheckView(expected); + EXPECT_EQ(kBaseReferenceProjection + 3 * 1, encoded_view.Cardinality()); + CheckView(expected, encoded_view); } TEST_F(EncodedViewTest, Labeled) { + EncodedView encoded_view(image_index_); + OrderedLabelManager label_manager0; label_manager0.InsertOffsets({0, 2}); image_index_.LabelTargets(PoolTag(0), label_manager0); @@ -196,8 +195,8 @@ PADDING, PADDING, }; - EXPECT_EQ(kBaseReferenceProjection + 3 * 3, encoded_view_.Cardinality()); - CheckView(expected); + EXPECT_EQ(kBaseReferenceProjection + 3 * 3, encoded_view.Cardinality()); + CheckView(expected, encoded_view); } } // namespace zucchini
diff --git a/chrome/installer/zucchini/equivalence_map.cc b/chrome/installer/zucchini/equivalence_map.cc index 9a31b88..6f029895 100644 --- a/chrome/installer/zucchini/equivalence_map.cc +++ b/chrome/installer/zucchini/equivalence_map.cc
@@ -21,8 +21,8 @@ DCHECK(old_image.IsToken(src)); DCHECK(new_image.IsToken(dst)); - TypeTag old_type = old_image.GetType(src); - TypeTag new_type = new_image.GetType(dst); + TypeTag old_type = old_image.LookupType(src); + TypeTag new_type = new_image.LookupType(dst); if (old_type != new_type) return kMismatchFatal; @@ -78,9 +78,10 @@ equivalence.dst_offset + k < new_image.size(); ++k) { // Mismatch in type, |candidate| cannot be extended further. - if (old_image.GetType(equivalence.src_offset + k) != - new_image.GetType(equivalence.dst_offset + k)) + if (old_image.LookupType(equivalence.src_offset + k) != + new_image.LookupType(equivalence.dst_offset + k)) { break; + } if (!new_image.IsToken(equivalence.dst_offset + k)) { // Non-tokens are joined with the nearest previous token: skip until we @@ -120,17 +121,19 @@ for (offset_t k = 1; k <= equivalence.dst_offset && k <= equivalence.src_offset; ++k) { // Mismatch in type, |candidate| cannot be extended further. - if (old_image.GetType(equivalence.src_offset - k) != - new_image.GetType(equivalence.dst_offset - k)) + if (old_image.LookupType(equivalence.src_offset - k) != + new_image.LookupType(equivalence.dst_offset - k)) { break; + } // Non-tokens are joined with the nearest previous token: skip until we // reach the next token. if (!new_image.IsToken(equivalence.dst_offset - k)) continue; - DCHECK(old_image.GetType(equivalence.src_offset - k) == - new_image.GetType(equivalence.dst_offset - k)); // Sanity check. + DCHECK_EQ( + old_image.LookupType(equivalence.src_offset - k), + new_image.LookupType(equivalence.dst_offset - k)); // Sanity check. double similarity = GetTokenSimilarity(old_image, new_image, equivalence.src_offset - k, equivalence.dst_offset - k); @@ -220,8 +223,8 @@ // This is an heuristic to find 'good' equivalences on encoded views. // Equivalences are found in ascending order of |new_image|. - EncodedView old_view(&old_image); - EncodedView new_view(&new_image); + EncodedView old_view(old_image); + EncodedView new_view(new_image); offset_t dst_offset = 0; while (dst_offset < new_image.size()) {
diff --git a/chrome/installer/zucchini/equivalence_map_unittest.cc b/chrome/installer/zucchini/equivalence_map_unittest.cc index 0f204f8..306bbe6 100644 --- a/chrome/installer/zucchini/equivalence_map_unittest.cc +++ b/chrome/installer/zucchini/equivalence_map_unittest.cc
@@ -11,7 +11,7 @@ #include "chrome/installer/zucchini/encoded_view.h" #include "chrome/installer/zucchini/image_index.h" #include "chrome/installer/zucchini/suffix_array.h" -#include "chrome/installer/zucchini/test_reference_reader.h" +#include "chrome/installer/zucchini/test_disassembler.h" #include "testing/gtest/include/gtest/gtest.h" namespace zucchini { @@ -25,20 +25,17 @@ // The result is populated with |refs0| and |refs1|. |a| is expected to be a // string literal valid for the lifetime of the object. ImageIndex MakeImageIndexForTesting(const char* a, - const std::vector<Reference>& refs0, - const std::vector<Reference>& refs1) { - std::vector<ReferenceTypeTraits> traits( - {ReferenceTypeTraits{kReferenceSize, TypeTag(0), PoolTag(0)}, - ReferenceTypeTraits{kReferenceSize, TypeTag(1), PoolTag(0)}}); + std::vector<Reference>&& refs0, + std::vector<Reference>&& refs1) { + TestDisassembler disasm( + {kReferenceSize, TypeTag(0), PoolTag(0)}, std::move(refs0), + {kReferenceSize, TypeTag(1), PoolTag(0)}, std::move(refs1), + {kReferenceSize, TypeTag(2), PoolTag(1)}, {}); ImageIndex image_index( - ConstBufferView(reinterpret_cast<const uint8_t*>(a), std::strlen(a)), - std::move(traits)); + ConstBufferView(reinterpret_cast<const uint8_t*>(a), std::strlen(a))); - EXPECT_TRUE( - image_index.InsertReferences(TypeTag(0), TestReferenceReader(refs0))); - EXPECT_TRUE( - image_index.InsertReferences(TypeTag(1), TestReferenceReader(refs1))); + EXPECT_TRUE(image_index.Initialize(&disasm)); return image_index; } @@ -217,7 +214,7 @@ auto test_build_equivalence = [](const ImageIndex old_index, const ImageIndex new_index, double minimum_similarity) { - EncodedView old_view(&old_index); + EncodedView old_view(old_index); std::vector<offset_t> old_sa = MakeSuffixArray<InducedSuffixSort>(old_view, old_view.Cardinality());
diff --git a/chrome/installer/zucchini/image_index.cc b/chrome/installer/zucchini/image_index.cc index d75d77e..c4f6d3d 100644 --- a/chrome/installer/zucchini/image_index.cc +++ b/chrome/installer/zucchini/image_index.cc
@@ -5,47 +5,38 @@ #include "chrome/installer/zucchini/image_index.h" #include <algorithm> +#include <utility> + +#include "chrome/installer/zucchini/disassembler.h" namespace zucchini { -ImageIndex::ImageIndex(ConstBufferView image, - std::vector<ReferenceTypeTraits>&& traits_map) - : raw_image_(image), - type_tags_(image.size(), kNoTypeTag), - types_(traits_map.size()) { - int pool_count = 0; - for (const auto& traits : traits_map) { - DCHECK_LT(traits.type_tag.value(), types_.size()); - types_[traits.type_tag.value()].traits = traits; - - DCHECK(kNoPoolTag != traits.pool_tag); - pool_count = std::max(pool_count, traits.pool_tag.value() + 1); - } - pools_.resize(pool_count); - for (const auto& traits : traits_map) { - pools_[traits.pool_tag.value()].types.push_back(traits.type_tag); - } -} +ImageIndex::ImageIndex(ConstBufferView image) + : image_(image), type_tags_(image.size(), kNoTypeTag) {} ImageIndex::ImageIndex(ImageIndex&& that) = default; ImageIndex::~ImageIndex() = default; -bool ImageIndex::InsertReferences(TypeTag type, ReferenceReader&& ref_reader) { - const ReferenceTypeTraits& traits = GetTraits(type); - for (base::Optional<Reference> ref = ref_reader.GetNext(); ref.has_value(); - ref = ref_reader.GetNext()) { - DCHECK_LE(ref->location + traits.width, size()); +bool ImageIndex::Initialize(Disassembler* disasm) { + std::vector<ReferenceGroup> ref_groups = disasm->MakeReferenceGroups(); - // Check for overlap with existing reference. If found, then invalidate. - if (std::any_of(type_tags_.begin() + ref->location, - type_tags_.begin() + ref->location + traits.width, - [](TypeTag type) { return type != kNoTypeTag; })) + for (const auto& group : ref_groups) { + // Store TypeInfo for current type (of |group|). + DCHECK_NE(kNoTypeTag, group.type_tag()); + auto result = types_.emplace(group.type_tag(), group.traits()); + DCHECK(result.second); + + // Find and store all references for current type, returns false on finding + // any overlap, to signal error. + if (!InsertReferences(group.type_tag(), + std::move(*group.GetReader(disasm)))) { return false; - std::fill(type_tags_.begin() + ref->location, - type_tags_.begin() + ref->location + traits.width, - traits.type_tag); - types_[traits.type_tag.value()].references.push_back(*ref); + } + + // Build pool-to-type mapping. + DCHECK_NE(kNoPoolTag, group.pool_tag()); + pools_[group.pool_tag()].types.push_back(group.type_tag()); } return true; } @@ -53,12 +44,12 @@ Reference ImageIndex::FindReference(TypeTag type, offset_t location) const { DCHECK_LE(location, size()); DCHECK_LT(type.value(), types_.size()); + const TypeInfo& type_info = types_.at(type); auto pos = std::upper_bound( - types_[type.value()].references.begin(), - types_[type.value()].references.end(), location, + type_info.references.begin(), type_info.references.end(), location, [](offset_t a, const Reference& ref) { return a < ref.location; }); - DCHECK(pos != types_[type.value()].references.begin()); + DCHECK(pos != type_info.references.begin()); --pos; DCHECK_LT(location, pos->location + GetTraits(type).width); return *pos; @@ -77,7 +68,7 @@ } bool ImageIndex::IsToken(offset_t location) const { - TypeTag type = GetType(location); + TypeTag type = LookupType(location); // |location| points into raw data. if (type == kNoTypeTag) @@ -91,20 +82,20 @@ void ImageIndex::LabelTargets(PoolTag pool, const BaseLabelManager& label_manager) { - for (const TypeTag& type : pools_[pool.value()].types) - for (auto& ref : types_[type.value()].references) + for (const TypeTag& type : pools_.at(pool).types) + for (auto& ref : types_.at(type).references) ref.target = label_manager.MarkedIndexFromOffset(ref.target); - pools_[pool.value()].label_bound = label_manager.size(); + pools_.at(pool).label_bound = label_manager.size(); } void ImageIndex::UnlabelTargets(PoolTag pool, const BaseLabelManager& label_manager) { - for (const TypeTag& type : pools_[pool.value()].types) - for (auto& ref : types_[type.value()].references) { + for (const TypeTag& type : pools_.at(pool).types) + for (auto& ref : types_.at(type).references) { ref.target = label_manager.OffsetFromMarkedIndex(ref.target); DCHECK(!IsMarked(ref.target)); // Expected to be represented as offset. } - pools_[pool.value()].label_bound = 0; + pools_.at(pool).label_bound = 0; } void ImageIndex::LabelAssociatedTargets( @@ -112,8 +103,8 @@ const BaseLabelManager& label_manager, const BaseLabelManager& reference_label_manager) { // Convert to marked indexes. - for (const auto& type : pools_[pool.value()].types) { - for (auto& ref : types_[type.value()].references) { + for (const auto& type : pools_.at(pool).types) { + for (auto& ref : types_.at(type).references) { // Represent Label as marked index iff the index is also in // |reference_label_manager|. DCHECK(!IsMarked(ref.target)); // Expected to be represented as offset. @@ -123,10 +114,35 @@ ref.target = MarkIndex(index); } } - pools_[pool.value()].label_bound = label_manager.size(); + pools_.at(pool).label_bound = label_manager.size(); } -ImageIndex::TypeInfo::TypeInfo() = default; +bool ImageIndex::InsertReferences(TypeTag type, ReferenceReader&& ref_reader) { + const ReferenceTypeTraits& traits = GetTraits(type); + TypeInfo& type_info = types_.at(traits.type_tag); + for (base::Optional<Reference> ref = ref_reader.GetNext(); ref.has_value(); + ref = ref_reader.GetNext()) { + DCHECK_LE(ref->location + traits.width, size()); + auto cur_type_tag = type_tags_.begin() + ref->location; + + // Check for overlap with existing reference. If found, then invalidate. + if (std::any_of(cur_type_tag, cur_type_tag + traits.width, + [](TypeTag type) { return type != kNoTypeTag; })) { + return false; + } + std::fill(cur_type_tag, cur_type_tag + traits.width, traits.type_tag); + type_info.references.push_back(*ref); + } + DCHECK(std::is_sorted(type_info.references.begin(), + type_info.references.end(), + [](const Reference& a, const Reference& b) { + return a.location < b.location; + })); + return true; +} + +ImageIndex::TypeInfo::TypeInfo(ReferenceTypeTraits traits_in) + : traits(traits_in) {} ImageIndex::TypeInfo::TypeInfo(TypeInfo&&) = default; ImageIndex::TypeInfo::~TypeInfo() = default;
diff --git a/chrome/installer/zucchini/image_index.h b/chrome/installer/zucchini/image_index.h index dd292ea7..68ff5f8 100644 --- a/chrome/installer/zucchini/image_index.h +++ b/chrome/installer/zucchini/image_index.h
@@ -8,6 +8,7 @@ #include <stddef.h> #include <stdint.h> +#include <map> #include <vector> #include "base/logging.h" @@ -18,22 +19,25 @@ namespace zucchini { +class Disassembler; + // A class that holds annotations of an image, allowing quick access to its // raw and reference content. The memory overhead of storing all references is // relatively high, so this is only used during patch generation. class ImageIndex { public: - ImageIndex(ConstBufferView image, - std::vector<ReferenceTypeTraits>&& traits_map); + explicit ImageIndex(ConstBufferView image); ImageIndex(const ImageIndex&) = delete; ImageIndex(ImageIndex&& that); ~ImageIndex(); - // Inserts all references of type |type_tag| read from |ref_reader| to this - // index. This should be called exactly once for each reference type. If - // overlap between any two references of any type is encountered, returns - // false and leaves the object in an invalid state. Otherwise, returns true. - bool InsertReferences(TypeTag type_tag, ReferenceReader&& ref_reader); + // Inserts all references read from |disasm|. This should be called exactly + // once. If overlap between any two references of any type is encountered, + // returns false and leaves the object in an invalid state. Otherwise, returns + // true. + // TODO(huangs): Refactor ReaderFactory and WriterFactory so + // |const Disassembler&| can be used here. + bool Initialize(Disassembler* disasm); // Returns the number of reference type the index holds. size_t TypeCount() const { return types_.size(); } @@ -41,38 +45,32 @@ // Returns the number of target pool discovered. size_t PoolCount() const { return pools_.size(); } - size_t LabelBound(PoolTag pool) const { - DCHECK_LT(pool.value(), pools_.size()); - return pools_[pool.value()].label_bound; - } + size_t LabelBound(PoolTag pool) const { return pools_.at(pool).label_bound; } // Returns traits describing references of type |type|. const ReferenceTypeTraits& GetTraits(TypeTag type) const { - DCHECK_LT(type.value(), types_.size()); - return types_[type.value()].traits; + return types_.at(type).traits; } PoolTag GetPoolTag(TypeTag type) const { return GetTraits(type).pool_tag; } const std::vector<TypeTag>& GetTypeTags(PoolTag pool) const { - DCHECK_LT(pool.value(), pools_.size()); - return pools_[pool.value()].types; + return pools_.at(pool).types; } - // Returns true if |raw_image_[location]| is either: + // Returns true if |image_[location]| is either: // - A raw value. // - The first byte of a reference. bool IsToken(offset_t location) const; - // Returns true if |raw_image_[location]| is part of a reference. + // Returns true if |image_[location]| is part of a reference. bool IsReference(offset_t location) const { - return GetType(location) != kNoTypeTag; + return LookupType(location) != kNoTypeTag; } // Returns the type tag of the reference covering |location|, or kNoTypeTag if // |location| is not part of a reference. - TypeTag GetType(offset_t location) const { - DCHECK_EQ(type_tags_.size(), raw_image_.size()); // Sanity check. + TypeTag LookupType(offset_t location) const { DCHECK_LT(location, size()); return type_tags_[location]; } @@ -80,25 +78,24 @@ // Returns the raw value at |location|. uint8_t GetRawValue(offset_t location) const { DCHECK_LT(location, size()); - return raw_image_[location]; + return image_[location]; } - // Returns the reference of type |type| covering |location|, which is expected - // to exist. + // Assumes that a reference of given |type| covers |location|, and returns the + // reference. Reference FindReference(TypeTag type, offset_t location) const; // Returns a vector of references of type |type|, where references are sorted // by their location. const std::vector<Reference>& GetReferences(TypeTag type) const { - DCHECK_LT(type.value(), types_.size()); - return types_[type.value()].references; + return types_.at(type).references; } // Creates and returns a vector of all targets in |pool|. std::vector<offset_t> GetTargets(PoolTag pool) const; // Returns the size of the image. - size_t size() const { return raw_image_.size(); } + size_t size() const { return image_.size(); } // Replaces every target represented as offset whose Label is in // |label_manager| by the index of this Label, and updates the Label bound @@ -124,7 +121,7 @@ private: // Information stored for every reference type. struct TypeInfo { - TypeInfo(); + explicit TypeInfo(ReferenceTypeTraits traits_in); TypeInfo(TypeInfo&&); ~TypeInfo(); @@ -142,14 +139,20 @@ size_t label_bound = 0; // Upper bound on Label indices for this pool. }; - const ConstBufferView raw_image_; + // Inserts to |*this| index, all references of type |type_tag| read from + // |ref_reader|, which gets consumed. This should be called exactly once for + // each reference type. If overlap between any two references of any type is + // encountered, returns false and leaves the object in an invalid state. + // Otherwise, returns true. + bool InsertReferences(TypeTag type_tag, ReferenceReader&& ref_reader); - // Used for random access lookup of reference type, for each byte in - // |raw_image_|. + const ConstBufferView image_; + + // Used for random access lookup of reference type, for each byte in |image_|. std::vector<TypeTag> type_tags_; - std::vector<TypeInfo> types_; - std::vector<PoolInfo> pools_; + std::map<TypeTag, TypeInfo> types_; + std::map<PoolTag, PoolInfo> pools_; }; } // namespace zucchini
diff --git a/chrome/installer/zucchini/image_index_unittest.cc b/chrome/installer/zucchini/image_index_unittest.cc index 024e32e..8823038 100644 --- a/chrome/installer/zucchini/image_index_unittest.cc +++ b/chrome/installer/zucchini/image_index_unittest.cc
@@ -11,7 +11,7 @@ #include "base/test/gtest_util.h" #include "chrome/installer/zucchini/image_utils.h" -#include "chrome/installer/zucchini/test_reference_reader.h" +#include "chrome/installer/zucchini/test_disassembler.h" #include "testing/gtest/include/gtest/gtest.h" namespace zucchini { @@ -20,29 +20,16 @@ protected: ImageIndexTest() : buffer_(20), - image_index_(ConstBufferView(buffer_.data(), buffer_.size()), - {ReferenceTypeTraits{2, TypeTag(0), PoolTag(0)}, - ReferenceTypeTraits{4, TypeTag(1), PoolTag(0)}, - ReferenceTypeTraits{3, TypeTag(2), PoolTag(1)}}) { + image_index_(ConstBufferView(buffer_.data(), buffer_.size())) { std::iota(buffer_.begin(), buffer_.end(), 0); } - void InsertReferences0() { - EXPECT_TRUE(image_index_.InsertReferences( - TypeTag(0), TestReferenceReader({{1, 0}, {8, 1}, {10, 2}}))); - } - void InsertReferences1() { - EXPECT_TRUE(image_index_.InsertReferences(TypeTag(1), - TestReferenceReader({{3, 3}}))); - } - void InsertReferences2() { - EXPECT_TRUE(image_index_.InsertReferences( - TypeTag(2), TestReferenceReader({{12, 4}, {17, 5}}))); - } - void InsertAllReferences() { - InsertReferences0(); - InsertReferences1(); - InsertReferences2(); + void InitializeWithDefaultTestData() { + TestDisassembler disasm({2, TypeTag(0), PoolTag(0)}, + {{1, 0}, {8, 1}, {10, 2}}, + {4, TypeTag(1), PoolTag(0)}, {{3, 3}}, + {3, TypeTag(2), PoolTag(1)}, {{12, 4}, {17, 5}}); + EXPECT_TRUE(image_index_.Initialize(&disasm)); } std::vector<uint8_t> buffer_; @@ -50,7 +37,10 @@ }; TEST_F(ImageIndexTest, TypeAndPool) { - InsertAllReferences(); + TestDisassembler disasm({2, TypeTag(0), PoolTag(0)}, {}, + {4, TypeTag(1), PoolTag(0)}, {}, + {3, TypeTag(2), PoolTag(1)}, {}); + EXPECT_TRUE(image_index_.Initialize(&disasm)); EXPECT_EQ(3U, image_index_.TypeCount()); EXPECT_EQ(2U, image_index_.PoolCount()); @@ -64,22 +54,25 @@ } TEST_F(ImageIndexTest, InvalidInsertReferences1) { - // Overlap within the same reader. - EXPECT_FALSE(image_index_.InsertReferences( - TypeTag(0), TestReferenceReader({{1, 0}, {2, 0}}))); + // Overlap within the same group. + TestDisassembler disasm({2, TypeTag(0), PoolTag(0)}, {{1, 0}, {2, 0}}, + {4, TypeTag(1), PoolTag(0)}, {}, + {3, TypeTag(2), PoolTag(1)}, {}); + EXPECT_FALSE(image_index_.Initialize(&disasm)); } TEST_F(ImageIndexTest, InvalidInsertReferences2) { - InsertReferences0(); - InsertReferences1(); + TestDisassembler disasm({2, TypeTag(0), PoolTag(0)}, + {{1, 0}, {8, 1}, {10, 2}}, + {4, TypeTag(1), PoolTag(0)}, {{3, 3}}, + {3, TypeTag(2), PoolTag(1)}, {{11, 0}}); // Overlap across different readers. - EXPECT_FALSE(image_index_.InsertReferences(TypeTag(2), - TestReferenceReader({{11, 0}}))); + EXPECT_FALSE(image_index_.Initialize(&disasm)); } -TEST_F(ImageIndexTest, GetType) { - InsertAllReferences(); +TEST_F(ImageIndexTest, LookupType) { + InitializeWithDefaultTestData(); std::vector<int> expected = { -1, // raw @@ -94,11 +87,11 @@ }; for (offset_t i = 0; i < image_index_.size(); ++i) - EXPECT_EQ(TypeTag(expected[i]), image_index_.GetType(i)); + EXPECT_EQ(TypeTag(expected[i]), image_index_.LookupType(i)); } TEST_F(ImageIndexTest, IsToken) { - InsertAllReferences(); + InitializeWithDefaultTestData(); std::vector<bool> expected = { 1, // raw @@ -117,7 +110,7 @@ } TEST_F(ImageIndexTest, IsReference) { - InsertAllReferences(); + InitializeWithDefaultTestData(); std::vector<bool> expected = { 0, // raw @@ -131,13 +124,12 @@ 1, 1, 1, // ref 2 }; - for (offset_t i = 0; i < image_index_.size(); ++i) { + for (offset_t i = 0; i < image_index_.size(); ++i) EXPECT_EQ(expected[i], image_index_.IsReference(i)); - } } TEST_F(ImageIndexTest, FindReference) { - InsertAllReferences(); + InitializeWithDefaultTestData(); EXPECT_DCHECK_DEATH(image_index_.FindReference(TypeTag(0), 0)); EXPECT_EQ(Reference({1, 0}), image_index_.FindReference(TypeTag(0), 1)); @@ -151,7 +143,7 @@ } TEST_F(ImageIndexTest, LabelTargets) { - InsertAllReferences(); + InitializeWithDefaultTestData(); OrderedLabelManager label_manager0; label_manager0.InsertOffsets({0, 2, 3, 4}); @@ -189,7 +181,7 @@ } TEST_F(ImageIndexTest, LabelAssociatedTargets) { - InsertAllReferences(); + InitializeWithDefaultTestData(); OrderedLabelManager label_manager; label_manager.InsertOffsets({0, 1, 2, 3, 4});
diff --git a/chrome/installer/zucchini/test_disassembler.cc b/chrome/installer/zucchini/test_disassembler.cc new file mode 100644 index 0000000..bfd30b0c --- /dev/null +++ b/chrome/installer/zucchini/test_disassembler.cc
@@ -0,0 +1,59 @@ +// 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 "chrome/installer/zucchini/test_disassembler.h" + +#include "base/memory/ptr_util.h" +#include "chrome/installer/zucchini/test_reference_reader.h" + +namespace zucchini { + +TestDisassembler::TestDisassembler(const ReferenceTypeTraits& traits1, + const std::vector<Reference>& refs1, + const ReferenceTypeTraits& traits2, + const std::vector<Reference>& refs2, + const ReferenceTypeTraits& traits3, + const std::vector<Reference>& refs3) + : traits_{traits1, traits2, traits3}, refs_{refs1, refs2, refs3} {} + +TestDisassembler::~TestDisassembler() = default; + +ExecutableType TestDisassembler::GetExeType() const { + return kExeTypeUnknown; +} + +std::string TestDisassembler::GetExeTypeString() const { + return "(Unknown)"; +} + +std::vector<ReferenceGroup> TestDisassembler::MakeReferenceGroups() const { + return { + {traits_[0], &TestDisassembler::MakeReadRefs1, + &TestDisassembler::MakeWriteRefs1}, + {traits_[1], &TestDisassembler::MakeReadRefs2, + &TestDisassembler::MakeWriteRefs2}, + {traits_[2], &TestDisassembler::MakeReadRefs3, + &TestDisassembler::MakeWriteRefs3}, + }; +} + +bool TestDisassembler::Parse(ConstBufferView image) { + return true; +} + +std::unique_ptr<ReferenceReader> TestDisassembler::MakeReadRefs(int type) { + return base::MakeUnique<TestReferenceReader>(refs_[type]); +} + +std::unique_ptr<ReferenceWriter> TestDisassembler::MakeWriteRefs( + MutableBufferView image) { + class NoOpWriter : public ReferenceWriter { + public: + // ReferenceWriter: + void PutNext(Reference) override {} + }; + return base::MakeUnique<NoOpWriter>(); +} + +} // namespace zucchini
diff --git a/chrome/installer/zucchini/test_disassembler.h b/chrome/installer/zucchini/test_disassembler.h new file mode 100644 index 0000000..17d948b4 --- /dev/null +++ b/chrome/installer/zucchini/test_disassembler.h
@@ -0,0 +1,78 @@ +// 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 CHROME_INSTALLER_ZUCCHINI_TEST_DISASSEMBLER_H_ +#define CHROME_INSTALLER_ZUCCHINI_TEST_DISASSEMBLER_H_ + +#include <memory> +#include <string> +#include <vector> + +#include "base/macros.h" +#include "chrome/installer/zucchini/buffer_view.h" +#include "chrome/installer/zucchini/disassembler.h" +#include "chrome/installer/zucchini/image_utils.h" + +namespace zucchini { + +// A trivial Disassembler that reads injected references of 3 different types. +// This is only meant for testing and is not a full implementation of a +// disassembler. Reading reference ignores bounds, and writing references does +// nothing. +class TestDisassembler : public Disassembler { + public: + TestDisassembler(const ReferenceTypeTraits& traits1, + const std::vector<Reference>& refs1, + const ReferenceTypeTraits& traits2, + const std::vector<Reference>& refs2, + const ReferenceTypeTraits& traits3, + const std::vector<Reference>& refs3); + ~TestDisassembler() override; + + // Disassembler: + ExecutableType GetExeType() const override; + std::string GetExeTypeString() const override; + std::vector<ReferenceGroup> MakeReferenceGroups() const override; + + // Disassembler::ReaderFactory: + std::unique_ptr<ReferenceReader> MakeReadRefs1(offset_t /*lower*/, + offset_t /*upper*/) { + return MakeReadRefs(0); + } + std::unique_ptr<ReferenceReader> MakeReadRefs2(offset_t /*lower*/, + offset_t /*upper*/) { + return MakeReadRefs(1); + } + std::unique_ptr<ReferenceReader> MakeReadRefs3(offset_t /*lower*/, + offset_t /*upper*/) { + return MakeReadRefs(2); + } + + // Disassembler::WriterFactory: + std::unique_ptr<ReferenceWriter> MakeWriteRefs1(MutableBufferView image) { + return MakeWriteRefs(image); + } + std::unique_ptr<ReferenceWriter> MakeWriteRefs2(MutableBufferView image) { + return MakeWriteRefs(image); + } + std::unique_ptr<ReferenceWriter> MakeWriteRefs3(MutableBufferView image) { + return MakeWriteRefs(image); + } + + private: + // Disassembler: + bool Parse(ConstBufferView image) override; + + std::unique_ptr<ReferenceReader> MakeReadRefs(int type); + std::unique_ptr<ReferenceWriter> MakeWriteRefs(MutableBufferView image); + + ReferenceTypeTraits traits_[3]; + std::vector<Reference> refs_[3]; + + DISALLOW_COPY_AND_ASSIGN(TestDisassembler); +}; + +} // namespace zucchini + +#endif // CHROME_INSTALLER_ZUCCHINI_TEST_DISASSEMBLER_H_
diff --git a/chrome/installer/zucchini/typed_value.h b/chrome/installer/zucchini/typed_value.h index ba12d35..9096e37c 100644 --- a/chrome/installer/zucchini/typed_value.h +++ b/chrome/installer/zucchini/typed_value.h
@@ -5,6 +5,8 @@ #ifndef CHROME_INSTALLER_ZUCCHINI_TYPED_VALUE_H_ #define CHROME_INSTALLER_ZUCCHINI_TYPED_VALUE_H_ +#include <ostream> + namespace zucchini { // Strong typed values, with compare and convert functions for underlying data. @@ -45,6 +47,11 @@ T value_ = {}; }; +template <class Tag, class T> +std::ostream& operator<<(std::ostream& os, const TypedValue<Tag, T>& tag) { + return os << tag.value(); +} + } // namespace zucchini #endif // CHROME_INSTALLER_ZUCCHINI_TYPED_VALUE_H_
diff --git a/chrome/installer/zucchini/zucchini_gen.cc b/chrome/installer/zucchini/zucchini_gen.cc index b41b8b6b..abcdf99 100644 --- a/chrome/installer/zucchini/zucchini_gen.cc +++ b/chrome/installer/zucchini/zucchini_gen.cc
@@ -32,30 +32,22 @@ // TODO(etiennep): Figure out if this should be a member function of ImageIndex. std::vector<offset_t> MakeSuffixArrayFromImageIndex( const ImageIndex& image_index) { - EncodedView view(&image_index); + EncodedView view(image_index); return MakeSuffixArray<InducedSuffixSort>(view, view.Cardinality()); } } // namespace base::Optional<ImageIndex> MakeImageIndex(Disassembler* disasm) { - std::vector<ReferenceGroup> ref_groups = disasm->MakeReferenceGroups(); - std::vector<ReferenceTypeTraits> reference_traits(ref_groups.size()); - std::transform(ref_groups.begin(), ref_groups.end(), reference_traits.begin(), - [](const ReferenceGroup& group) { return group.traits(); }); - ImageIndex image_index(disasm->GetImage(), std::move(reference_traits)); - for (const ReferenceGroup& ref_group : ref_groups) { - // An error occurs if overlapping references are found. This can be caused - // by malformed images or Zucchini bug, but this is not a fatal mistake. - // Return nullopt so caller can mitigate this (e.g., by generating raw - // patches instead). - if (!image_index.InsertReferences( - ref_group.type_tag(), std::move(*ref_group.GetReader(disasm)))) { - LOG(WARNING) << "Warning: Overlapping references detected."; - return base::nullopt; - } - } - return image_index; + ImageIndex image_index(disasm->GetImage()); + if (image_index.Initialize(disasm)) + return image_index; + // An error occurs if overlapping references are found. This can be caused + // by malformed images or Zucchini bug, but this is not a fatal mistake. + // Return nullopt so caller can mitigate this (e.g., by generating raw + // patches instead). + LOG(WARNING) << "Warning: Overlapping references detected."; + return base::nullopt; } std::vector<offset_t> MakeNewTargetsFromEquivalenceMap( @@ -295,8 +287,8 @@ ConstBufferView old_image, ConstBufferView new_image, PatchElementWriter* patch_writer) { - ImageIndex old_image_index(old_image, {}); - ImageIndex new_image_index(new_image, {}); + ImageIndex old_image_index(old_image); + ImageIndex new_image_index(new_image); EquivalenceMap equivalences; equivalences.Build(old_sa, old_image_index, new_image_index, @@ -427,8 +419,8 @@ EnsemblePatchWriter* patch_writer) { patch_writer->SetPatchType(PatchType::kRawPatch); - ImageIndex old_image_index(old_image, {}); - EncodedView old_view(&old_image_index); + ImageIndex old_image_index(old_image); + EncodedView old_view(old_image_index); std::vector<offset_t> old_sa = MakeSuffixArray<InducedSuffixSort>(old_view, old_view.Cardinality());
diff --git a/chrome/installer/zucchini/zucchini_gen_unittest.cc b/chrome/installer/zucchini/zucchini_gen_unittest.cc index b5a0295b..02e496f 100644 --- a/chrome/installer/zucchini/zucchini_gen_unittest.cc +++ b/chrome/installer/zucchini/zucchini_gen_unittest.cc
@@ -4,12 +4,14 @@ #include "chrome/installer/zucchini/zucchini_gen.h" +#include <stdint.h> + #include <vector> #include "chrome/installer/zucchini/equivalence_map.h" #include "chrome/installer/zucchini/image_index.h" #include "chrome/installer/zucchini/image_utils.h" -#include "chrome/installer/zucchini/test_reference_reader.h" +#include "chrome/installer/zucchini/test_disassembler.h" #include "testing/gtest/include/gtest/gtest.h" namespace zucchini { @@ -25,22 +27,16 @@ // Creates and initialize an ImageIndex from |a| and with 2 types of references. // The result is populated with |refs0| and |refs1|. |a| is expected to be a // string literal valid for the lifetime of the object. -// TODO(huangs): Update this to use TestDisassembler. ImageIndex MakeImageIndexForTesting(const char* a, const std::vector<Reference>& refs0, const std::vector<Reference>& refs1) { - std::vector<ReferenceTypeTraits> traits( - {ReferenceTypeTraits{kReferenceSize, TypeTag(0), PoolTag(0)}, - ReferenceTypeTraits{kReferenceSize, TypeTag(1), PoolTag(0)}}); - + TestDisassembler disasm({kReferenceSize, TypeTag(0), PoolTag(0)}, refs0, + {kReferenceSize, TypeTag(1), PoolTag(0)}, refs1, + {kReferenceSize, TypeTag(2), PoolTag(1)}, {}); ImageIndex image_index( - ConstBufferView(reinterpret_cast<const uint8_t*>(a), std::strlen(a)), - std::move(traits)); + ConstBufferView(reinterpret_cast<const uint8_t*>(a), std::strlen(a))); - EXPECT_TRUE( - image_index.InsertReferences(TypeTag(0), TestReferenceReader(refs0))); - EXPECT_TRUE( - image_index.InsertReferences(TypeTag(1), TestReferenceReader(refs1))); + EXPECT_TRUE(image_index.Initialize(&disasm)); return image_index; }
diff --git a/chrome/profiling/profiling_manifest.json b/chrome/profiling/profiling_manifest.json index 001dc2dc..c393f57 100644 --- a/chrome/profiling/profiling_manifest.json +++ b/chrome/profiling/profiling_manifest.json
@@ -7,8 +7,8 @@ "memlog": [ "profiling::mojom::Memlog" ] }, "requires": { - "service_manager": [ "service_manager:all_users" ], - "content_browser": [ "utility" ] + "*": [ "app" ], + "service_manager": [ "service_manager:all_users" ] } } }
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc index 8a1a0f1..bcfa1562 100644 --- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc +++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -3182,6 +3182,15 @@ ASSERT_FALSE(GetCalledShowManualFallbackSuggestion()); } +TEST_F(PasswordAutofillAgentTest, NotShowShowAllSavedPasswordsTestBlacklisted) { + SetManualFallbacks(); + LoadHTML(kFormHTML); + password_autofill_agent_->BlacklistedFormFound(); + SetFocused(password_element_); + SimulateElementClick("password"); + EXPECT_FALSE(GetCalledShowManualFallbackSuggestion()); +} + TEST_F(PasswordAutofillAgentTest, UpdateSuggestionsIfNewerCredentialsAreSupplied) { // Supply old fill data
diff --git a/chrome/renderer/plugins/pdf_plugin_placeholder.cc b/chrome/renderer/plugins/pdf_plugin_placeholder.cc index f8536573..878b402f 100644 --- a/chrome/renderer/plugins/pdf_plugin_placeholder.cc +++ b/chrome/renderer/plugins/pdf_plugin_placeholder.cc
@@ -4,6 +4,7 @@ #include "chrome/renderer/plugins/pdf_plugin_placeholder.h" +#include "chrome/common/pdf_uma.h" #include "chrome/common/render_messages.h" #include "chrome/grit/renderer_resources.h" #include "content/public/renderer/render_thread.h" @@ -44,6 +45,7 @@ } void PDFPluginPlaceholder::OpenPDFCallback() { + ReportPDFLoadStatus(PDFLoadStatus::kViewPdfClickedInPdfPluginPlaceholder); content::RenderThread::Get()->Send( new ChromeViewHostMsg_OpenPDF(routing_id(), GetPluginParams().url)); }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 07c6c04..03ecd2f2 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -259,6 +259,10 @@ } if (toolkit_views) { public_deps += [ "//ui/views:test_support" ] + sources += [ + "views/chrome_views_test_base.cc", + "views/chrome_views_test_base.h", + ] } } @@ -325,6 +329,7 @@ public_deps = [ "//chrome/browser:test_support_ui", + "//content/public/browser", ] deps = [ "//components/metrics:test_support", @@ -1115,6 +1120,7 @@ ":browser_tests_runner", ":test_support", "//base", + "//chrome/browser/profiling_host:profiling_browsertests", "//components/spellcheck:build_features", "//components/sync:test_support_model", "//extensions/features", @@ -1399,7 +1405,6 @@ "../browser/printing/print_browsertest.cc", "../browser/printing/print_preview_dialog_controller_browsertest.cc", "../browser/printing/print_preview_pdf_generated_browsertest.cc", - "../browser/printing/pwg_raster_converter_browsertest.cc", "../browser/process_singleton_browsertest.cc", "../browser/profile_resetter/profile_resetter_browsertest.cc", "../browser/profiles/host_zoom_map_browsertest.cc", @@ -3043,6 +3048,8 @@ "../browser/android/mock_location_settings.cc", "../browser/android/mock_location_settings.h", "../browser/android/net/external_estimate_provider_android_unittest.cc", + "../browser/android/ntp/content_suggestions_notifier_service_unittest.cc", + "../browser/android/ntp/content_suggestions_notifier_unittest.cc", "../browser/android/physical_web/eddystone_encoder_bridge_unittest.cc", "../browser/android/physical_web/physical_web_data_source_android_unittest.cc", "../browser/android/preferences/pref_service_bridge_unittest.cc", @@ -3174,7 +3181,6 @@ "../browser/media/media_engagement_contents_observer_unittest.cc", "../browser/media/media_engagement_score_unittest.cc", "../browser/media/media_engagement_service_unittest.cc", - "../browser/media/media_storage_id_salt_unittest.cc", "../browser/media/midi_permission_context_unittest.cc", "../browser/media/midi_sysex_permission_context_unittest.cc", "../browser/media/router/browser_presentation_connection_proxy_unittest.cc", @@ -3198,6 +3204,7 @@ "../browser/metrics/thread_watcher_android_unittest.cc", "../browser/metrics/thread_watcher_unittest.cc", "../browser/mod_pagespeed/mod_pagespeed_metrics_unittest.cc", + "../browser/net/chrome_http_user_agent_settings_unittest.cc", "../browser/net/chrome_network_delegate_unittest.cc", "../browser/net/dns_probe_runner_unittest.cc", "../browser/net/dns_probe_service_unittest.cc", @@ -4278,7 +4285,6 @@ "../browser/media/webrtc/desktop_media_list_ash_unittest.cc", "../browser/renderer_context_menu/mock_render_view_context_menu.cc", "../browser/renderer_context_menu/mock_render_view_context_menu.h", - "../browser/renderer_context_menu/open_with_menu_factory_ash_unittest.cc", "../browser/signin/signin_error_notifier_ash_unittest.cc", "../browser/sync/sync_error_notifier_ash_unittest.cc",
diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn index a4bb870d..ae0de22 100644 --- a/chrome/test/android/BUILD.gn +++ b/chrome/test/android/BUILD.gn
@@ -75,6 +75,7 @@ "//base:base_java", "//base:base_java_test_support", "//chrome/android:chrome_java", + "//chrome/android/third_party/widget_bottomsheet_base:widget_bottomsheet_base_java", "//components/bookmarks/common/android:bookmarks_java", "//components/invalidation/impl:java", "//components/location/android:location_java",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeTabUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeTabUtils.java index 4270a739..7eae4da 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeTabUtils.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeTabUtils.java
@@ -12,6 +12,7 @@ import org.chromium.base.Log; import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CallbackHelper; +import org.chromium.base.test.util.ScalableTimeout; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeTabbedActivity; @@ -128,7 +129,8 @@ }); try { - loadedCallback.waitForCallback(0); + loadedCallback.waitForCallback( + 0, 1, ScalableTimeout.scaleTimeout(10), TimeUnit.SECONDS); } catch (TimeoutException e) { // In the event that: // 1) the tab is on the correct page
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java index cd30f413..a5898f8 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java
@@ -144,4 +144,7 @@ public NotificationChannel getNotificationChannel(String channelId) { return null; } + + @Override + public void deleteNotificationChannelGroup(String groupId) {} }
diff --git a/chrome/test/data/android/webvr_instrumentation/html/test_gamepad_button.html b/chrome/test/data/android/webvr_instrumentation/html/test_gamepad_button.html new file mode 100644 index 0000000..cfb0022 --- /dev/null +++ b/chrome/test/data/android/webvr_instrumentation/html/test_gamepad_button.html
@@ -0,0 +1,41 @@ +<!doctype html> +<!-- +Tests that either screen taps are registered in VR when viewer is Cardboard +or that controller clicks are registered as screen taps in VR when viewer is +Daydream View. +--> +<html> + <head> + <link rel="stylesheet" type="text/css" href="../resources/webvr_e2e.css"> + </head> + <body> + <canvas id="webgl-canvas"></canvas> + <script src="../../../../../../third_party/WebKit/LayoutTests/resources/testharness.js"></script> + <script src="../resources/webvr_e2e.js"></script> + <script src="../resources/webvr_boilerplate.js"></script> + <script> + var t = async_test("Screen taps/clicks registered when in VR"); + window.addEventListener("vrdisplaypresentchange", + () => {finishJavaScriptStep();}, false); + var pressed = false; + var index = -1; + window.addEventListener("gamepadconnected", function(e) { + t.step( () => { + assert_equals(index, -1, "Should only receive gamepadconnected once"); + index = e.gamepad.index; + }); + }); + onAnimationFrameCallback = function() { + if (index == -1) return; + var gp = navigator.getGamepads()[index]; + if (!pressed && gp.buttons[0].pressed == true) { + pressed = true; + finishJavaScriptStep(); + } + if (pressed && gp.buttons[0].pressed == false) { + t.done(); + } + } + </script> + </body> +</html>
diff --git a/chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_not_registered_on_daydream.html b/chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_not_registered.html similarity index 86% rename from chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_not_registered_on_daydream.html rename to chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_not_registered.html index d140567..1cde607 100644 --- a/chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_not_registered_on_daydream.html +++ b/chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_not_registered.html
@@ -1,7 +1,6 @@ <!doctype html> <!-- -Tests that screen taps aren't registered while in VR when viewer is -Daydream View +Tests that screen taps aren't registered while in VR --> <html> <head> @@ -13,7 +12,7 @@ <script src="../resources/webvr_e2e.js"></script> <script src="../resources/webvr_boilerplate.js"></script> <script> - var t = async_test("Screen taps not registered when in VR w/ DD View"); + var t = async_test("Screen taps not registered when in VR"); window.addEventListener("vrdisplaypresentchange", () => {finishJavaScriptStep();}, false); var numTaps = 0;
diff --git a/chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_registered.html b/chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_registered.html deleted file mode 100644 index 6e53492..0000000 --- a/chrome/test/data/android/webvr_instrumentation/html/test_screen_taps_registered.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!doctype html> -<!-- -Tests that either screen taps are registered in VR when viewer is Cardboard -or that controller clicks are registered as screen taps in VR when viewer is -Daydream View. ---> -<html> - <head> - <link rel="stylesheet" type="text/css" href="../resources/webvr_e2e.css"> - </head> - <body> - <canvas id="webgl-canvas"></canvas> - <script src="../../../../../../third_party/WebKit/LayoutTests/resources/testharness.js"></script> - <script src="../resources/webvr_e2e.js"></script> - <script src="../resources/webvr_boilerplate.js"></script> - <script> - var t = async_test("Screen taps/clicks registered when in VR"); - window.addEventListener("vrdisplaypresentchange", - () => {finishJavaScriptStep();}, false); - var numTaps = 0; - webglCanvas.addEventListener("click", - () => { - numTaps++; - // Notify Java when we've received the tap after entering VR - if (numTaps == 2) { - t.done(); - } - }, false); - - function stepVerifyNoInitialTaps() { - t.step( () => { - assert_equals(numTaps, 0, "No initial taps"); - }); - finishJavaScriptStep(); - } - </script> - </body> -</html>
diff --git a/chrome/test/data/local_ntp_browsertest.html b/chrome/test/data/local_ntp/local_ntp_browsertest.html similarity index 95% rename from chrome/test/data/local_ntp_browsertest.html rename to chrome/test/data/local_ntp/local_ntp_browsertest.html index b79b341..74710d5 100644 --- a/chrome/test/data/local_ntp_browsertest.html +++ b/chrome/test/data/local_ntp/local_ntp_browsertest.html
@@ -9,8 +9,9 @@ <script src="chrome-search://local-ntp/local-ntp.js"></script> <script src="chrome-search://most-visited/util.js"></script> <link rel="stylesheet" href="chrome-search://local-ntp/local-ntp.css"></link> + <script src="test_utils.js"></script> <script src="local_ntp_browsertest.js"></script> - <template id="local-ntp-body"> + <template id="local-ntp-template"> <div id="ntp-contents"> <div id="logo" title="Google"></div> <div id="fakebox">
diff --git a/chrome/test/data/local_ntp/local_ntp_browsertest.js b/chrome/test/data/local_ntp/local_ntp_browsertest.js new file mode 100644 index 0000000..d49c936 --- /dev/null +++ b/chrome/test/data/local_ntp/local_ntp_browsertest.js
@@ -0,0 +1,139 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +/** + * @fileoverview Tests the local NTP. + */ + + +/** + * Local NTP's object for test and setup functions. + */ +test.localNtp = {}; + + +/** + * Sets up the page for each individual test. + */ +test.localNtp.setUp = function() { + setUpPage('local-ntp-template'); +}; + + +// ******************************* SIMPLE TESTS ******************************* +// These are run by runSimpleTests above. +// Functions from test_utils.js are automatically imported. + + +/** + * Tests that Google NTPs show a fakebox and logo. + */ +test.localNtp.testShowsFakeboxAndLogoIfGoogle = function() { + initLocalNTP(/*isGooglePage=*/true); + assert(elementIsVisible($('fakebox'))); + assert(elementIsVisible($('logo'))); +}; + + +/** + * Tests that non-Google NTPs do not show a fakebox. + */ +test.localNtp.testDoesNotShowFakeboxIfNotGoogle = function() { + initLocalNTP(/*isGooglePage=*/false); + assert(!elementIsVisible($('fakebox'))); + assert(!elementIsVisible($('logo'))); +}; + + +/** + * Tests that the embeddedSearch.newTabPage.mostVisited API is + * hooked up, and provides the correct data for the tiles (i.e. only + * IDs, no URLs). + */ +test.localNtp.testMostVisitedContents = function() { + // Check that the API is available and properly hooked up, so that it returns + // some data (see history::PrepopulatedPageList for the default contents). + assert(window.chrome.embeddedSearch.newTabPage.mostVisited.length > 0); + + // Check that the items have the required fields: We expect a "restricted ID" + // (rid), but there mustn't be url, title, etc. Those are only available + // through getMostVisitedItemData(rid). + for (var mvItem of window.chrome.embeddedSearch.newTabPage.mostVisited) { + assert(isFinite(mvItem.rid)); + assert(!mvItem.url); + assert(!mvItem.title); + assert(!mvItem.domain); + } + + // Try to get an item's details via getMostVisitedItemData. This should fail, + // because that API is only available to the MV iframe. + assert(!window.chrome.embeddedSearch.newTabPage.getMostVisitedItemData( + window.chrome.embeddedSearch.newTabPage.mostVisited[0].rid)); +}; + + +// ***************************** HELPER FUNCTIONS ***************************** +// Helper functions used in tests. + + +/** + * Creates and initializes a LocalNTP object. + * @param {boolean} isGooglePage Whether to make it a Google-branded NTP. + */ +function initLocalNTP(isGooglePage) { + configData.isGooglePage = isGooglePage; + var localNTP = LocalNTP(); + localNTP.init(); +} + + +// ****************************** ADVANCED TESTS ****************************** +// Advanced tests are controlled from the native side. The helpers here are +// called from native code to set up the page and to check results. + +function handlePostMessage(event) { + if (event.data.cmd == 'loaded') { + domAutomationController.send('loaded'); + } +} + + +function setupAdvancedTest(opt_waitForIframeLoaded) { + if (opt_waitForIframeLoaded) { + window.addEventListener('message', handlePostMessage); + } + + setUpPage('local-ntp-template'); + initLocalNTP(/*isGooglePage=*/true); + + assert(elementIsVisible($('fakebox'))); + + return true; +} + + +function getFakeboxPositionX() { + assert(elementIsVisible($('fakebox'))); + var rect = $('fakebox').getBoundingClientRect(); + return rect.left; +} + + +function getFakeboxPositionY() { + assert(elementIsVisible($('fakebox'))); + var rect = $('fakebox').getBoundingClientRect(); + return rect.top; +} + + +function fakeboxIsVisible() { + return elementIsVisible($('fakebox')); +} + + +function fakeboxIsFocused() { + return fakeboxIsVisible() && + document.body.classList.contains('fakebox-focused'); +}
diff --git a/chrome/test/data/local_ntp/test_utils.js b/chrome/test/data/local_ntp/test_utils.js new file mode 100644 index 0000000..068fa2d --- /dev/null +++ b/chrome/test/data/local_ntp/test_utils.js
@@ -0,0 +1,322 @@ +// 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. + + +/** + * @fileoverview Test utilities for JavaScript tests of the local NTP. + */ + + +/** + * Object for individual "module" objects, that then contain tests. + */ +var test = {}; + + +/** + * Shortcut for document.getElementById. + * @param {string} id of the element. + * @return {HTMLElement} with the id. + */ +function $(id) { + return document.getElementById(id); +} + + +/** + * Sets up the page for the next test case. Recreates a part of + * the default local NTP DOM (test specific, based on the template). + * @param {!string} templateId ID of the element to clone into the body element. + */ +function setUpPage(templateId) { + // First, clear up the DOM and state left over from any previous test case. + document.body.innerHTML = ''; + // The NTP stores some state such as fakebox focus in the body's classList. + document.body.classList = ''; + + document.body.appendChild($(templateId).content.cloneNode(true)); +} + + +/** + * Aborts a test if a condition is not met. + * @param {boolean} condition The condition that must be true. + * @param {string=} opt_message A message to log if the condition is not met. + */ +function assert(condition, opt_message) { + if (!condition) { + throw new Error(opt_message || 'Assertion failed'); + } +} + + +/** + * Aborts a test if |expected| !== |got|. + * @param {object} expected The expected value. + * @param {object} got The obtained value. + * @param {string=} opt_message A message to log if the paremeters + * are not equal. + */ +function assertEquals(expected, got, opt_message) { + if (expected !== got) { + throw new Error(opt_message || `Expected: '${expected}', got: '${got}'`); + } +} + + +/** + * Aborts a test if the |throws| function does not throw an error, + * or the error message does not contain |expected|. + * @param {!string} expected The expected error message substring. + * @param {!Function} throws The function that should throw an error with + * a message containing |expected| as a substring. + * @param {string=} opt_message A message to log if this assertion fails. + */ +function assertThrows(expected, throws, opt_message) { + try { + throws.call(); + } catch (err) { + if (err.message.includes(expected)) { + return; + } + throw new Error(opt_message || `Expected: '${expected}', got: '${err}'`); + } + throw new Error(opt_message || 'Got no error.'); +} + + +/** + * Calls |runTest()| on all simple tests within the |test[moduleName]| object + * (any function in that object whose name starts with 'test'). + * @param {!string} moduleName Name of the module to test (used as + * an index into |test|). + * @return {boolean} True if all tests pass and false otherwise. + */ +function runSimpleTests(moduleName) { + let totalTests = 0; + let passedTests = 0; + const testModule = window.test[moduleName]; + if (!testModule) { + throw new Error('Failed to find tests for module: ' + moduleName); + } + + for (let testName in testModule) { + if (/^test.+/.test(testName) && typeof testModule[testName] == 'function') { + totalTests++; + try { + if (runTest(testModule, testName)) { + passedTests++; + } + } catch (err) { + console.log('Error occurred while running tests, aborting.'); + return false; + } + } + } + window.console.log(`Passed tests: ${passedTests}/${totalTests}`); + return passedTests == totalTests; +} + + +/** + * Sets up the environment using the |testModule.setUp()| function + * if it exists, and calls the function under test, |testModule[testName]|. + * The setup function is assumed to be provided by the browser + * test script. In case setup fails, the error is logged and another error + * is raised, which will abort the test procedure in |runSimpleTests()|. + * @param {!object} testModule The object that contains tests for a module + * (a property of |test|). + * @param {!string} testName The name of the test function to run. + * @return {boolean} True iff the test function succeeds (does not + * throw an error). + */ +function runTest(testModule, testName) { + try { + if (typeof testModule.setUp === 'function') { + testModule.setUp(); + } + } catch (err) { + window.console.log(`Setup for '${testName}' failed: ${err}`); + window.console.log('Stacktrace:\n' + err.stack); + throw new Error('Setup failed, aborting tests.'); + } + + // Run the test function. + try { + testModule[testName].call(testModule); + } catch (err) { + window.console.log(`Test '${testName}' failed: ${err}`); + window.console.log('Stacktrace:\n' + err.stack); + return false; + } + return true; +} + + +/** + * Checks whether a given HTMLElement exists and is visible. + * @param {HTMLElement|undefined} elem An HTMLElement. + * @return {boolean} True if the element exists and is visible. + */ +function elementIsVisible(elem) { + return elem && elem.offsetWidth > 0 && elem.offsetHeight > 0 && + window.getComputedStyle(elem).visibility != 'hidden'; +} + + +// ***************************** HELPER OBJECTS ***************************** +// Helper objects used for mocking in tests. + + +/** + * A property replacer utility object. Useful for substituting real functions + * and properties with mocks and then reverting the changes. Inspired by + * Closure's PropertyReplacer class. + */ +function Replacer() { + /** + * A dictionary of temporary objects that contain a reference to + * the property's parent object (|parent|), and the property's + * original value (|value|). + */ + this.old_ = {}; + + + /** + * Replaces the property |propertyName| of the object |parent| with the + * |newValue|. Stores the old value of the property to enable resetting + * in |reset()|. + * @param {!object} parent The object containg the property |propertyName|. + * @param {!string} propertyName The name of the property. + * @param {object} newValue The new value of the property. + */ + this.replace = function(parent, propertyName, newValue) { + if (!(propertyName in parent)) { + throw new Error( + `Cannot replace missing property "${propertyName}" in parent.`); + } + this.old_[propertyName] = {}; + this.old_[propertyName].value = parent[propertyName]; + this.old_[propertyName].parent = parent; + parent[propertyName] = newValue; + }; + + + /** + * Resets every property that was overriden by |replace()| to its original + * value. + */ + this.reset = function() { + Object.entries(this.old_).forEach(([propertyName, saved]) => { + saved.parent[propertyName] = saved.value; + }); + this.old_ = {}; + }; +} + + +/** + * Utility for testing code that uses |setTimeout()| and |clearTimeout()|. + * Inspired by Closure's MockClock class. + */ +function MockClock() { + /** + * The current time, in milliseconds. + */ + this.time = 0; + + + /** + * Records the timeouts that have been set and not yet executed, as an array + * of {callback, activationTime, id} objects, ordered by activationTime. + */ + this.pendingTimeouts = []; + + + /** + * An internal counter for assigning timeout ids. + */ + this.nextTimeoutId_ = 0; + + + /** + * Property replacer, used for replacing |setTimeout()| and |clearTimeout()|. + */ + this.stubs_ = new Replacer(); + + + /** + * Sets the current time that sbox.getTime returns. + * @param {!number} msec The time in milliseconds. + */ + this.setTime = function(msec) { + assert(this.time <= msec); + this.time = msec; + }; + + + /** + * Advances the current time by the specified number of milliseconds. + * @param {!number} msec The length of time to advance the current time by. + */ + this.advanceTime = function(msec) { + assert(msec >= 0); + this.time += msec; + }; + + + /** + * Restores the |setTimeout()| and |clearTimeout()| functions back to their + * original implementation. + */ + this.reset = function() { + this.time = 0; + this.pendingTimeouts = []; + this.nextTimeoutId_ = 0; + this.stubs_.reset(); + }; + + + /** + * Checks whether a timeout with this id has been set. + * @param {!number} id The timeout id. + * @return True iff a timeout with this id has been set and the timeout + * has not yet fired. + */ + this.isTimeoutSet = function(id) { + return id < this.nextTimeoutId_ && + this.pendingTimeouts.map(t => t.id).includes(id); + }; + + + /** + * Substitutes the global |setTimeout()| and |clearTimeout()| functions + * with their mocked variants, until |reset()| is called. + */ + this.install = function() { + this.stubs_.replace(window, 'clearTimeout', (id) => { + if (!id) { + return; + } + for (let i = 0; i < this.pendingTimeouts.length; ++i) { + if (this.pendingTimeouts[i].id == id) { + this.pendingTimeouts.splice(i, 1); + return; + } + } + }); + this.stubs_.replace(window, 'setTimeout', (callback, interval) => { + const timeoutId = ++this.nextTimeoutId_; + this.pendingTimeouts.push({ + 'callback': callback, + 'activationTime': this.time + interval, + 'id': timeoutId + }); + this.pendingTimeouts.sort(function(a, b) { + return a.activationTime - b.activationTime; + }); + return timeoutId; + }); + }; +}
diff --git a/chrome/test/data/local_ntp/voice_browsertest.html b/chrome/test/data/local_ntp/voice_browsertest.html new file mode 100644 index 0000000..7df0b084 --- /dev/null +++ b/chrome/test/data/local_ntp/voice_browsertest.html
@@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> +<!-- 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. --> +<head> + <script src="chrome-search://local-ntp/voice.js"></script> + <link rel="stylesheet" href="chrome-search://local-ntp/voice.css"></link> + <script src="test_utils.js"></script> + <!-- Browser test script files for individual modules: --> + <script src="voice_microphone_browsertest.js"></script> + <!-- Templates: (keep in sync with local_ntp.html) --> + <template id="voice-microphone-template"> + <div id="voice-button-container" class="button-container"> + <!-- The audio level animation. --> + <span id="voice-level" class="level"></span> + <!-- The microphone button. --> + <span id="voice-button" class="button"> + <!-- The microphone icon (in CSS). --> + <div class="microphone"></div> + </span> + </div> + </template> +</head> +<body> +</body> +</html>
diff --git a/chrome/test/data/local_ntp/voice_microphone_browsertest.js b/chrome/test/data/local_ntp/voice_microphone_browsertest.js new file mode 100644 index 0000000..1d764d4 --- /dev/null +++ b/chrome/test/data/local_ntp/voice_microphone_browsertest.js
@@ -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. + + +/** + * @fileoverview Tests the microphone module of Voice Search on the local NTP. + */ + + +/** + * Voice Search Microphone module's object for test and setup functions. + */ +test.microphone = {}; + + +/** + * Utility to test code that uses timeouts. + * @type {MockClock} + */ +test.microphone.clock = new MockClock(); + + +/** + * Set up the microphone DOM and test environment. + */ +test.microphone.setUp = function() { + microphone.isLevelAnimating_ = false; + test.microphone.clock.reset(); + + setUpPage('voice-microphone-template'); + microphone.init(); + + test.microphone.clock.install(); +}; + + +/** + * Makes sure the microphone module sets up with the correct settings. + */ +test.microphone.testInitialization = function() { + assert(!microphone.isLevelAnimating_); +}; + + +/** + * Make sure the volume level animation starts. + */ +test.microphone.testStartLevelAnimationFromInactive = function() { + microphone.startInputAnimation(); + assert(microphone.isLevelAnimating_); +}; + + +/** + * Make sure the level animation stops. + */ +test.microphone.testStopLevelAnimationFromActive = function() { + microphone.startInputAnimation(); + microphone.stopInputAnimation(); + assert(!microphone.isLevelAnimating_); +}; + + +/** + * Make sure the level animation doesn't start again. + */ +test.microphone.testStartLevelAnimationFromActive = function() { + // Start the animation. + test.microphone.clock.setTime(1); + microphone.startInputAnimation(); + assert(microphone.isLevelAnimating_); + assertEquals(1, test.microphone.clock.pendingTimeouts.length); + const stepOneTimeoutId = test.microphone.clock.pendingTimeouts[0].id; + + // Try to start the animation again and observe that it hasn't restarted. + microphone.startInputAnimation(); + assert(microphone.isLevelAnimating_); + assertEquals(1, test.microphone.clock.pendingTimeouts.length); + assertEquals(stepOneTimeoutId, test.microphone.clock.pendingTimeouts[0].id); +};
diff --git a/chrome/test/data/local_ntp_browsertest.js b/chrome/test/data/local_ntp_browsertest.js deleted file mode 100644 index ab4a97e..0000000 --- a/chrome/test/data/local_ntp_browsertest.js +++ /dev/null
@@ -1,180 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - - -/** - * @fileoverview Tests the local NTP. - */ - - -/** - * Shortcut for document.getElementById. - * @param {string} id of the element. - * @return {HTMLElement} with the id. - */ -function $(id) { - return document.getElementById(id); -} - - -/** - * Sets up for the next test case. Recreates the default local NTP DOM. - */ -function setUp() { - // First, clear up the DOM and state left over from any previous test case. - document.body.innerHTML = ''; - // The NTP stores some state such as fakebox focus in the body's classList. - document.body.classList = ''; - - document.body.appendChild($('local-ntp-body').content.cloneNode(true)); -} - -/** - * Aborts a test if a condition is not met. - * @param {boolean} condition The condition that must be true. - * @param {string=} opt_message A message to log if the condition is not met. - */ -function assert(condition, opt_message) { - if (!condition) - throw new Error(opt_message || 'Assertion failed'); -} - -/** - * Runs all simple tests, i.e. those that don't require interaction from the - * native side. - * @return {boolean} True if all tests pass and false otherwise. - */ -function runSimpleTests() { - var pass = true; - for (var testName in window) { - if (/^test.+/.test(testName) && typeof window[testName] == 'function') { - try { - setUp(); - window[testName].call(window); - } catch (err) { - window.console.log(testName + ' ' + err); - pass = false; - } - } - } - return pass; -} - - -/** - * Creates and initializes a LocalNTP object. - * @param {boolean} isGooglePage Whether to make it a Google-branded NTP. - */ -function initLocalNTP(isGooglePage) { - configData.isGooglePage = isGooglePage; - var localNTP = LocalNTP(); - localNTP.init(); -} - - -/** - * Checks whether a given HTMLElement exists and is visible. - * @param {HTMLElement|undefined} elem An HTMLElement. - * @return {boolean} True if the element exists and is visible. - */ -function elementIsVisible(elem) { - return elem && elem.offsetWidth > 0 && elem.offsetHeight > 0 && - window.getComputedStyle(elem).visibility != 'hidden'; -} - - -// ******************************* SIMPLE TESTS ******************************* -// These are run by runSimpleTests above. - - -/** - * Tests that Google NTPs show a fakebox and logo. - */ -function testShowsFakeboxAndLogoIfGoogle() { - initLocalNTP(/*isGooglePage=*/true); - assert(elementIsVisible($('fakebox'))); - assert(elementIsVisible($('logo'))); -} - - -/** - * Tests that non-Google NTPs do not show a fakebox. - */ -function testDoesNotShowFakeboxIfNotGoogle() { - initLocalNTP(/*isGooglePage=*/false); - assert(!elementIsVisible($('fakebox'))); - assert(!elementIsVisible($('logo'))); -} - - -/** - * Tests that the embeddedSearch.newTabPage.mostVisited API is hooked up, and - * provides the correct data for the tiles (i.e. only IDs, no URLs). - */ -function testMostVisitedContents() { - // Check that the API is available and properly hooked up, so that it returns - // some data (see history::PrepopulatedPageList for the default contents). - assert(window.chrome.embeddedSearch.newTabPage.mostVisited.length > 0); - - // Check that the items have the required fields: We expect a "restricted ID" - // (rid), but there mustn't be url, title, etc. Those are only available - // through getMostVisitedItemData(rid). - for (var mvItem of window.chrome.embeddedSearch.newTabPage.mostVisited) { - assert(isFinite(mvItem.rid)); - assert(!mvItem.url); - assert(!mvItem.title); - assert(!mvItem.domain); - } - - // Try to get an item's details via getMostVisitedItemData. This should fail, - // because that API is only available to the MV iframe. - assert(!window.chrome.embeddedSearch.newTabPage.getMostVisitedItemData( - window.chrome.embeddedSearch.newTabPage.mostVisited[0].rid)); -} - - - -// ****************************** ADVANCED TESTS ****************************** -// Advanced tests are controlled from the native side. The helpers here are -// called from native code to set up the page and to check results. - -function handlePostMessage(event) { - if (event.data.cmd == 'loaded') { - domAutomationController.send('loaded'); - } -} - -function setupAdvancedTest(opt_waitForIframeLoaded) { - if (opt_waitForIframeLoaded) { - window.addEventListener('message', handlePostMessage); - } - - setUp(); - initLocalNTP(/*isGooglePage=*/true); - - assert(elementIsVisible($('fakebox'))); - - return true; -} - -function getFakeboxPositionX() { - assert(elementIsVisible($('fakebox'))); - var rect = $('fakebox').getBoundingClientRect(); - return rect.left; -} - -function getFakeboxPositionY() { - assert(elementIsVisible($('fakebox'))); - var rect = $('fakebox').getBoundingClientRect(); - return rect.top; -} - -function fakeboxIsVisible() { - return elementIsVisible($('fakebox')); -} - -function fakeboxIsFocused() { - return fakeboxIsVisible() && - document.body.classList.contains('fakebox-focused'); -}
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 228b4572..a4bc300 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -319,6 +319,45 @@ ] }, + "NativePrintersBulkConfiguration": { + "os": ["chromeos"], + "test_policy": { + "NativePrintersBulkConfiguration": { + "url": "https://example.com/policyfile", + "hash": "deadbeefdeadbeefdeadbeef" + } + } + }, + + "NativePrintersBulkAccessMode": { + "os": ["chromeos"], + "test_policy": { + "NativePrintersBulkAccessMode": 1 + }, + "pref_mappings": [ + { "pref": "native_printing.recommended_printers_access_mode" } + ] + }, + + "NativePrintersBulkBlacklist": { + "os": ["chromeos"], + "test_policy": { + "NativePrintersBulkBlacklist": ["id4", "id7", "id10"] + }, + "pref_mappings": [ + { "pref": "native_printing.recommended_printers_blacklist" } + ] + }, + "NativePrintersBulkWhitelist": { + "os": ["chromeos"], + "test_policy": { + "NativePrintersBulkWhitelist": ["id4", "id7", "id10"] + }, + "pref_mappings": [ + { "pref": "native_printing.recommended_printers_whitelist" } + ] + }, + "SafeBrowsingEnabled": { "os": ["win", "linux", "mac", "chromeos"], "can_be_recommended": true,
diff --git a/chrome/test/data/printing/pdf_to_pwg_raster_test.pdf b/chrome/test/data/printing/pdf_to_pwg_raster_test.pdf deleted file mode 100644 index 9bddc46..0000000 --- a/chrome/test/data/printing/pdf_to_pwg_raster_test.pdf +++ /dev/null Binary files differ
diff --git a/chrome/test/data/printing/pdf_to_pwg_raster_test.pwg b/chrome/test/data/printing/pdf_to_pwg_raster_test.pwg deleted file mode 100644 index f9c5b68..0000000 --- a/chrome/test/data/printing/pdf_to_pwg_raster_test.pwg +++ /dev/null Binary files differ
diff --git a/chrome/test/data/subresource_filter/frame_set_special_urls.html b/chrome/test/data/subresource_filter/frame_set_special_urls.html index 46acbf0..e216330 100644 --- a/chrome/test/data/subresource_filter/frame_set_special_urls.html +++ b/chrome/test/data/subresource_filter/frame_set_special_urls.html
@@ -11,6 +11,12 @@ script.src = "included_script.js"; blankFrame.contentDocument.body.appendChild(script); + // Add a grandchild and add content to the grandchild frame. + let grandChild = document.createElement("iframe"); + grandChild.name = "grandChild"; + grandChild.src = "frame_with_included_script.html"; + blankFrame.contentDocument.body.appendChild(grandChild); + let jsFrame = document.getElementsByName("js")[0]; let script2 = document.createElement("script"); script2.src = "included_script.js";
diff --git a/chrome/test/data/webrtc/peerconnection_rtp.js b/chrome/test/data/webrtc/peerconnection_rtp.js index a01d888c..7f4e2ebe 100644 --- a/chrome/test/data/webrtc/peerconnection_rtp.js +++ b/chrome/test/data/webrtc/peerconnection_rtp.js
@@ -230,23 +230,7 @@ function createReceiverWithSetRemoteDescription() { var pc = new RTCPeerConnection(); var receivers = null; - pc.setRemoteDescription({ - type: "offer", - sdp: "v=0\n" + - "o=- 0 1 IN IP4 0.0.0.0\n" + - "s=-\n" + - "t=0 0\n" + - "a=ice-ufrag:0000\n" + - "a=ice-pwd:0000000000000000000000\n" + - "a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:" + - "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00\n" + - "m=audio 9 UDP/TLS/RTP/SAVPF 0\n" + - "c=IN IP4 0.0.0.0\n" + - "a=sendonly\n" + - "a=rtcp-mux\n" + - "a=ssrc:1 cname:0\n" + - "a=ssrc:1 msid:stream track1\n" - }).then(() => { + pc.setRemoteDescription(createOffer("stream", "track1")).then(() => { receivers = pc.getReceivers(); if (receivers.length != 1) throw failTest('getReceivers() should return 1 receiver: ' + @@ -261,6 +245,36 @@ receivers.length) } +function switchRemoteStreamAndBackAgain() { + let pc1 = new RTCPeerConnection(); + let firstStream0 = null; + let firstTrack0 = null; + pc1.setRemoteDescription(createOffer('stream0', 'track0')) + .then(() => { + firstStream0 = pc1.getRemoteStreams()[0]; + firstTrack0 = firstStream0.getTracks()[0]; + if (firstStream0.id != 'stream0') + throw failTest('Unexpected firstStream0.id'); + if (firstTrack0.id != 'track0') + throw failTest('Unexpected firstTrack0.id'); + return pc1.setRemoteDescription(createOffer('stream1', 'track1')); + }).then(() => { + return pc1.setRemoteDescription(createOffer('stream0', 'track0')); + }).then(() => { + let secondStream0 = pc1.getRemoteStreams()[0]; + let secondTrack0 = secondStream0.getTracks()[0]; + if (secondStream0.id != 'stream0') + throw failTest('Unexpected secondStream0.id'); + if (secondTrack0.id != 'track0') + throw failTest('Unexpected secondTrack0.id'); + if (secondTrack0 == firstTrack0) + throw failTest('Expected a new track object with the same id'); + if (secondStream0 == firstStream0) + throw failTest('Expected a new stream object with the same id'); + returnToTest('ok'); + }); +} + /** * Invokes the GC and returns "ok-gc". */ @@ -271,6 +285,26 @@ // Internals. +function createOffer(streamId, trackId) { + return { + type: "offer", + sdp: "v=0\n" + + "o=- 0 1 IN IP4 0.0.0.0\n" + + "s=-\n" + + "t=0 0\n" + + "a=ice-ufrag:0000\n" + + "a=ice-pwd:0000000000000000000000\n" + + "a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:" + + "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00\n" + + "m=audio 9 UDP/TLS/RTP/SAVPF 0\n" + + "c=IN IP4 0.0.0.0\n" + + "a=sendonly\n" + + "a=rtcp-mux\n" + + "a=ssrc:1 cname:0\n" + + "a=ssrc:1 msid:" + streamId + " " + trackId + "\n" + }; +} + /** @private */ function hasStreamWithTrack(streams, streamId, trackId) { for (let i = 0; i < streams.length; ++i) {
diff --git a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js index 7aac99f..4307eec 100644 --- a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js +++ b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
@@ -102,6 +102,10 @@ // Extension Item Tests var CrExtensionsItemsTest = class extends CrExtensionsBrowserTest { + get browsePreload() { + return 'chrome://extensions/item.html'; + } + /** @override */ get extraLibraries() { return super.extraLibraries.concat([
diff --git a/chrome/test/data/webui/extensions/extension_item_test.js b/chrome/test/data/webui/extensions/extension_item_test.js index 778a40cb..3a7e6ce 100644 --- a/chrome/test/data/webui/extensions/extension_item_test.js +++ b/chrome/test/data/webui/extensions/extension_item_test.js
@@ -85,10 +85,6 @@ /** @type {extension_test_util.MockItemDelegate} */ var mockDelegate; - suiteSetup(function() { - return PolymerTest.importHtml('chrome://extensions/item.html'); - }); - // Initialize an extension item before each test. setup(function() { PolymerTest.clearBody(); @@ -132,18 +128,23 @@ item.$$('#inspect-views a[is="action-link"]'), 'inspectItemView', [item.data.id, item.data.views[0]]); - var listener1 = new extension_test_util.ListenerMock(); - listener1.addListener( - item, 'extension-item-show-details', {data: item.data}); - MockInteractions.tap(item.$$('#details-button')); - listener1.verify(); + // Setup for testing navigation buttons. + var currentPage = null; + extensions.navigation.onRouteChanged(newPage => { + currentPage = newPage; + }); - var listener2 = new extension_test_util.ListenerMock(); - listener2.addListener( - item, 'extension-item-show-details', {data: item.data}); + MockInteractions.tap(item.$$('#details-button')); + expectDeepEquals( + currentPage, {page: Page.DETAILS, extensionId: item.data.id}); + + // Reset current page and test inspect-view navigation. + extensions.navigation.navigateTo({page: Page.LIST}); + currentPage = null; MockInteractions.tap( item.$$('#inspect-views a[is="action-link"]:nth-of-type(2)')); - listener2.verify(); + expectDeepEquals( + currentPage, {page: Page.DETAILS, extensionId: item.data.id}); item.set('data.disableReasons.corruptInstall', true); Polymer.dom.flush();
diff --git a/chrome/test/data/webui/extensions/extension_manager_test.js b/chrome/test/data/webui/extensions/extension_manager_test.js index d07bbcc..0a21c39 100644 --- a/chrome/test/data/webui/extensions/extension_manager_test.js +++ b/chrome/test/data/webui/extensions/extension_manager_test.js
@@ -177,8 +177,8 @@ manager.addItem(secondExtension); var data = manager.extensions[0]; // TODO(scottchen): maybe testing too many things in a single unit test. - manager.$['items-list'].fire( - 'extension-item-show-details', {data: extension}); + extensions.navigation.navigateTo( + {page: Page.DETAILS, extensionId: extension.id}); Polymer.dom.flush(); var detailsView = manager.$['details-view']; expectEquals(extension.id, detailsView.data.id);
diff --git a/chrome/test/data/webui/print_preview/print_preview_tests.js b/chrome/test/data/webui/print_preview/print_preview_tests.js index 4e4f9a3..b2d94904 100644 --- a/chrome/test/data/webui/print_preview/print_preview_tests.js +++ b/chrome/test/data/webui/print_preview/print_preview_tests.js
@@ -576,17 +576,18 @@ return nativeLayer.whenCalled('getPrinterCapabilities'); }).then(function() { var otherOptions = $('other-options-settings'); + var scalingSettings = $('scaling-settings'); // If rasterization is an option, other options should be visible. // If not, there should be no available other options. checkSectionVisible(otherOptions, isPrintAsImageEnabled()); if (isPrintAsImageEnabled()) { checkElementDisplayed( - otherOptions.querySelector('#fit-to-page-container'), false); - checkElementDisplayed( otherOptions.querySelector('#rasterize-container'), true); } checkSectionVisible($('media-size-settings'), false); - checkSectionVisible($('scaling-settings'), false); + checkSectionVisible(scalingSettings, false); + checkElementDisplayed( + scalingSettings.querySelector('#fit-to-page-container'), false); }); }); @@ -595,12 +596,12 @@ test('SourceIsHTMLCapabilities', function() { return setupSettingsAndDestinationsWithCapabilities().then(function() { var otherOptions = $('other-options-settings'); - var fitToPage = otherOptions.querySelector('#fit-to-page-container'); var rasterize; if (isPrintAsImageEnabled()) rasterize = otherOptions.querySelector('#rasterize-container'); var mediaSize = $('media-size-settings'); var scalingSettings = $('scaling-settings'); + var fitToPage = scalingSettings.querySelector('#fit-to-page-container'); // Check that options are collapsed (section is visible, because // duplex is available). @@ -631,7 +632,7 @@ var otherOptions = $('other-options-settings'); var scalingSettings = $('scaling-settings'); var fitToPageContainer = - otherOptions.querySelector('#fit-to-page-container'); + scalingSettings.querySelector('#fit-to-page-container'); var rasterizeContainer; if (isPrintAsImageEnabled()) { rasterizeContainer = @@ -661,36 +662,44 @@ // we show/hide the fit to page option and hide media size selection. test('ScalingUnchecksFitToPage', function() { initialSettings.isDocumentModifiable_ = false; - return setupSettingsAndDestinationsWithCapabilities().then(function() { - var otherOptions = $('other-options-settings'); - var scalingSettings = $('scaling-settings'); + // Wait for preview to load. + return Promise.all([setupSettingsAndDestinationsWithCapabilities(), + nativeLayer.whenCalled('getPreview')]).then( + function(args) { + var scalingSettings = $('scaling-settings'); + checkSectionVisible(scalingSettings, true); + var fitToPageContainer = + scalingSettings.querySelector('#fit-to-page-container'); + checkElementDisplayed(fitToPageContainer, true); + expectTrue(args[1].printTicketStore.fitToPage.getValue()); + expectEquals('100', args[1].printTicketStore.scaling.getValue()); + expectTrue(fitToPageContainer.querySelector('.checkbox').checked); + expandMoreSettings(); + checkSectionVisible($('media-size-settings'), true); + checkSectionVisible(scalingSettings, true); + nativeLayer.resetResolver('getPreview'); - checkSectionVisible(otherOptions, true); - var fitToPageContainer = - otherOptions.querySelector('#fit-to-page-container'); - checkElementDisplayed(fitToPageContainer, true); - expectTrue( - fitToPageContainer.querySelector('.checkbox').checked); - expandMoreSettings(); - checkSectionVisible($('media-size-settings'), true); - checkSectionVisible(scalingSettings, true); + // Change scaling input + var scalingInput = scalingSettings.querySelector('.user-value'); + expectEquals('100', scalingInput.value); + scalingInput.stepUp(5); + expectEquals('105', scalingInput.value); - // Change scaling input - var scalingInput = scalingSettings.querySelector('.user-value'); - expectEquals('100', scalingInput.value); - scalingInput.stepUp(5); - expectEquals('105', scalingInput.value); + // Trigger the event + var enterEvent = document.createEvent('Event'); + enterEvent.initEvent('keydown'); + enterEvent.keyCode = 'Enter'; + scalingInput.dispatchEvent(enterEvent); - // Trigger the event - var enterEvent = document.createEvent('Event'); - enterEvent.initEvent('keydown'); - enterEvent.keyCode = 'Enter'; - scalingInput.dispatchEvent(enterEvent); - expectFalse( - fitToPageContainer.querySelector('.checkbox').checked); - - return whenAnimationDone('other-options-collapsible'); - }); + // Wait for the preview to refresh and verify print ticket and + // display. + return nativeLayer.whenCalled('getPreview').then(function(args) { + expectFalse(args.printTicketStore.fitToPage.getValue()); + expectEquals('105', args.printTicketStore.scaling.getValue()); + expectFalse(fitToPageContainer.querySelector('.checkbox').checked); + return whenAnimationDone('more-settings'); + }); + }); }); // When the number of copies print preset is set for source 'PDF', we update
diff --git a/chrome/test/data/webui/settings/bluetooth_page_tests.js b/chrome/test/data/webui/settings/bluetooth_page_tests.js index e118fc0..5644558 100644 --- a/chrome/test/data/webui/settings/bluetooth_page_tests.js +++ b/chrome/test/data/webui/settings/bluetooth_page_tests.js
@@ -2,22 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -function getFakePrefs() { - return { - ash: { - user: { - bluetooth: { - adapter_enabled: { - key: 'ash.user.bluetooth.adapter_enabled', - type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: false, - } - } - } - } - }; -} - suite('Bluetooth', function() { var bluetoothPage = null; @@ -76,7 +60,6 @@ setup(function() { PolymerTest.clearBody(); bluetoothPage = document.createElement('settings-bluetooth-page'); - bluetoothPage.prefs = getFakePrefs(); assertTrue(!!bluetoothPage); bluetoothApi_.setDevicesForTest([]); @@ -90,54 +73,43 @@ test('MainPage', function() { assertFalse(bluetoothApi_.getAdapterStateForTest().powered); - assertFalse(bluetoothPage.prefs.ash.user.bluetooth.adapter_enabled.value); + assertFalse(bluetoothPage.bluetoothToggleState_); // Test that tapping the single settings-box div enables bluetooth. var div = bluetoothPage.$$('div.settings-box'); assertTrue(!!div); MockInteractions.tap(div); - assertTrue(bluetoothPage.prefs.ash.user.bluetooth.adapter_enabled.value); + assertTrue(bluetoothPage.bluetoothToggleState_); + assertTrue(bluetoothApi_.getAdapterStateForTest().powered); }); suite('SubPage', function() { var subpage; setup(function() { - assertFalse(bluetoothApi_.getAdapterStateForTest().powered); - assertFalse(bluetoothPage.prefs.ash.user.bluetooth.adapter_enabled.value); - var div = bluetoothPage.$$('div.settings-box'); - - // First tap will turn on bluetooth. - MockInteractions.tap(div); - assertTrue(bluetoothPage.prefs.ash.user.bluetooth.adapter_enabled.value); - bluetoothPage.adapterState_.powered = true; - // Second tap will open bluetooth subpage. - MockInteractions.tap(div); - + bluetoothApi_.setEnabled(true); Polymer.dom.flush(); + var div = bluetoothPage.$$('div.settings-box'); + MockInteractions.tap(div); subpage = bluetoothPage.$$('settings-bluetooth-subpage'); assertTrue(!!subpage); + assertTrue(subpage.bluetoothToggleState); + assertFalse(subpage.bluetoothToggleDisabled); }); - // Skipping all SubPage tests as this is currently flaky. - // TODO(sonnysasaka): re-enable these tests once the flakiness is fixed - // (http://crbug.com/756283). - test.skip('toggle', function() { - assertTrue(bluetoothPage.prefs.ash.user.bluetooth.adapter_enabled.value); + test('toggle', function() { + assertTrue(subpage.bluetoothToggleState); var enableButton = subpage.$.enableBluetooth; assertTrue(!!enableButton); assertTrue(enableButton.checked); - bluetoothPage.setPrefValue('ash.user.bluetooth.adapter_enabled', false); - + subpage.bluetoothToggleState = false; assertFalse(enableButton.checked); assertFalse(bluetoothApi_.getAdapterStateForTest().powered); - assertFalse(bluetoothPage.prefs.ash.user.bluetooth.adapter_enabled.value); + assertFalse(bluetoothPage.bluetoothToggleState_); }); - test.skip('paired device list', function() { - assertTrue(subpage.adapterState.powered); - + test('paired device list', function() { var pairedContainer = subpage.$.pairedContainer; assertTrue(!!pairedContainer); assertTrue(pairedContainer.hidden); @@ -159,9 +131,7 @@ assertFalse(devices[1].device.connected); }); - test.skip('unpaired device list', function() { - assertTrue(subpage.adapterState.powered); - + test('unpaired device list', function() { var unpairedContainer = subpage.$.unpairedContainer; assertTrue(!!unpairedContainer); assertTrue(unpairedContainer.hidden); @@ -183,9 +153,7 @@ assertFalse(devices[1].device.paired); }); - test.skip('pair device', function(done) { - assertTrue(subpage.adapterState.powered); - + test('pair device', function(done) { bluetoothApi_.setDevicesForTest(fakeDevices_); Polymer.dom.flush(); assertEquals(4, subpage.deviceList_.length); @@ -201,9 +169,7 @@ }); }); - test.skip('pair dialog', function() { - assertTrue(subpage.adapterState.powered); - + test('pair dialog', function() { bluetoothApi_.setDevicesForTest(fakeDevices_); Polymer.dom.flush(); var dialog = subpage.$.deviceDialog;
diff --git a/chrome/test/views/chrome_views_test_base.cc b/chrome/test/views/chrome_views_test_base.cc new file mode 100644 index 0000000..cc12cb2 --- /dev/null +++ b/chrome/test/views/chrome_views_test_base.cc
@@ -0,0 +1,16 @@ +// 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 "chrome/test/views/chrome_views_test_base.h" + +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" + +ChromeViewsTestBase::ChromeViewsTestBase() {} + +ChromeViewsTestBase::~ChromeViewsTestBase() {} + +void ChromeViewsTestBase::SetUp() { + views::ViewsTestBase::SetUp(); + provider_ = base::MakeUnique<ChromeLayoutProvider>(); +}
diff --git a/chrome/test/views/chrome_views_test_base.h b/chrome/test/views/chrome_views_test_base.h new file mode 100644 index 0000000..0a6e4bc --- /dev/null +++ b/chrome/test/views/chrome_views_test_base.h
@@ -0,0 +1,33 @@ +// 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 CHROME_TEST_VIEWS_CHROME_VIEWS_TEST_BASE_H_ +#define CHROME_TEST_VIEWS_CHROME_VIEWS_TEST_BASE_H_ + +#include <memory> + +#include "base/macros.h" +#include "ui/views/test/views_test_base.h" + +class ChromeLayoutProvider; + +// A base class for Chrome views unit tests. Changes the dependencies when they +// need to be different than non-Chrome views. +class ChromeViewsTestBase : public views::ViewsTestBase { + public: + ChromeViewsTestBase(); + ~ChromeViewsTestBase() override; + + // views::ViewsTestBase: + void SetUp() override; + + private: + // Overrides the LayoutProvider created by ViewsTestBase (via + // TestViewsDelegate). + std::unique_ptr<ChromeLayoutProvider> provider_; + + DISALLOW_COPY_AND_ASSIGN(ChromeViewsTestBase); +}; + +#endif // CHROME_TEST_VIEWS_CHROME_VIEWS_TEST_BASE_H_
diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn index a9893a8..57140ea 100644 --- a/chrome/utility/BUILD.gn +++ b/chrome/utility/BUILD.gn
@@ -7,6 +7,7 @@ import("//build/config/sysroot.gni") import("//extensions/features/features.gni") import("//printing/features/features.gni") +import("//services/service_manager/public/service_manifest.gni") static_library("utility") { sources = [ @@ -87,10 +88,12 @@ "importer/nss_decryptor_mac.mm", "importer/nss_decryptor_win.cc", "importer/nss_decryptor_win.h", + "importer/profile_import_impl.cc", + "importer/profile_import_impl.h", + "importer/profile_import_service.cc", + "importer/profile_import_service.h", "importer/safari_importer.h", "importer/safari_importer.mm", - "profile_import_handler.cc", - "profile_import_handler.h", ] deps += [ "//chrome/common:mojo_bindings", @@ -194,3 +197,10 @@ ] } } + +if (!is_android) { + service_manifest("profile_import_manifest") { + name = "profile_import" + source = "importer/profile_import_manifest.json" + } +}
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc index 28eb4e2e..f716c71 100644 --- a/chrome/utility/chrome_content_utility_client.cc +++ b/chrome/utility/chrome_content_utility_client.cc
@@ -14,6 +14,7 @@ #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" #include "base/time/time.h" +#include "build/build_config.h" #include "chrome/common/features.h" #include "chrome/common/file_patcher.mojom.h" #include "chrome/common/profiling/constants.mojom.h" @@ -36,8 +37,9 @@ #if !defined(OS_ANDROID) #include "chrome/common/resource_usage_reporter.mojom.h" +#include "chrome/utility/importer/profile_import_impl.h" +#include "chrome/utility/importer/profile_import_service.h" #include "chrome/utility/media_router/dial_device_description_parser_impl.h" -#include "chrome/utility/profile_import_handler.h" #include "net/proxy/mojo_proxy_resolver_factory_impl.h" // nogncheck #include "net/proxy/proxy_resolver_v8.h" #endif // !defined(OS_ANDROID) @@ -281,8 +283,6 @@ base::ThreadTaskRunnerHandle::Get()); registry->AddInterface(base::Bind(CreateResourceUsageReporter), base::ThreadTaskRunnerHandle::Get()); - registry->AddInterface(base::Bind(&ProfileImportHandler::Create), - base::ThreadTaskRunnerHandle::Get()); registry->AddInterface( base::Bind(&media_router::DialDeviceDescriptionParserImpl::Create), base::ThreadTaskRunnerHandle::Get()); @@ -337,6 +337,14 @@ profiling_info.factory = base::Bind(&profiling::ProfilingService::CreateService); services->emplace(profiling::mojom::kServiceName, profiling_info); + +#if !defined(OS_ANDROID) + service_manager::EmbeddedServiceInfo profile_import_info; + profile_import_info.factory = + base::Bind(&ProfileImportService::CreateService); + services->emplace(chrome::mojom::kProfileImportServiceName, + profile_import_info); +#endif } void ChromeContentUtilityClient::RegisterNetworkBinders(
diff --git a/chrome/utility/importer/OWNERS b/chrome/utility/importer/OWNERS index 6abe2f8..7ca6c2f 100644 --- a/chrome/utility/importer/OWNERS +++ b/chrome/utility/importer/OWNERS
@@ -7,4 +7,7 @@ per-file *_messages*.h=set noparent per-file *_messages*.h=file://ipc/SECURITY_OWNERS +per-file profile_import_manifest.json=set noparent +per-file profile_import_manifest.json=file://ipc/SECURITY_OWNERS + # COMPONENT: UI>Browser>Import
diff --git a/chrome/utility/profile_import_handler.cc b/chrome/utility/importer/profile_import_impl.cc similarity index 75% rename from chrome/utility/profile_import_handler.cc rename to chrome/utility/importer/profile_import_impl.cc index a165b61..97fafc0 100644 --- a/chrome/utility/profile_import_handler.cc +++ b/chrome/utility/importer/profile_import_impl.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/utility/profile_import_handler.h" +#include "chrome/utility/importer/profile_import_impl.h" #include "base/bind.h" #include "base/location.h" @@ -20,18 +20,13 @@ using chrome::mojom::ThreadSafeProfileImportObserverPtr; -ProfileImportHandler::ProfileImportHandler() : items_to_import_(0) {} +ProfileImportImpl::ProfileImportImpl( + std::unique_ptr<service_manager::ServiceContextRef> service_ref) + : service_ref_(std::move(service_ref)) {} -ProfileImportHandler::~ProfileImportHandler() {} +ProfileImportImpl::~ProfileImportImpl() {} -// static -void ProfileImportHandler::Create( - chrome::mojom::ProfileImportRequest request) { - mojo::MakeStrongBinding(base::MakeUnique<ProfileImportHandler>(), - std::move(request)); -} - -void ProfileImportHandler::StartImport( +void ProfileImportImpl::StartImport( const importer::SourceProfile& source_profile, uint16_t items, std::unique_ptr<base::DictionaryValue> localized_strings, @@ -63,21 +58,20 @@ base::RetainedRef(bridge_))); } -void ProfileImportHandler::CancelImport() { +void ProfileImportImpl::CancelImport() { ImporterCleanup(); } -void ProfileImportHandler::ReportImportItemFinished(importer::ImportItem item) { +void ProfileImportImpl::ReportImportItemFinished(importer::ImportItem item) { items_to_import_ ^= item; // Remove finished item from mask. if (items_to_import_ == 0) { ImporterCleanup(); } } -void ProfileImportHandler::ImporterCleanup() { +void ProfileImportImpl::ImporterCleanup() { importer_->Cancel(); importer_ = NULL; bridge_ = NULL; import_thread_.reset(); - content::UtilityThread::Get()->ReleaseProcess(); }
diff --git a/chrome/utility/profile_import_handler.h b/chrome/utility/importer/profile_import_impl.h similarity index 71% rename from chrome/utility/profile_import_handler.h rename to chrome/utility/importer/profile_import_impl.h index 58d7d47..4fb2499a 100644 --- a/chrome/utility/profile_import_handler.h +++ b/chrome/utility/importer/profile_import_impl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_UTILITY_PROFILE_IMPORT_HANDLER_H_ -#define CHROME_UTILITY_PROFILE_IMPORT_HANDLER_H_ +#ifndef CHROME_UTILITY_IMPORTER_PROFILE_IMPORT_IMPL_H_ +#define CHROME_UTILITY_IMPORTER_PROFILE_IMPORT_IMPL_H_ #include <stdint.h> @@ -14,6 +14,7 @@ #include "chrome/common/importer/profile_import.mojom.h" #include "chrome/utility/utility_message_handler.h" #include "mojo/public/cpp/bindings/interface_request.h" +#include "services/service_manager/public/cpp/service_context_ref.h" class ExternalProcessImporterBridge; class Importer; @@ -21,19 +22,17 @@ namespace base { class DictionaryValue; class Thread; -} +} // namespace base namespace importer { struct SourceProfile; } -// Dispatches IPCs for out of process profile import. -class ProfileImportHandler : public chrome::mojom::ProfileImport { +class ProfileImportImpl : public chrome::mojom::ProfileImport { public: - ProfileImportHandler(); - ~ProfileImportHandler() override; - - static void Create(chrome::mojom::ProfileImportRequest request); + explicit ProfileImportImpl( + std::unique_ptr<service_manager::ServiceContextRef> service_ref); + ~ProfileImportImpl() override; private: // chrome::mojom::ProfileImport: @@ -56,12 +55,14 @@ scoped_refptr<ExternalProcessImporterBridge> bridge_; // A bitmask of importer::ImportItem. - uint16_t items_to_import_; + uint16_t items_to_import_ = 0; // Importer of the appropriate type (Firefox, Safari, IE, etc.) scoped_refptr<Importer> importer_; - DISALLOW_COPY_AND_ASSIGN(ProfileImportHandler); + const std::unique_ptr<service_manager::ServiceContextRef> service_ref_; + + DISALLOW_COPY_AND_ASSIGN(ProfileImportImpl); }; -#endif // CHROME_UTILITY_PROFILE_IMPORT_HANDLER_H_ +#endif // CHROME_UTILITY_IMPORTER_PROFILE_IMPORT_IMPL_H_
diff --git a/chrome/utility/importer/profile_import_manifest.json b/chrome/utility/importer/profile_import_manifest.json new file mode 100644 index 0000000..b1c37ff --- /dev/null +++ b/chrome/utility/importer/profile_import_manifest.json
@@ -0,0 +1,14 @@ +{ + "name": "profile_import", + "display_name": "Profile Import", + "interface_provider_specs": { + "service_manager:connector": { + "provides": { + "import": [ "chrome::mojom::ProfileImport" ] + }, + "requires": { + "service_manager": [ "service_manager:all_users" ] + } + } + } +}
diff --git a/chrome/utility/importer/profile_import_service.cc b/chrome/utility/importer/profile_import_service.cc new file mode 100644 index 0000000..fde62001 --- /dev/null +++ b/chrome/utility/importer/profile_import_service.cc
@@ -0,0 +1,58 @@ +// 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 "chrome/utility/importer/profile_import_service.h" + +#include "build/build_config.h" +#include "chrome/utility/importer/profile_import_impl.h" +#include "mojo/public/cpp/bindings/strong_binding.h" + +#if defined(OS_MACOSX) +#include <stdlib.h> + +#include "chrome/common/importer/firefox_importer_utils.h" +#endif + +namespace { + +void OnProfileImportRequest( + service_manager::ServiceContextRefFactory* ref_factory, + chrome::mojom::ProfileImportRequest request) { + mojo::MakeStrongBinding( + base::MakeUnique<ProfileImportImpl>(ref_factory->CreateRef()), + std::move(request)); +} + +} // namespace + +ProfileImportService::ProfileImportService() {} + +ProfileImportService::~ProfileImportService() {} + +std::unique_ptr<service_manager::Service> +ProfileImportService::CreateService() { + return base::MakeUnique<ProfileImportService>(); +} + +void ProfileImportService::OnStart() { + ref_factory_.reset(new service_manager::ServiceContextRefFactory( + base::Bind(&service_manager::ServiceContext::RequestQuit, + base::Unretained(context())))); + registry_.AddInterface( + base::Bind(&OnProfileImportRequest, ref_factory_.get())); + +#if defined(OS_MACOSX) + std::string dylib_path = GetFirefoxDylibPath().value(); + if (!dylib_path.empty()) + ::setenv("DYLD_FALLBACK_LIBRARY_PATH", dylib_path.c_str(), + 1 /* overwrite */); +#endif +} + +void ProfileImportService::OnBindInterface( + const service_manager::BindSourceInfo& source_info, + const std::string& interface_name, + mojo::ScopedMessagePipeHandle interface_pipe) { + registry_.BindInterface(interface_name, std::move(interface_pipe)); +}
diff --git a/chrome/utility/importer/profile_import_service.h b/chrome/utility/importer/profile_import_service.h new file mode 100644 index 0000000..c4c5f83 --- /dev/null +++ b/chrome/utility/importer/profile_import_service.h
@@ -0,0 +1,34 @@ +// 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 CHROME_UTILITY_IMPORTER_PROFILE_IMPORT_SERVICE_H_ +#define CHROME_UTILITY_IMPORTER_PROFILE_IMPORT_SERVICE_H_ + +#include "services/service_manager/public/cpp/binder_registry.h" +#include "services/service_manager/public/cpp/service_context.h" +#include "services/service_manager/public/cpp/service_context_ref.h" + +class ProfileImportService : public service_manager::Service { + public: + ProfileImportService(); + ~ProfileImportService() override; + + // Factory method for creating the service. + static std::unique_ptr<service_manager::Service> CreateService(); + + // Lifescycle events that occur after the service has started to spinup. + void OnStart() override; + void OnBindInterface(const service_manager::BindSourceInfo& source_info, + const std::string& interface_name, + mojo::ScopedMessagePipeHandle interface_pipe) override; + + private: + // State needed to manage service lifecycle and lifecycle of bound clients. + std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_; + service_manager::BinderRegistry registry_; + + DISALLOW_COPY_AND_ASSIGN(ProfileImportService); +}; + +#endif // CHROME_UTILITY_IMPORTER_PROFILE_IMPORT_SERVICE_H_
diff --git a/chrome_elf/BUILD.gn b/chrome_elf/BUILD.gn index 3b84a77e..f8ac4823 100644 --- a/chrome_elf/BUILD.gn +++ b/chrome_elf/BUILD.gn
@@ -32,11 +32,12 @@ # in the world. shared_library("chrome_elf") { sources = [ - "chrome_elf.def", "chrome_elf_main.cc", "chrome_elf_main.h", ] - if (target_cpu == "x64") { + if (target_cpu == "x86") { + sources += [ "chrome_elf_x86.def" ] + } else { sources += [ "chrome_elf_x64.def" ] }
diff --git a/chrome_elf/chrome_elf_x64.def b/chrome_elf/chrome_elf_x64.def index 37aae9c8..184b7989 100644 --- a/chrome_elf/chrome_elf_x64.def +++ b/chrome_elf/chrome_elf_x64.def
@@ -1,10 +1,45 @@ ; Copyright 2013 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. - LIBRARY "chrome_elf.dll" EXPORTS + ; When functions are added to this file, they must also be added to + ; chrome_elf_x86.def + + ; From components/crash/content/app/crashpad.cc + ClearCrashKeyValueImpl + ClearCrashKeyValueImplEx + RequestSingleCrashUploadImpl + SetCrashKeyValueImpl + SetCrashKeyValueImplEx + SetUploadConsentImpl + + ; From components/crash/content/app/crashpad_win.cc + CrashForException + InjectDumpForHungInput + InjectDumpForHungInputNoCrashKeys + + ; From chrome_elf/crash_helper.cc + GetCrashReportsImpl + SetMetricsClientId + + ; From chrome_elf_main.cc + DumpProcessWithoutCrash + GetUserDataDirectoryThunk + SignalChromeElf + SignalInitializeCrashReporting + + ; From chrome/install_static + GetInstallDetailsPayload + + ; From chrome_elf/blacklist.cc + AddDllToBlacklist + GetBlacklistIndex + IsBlacklistInitialized + SuccessfullyBlocked + + ; X64-only exports ; From components/crash/content/app/crashpad_win.cc RegisterNonABICompliantCodeRange UnregisterNonABICompliantCodeRange
diff --git a/chrome_elf/chrome_elf.def b/chrome_elf/chrome_elf_x86.def similarity index 90% rename from chrome_elf/chrome_elf.def rename to chrome_elf/chrome_elf_x86.def index d9c40f0..d49b5e5 100644 --- a/chrome_elf/chrome_elf.def +++ b/chrome_elf/chrome_elf_x86.def
@@ -5,6 +5,9 @@ LIBRARY "chrome_elf.dll" EXPORTS + ; When functions are added to this file, they must also be added to + ; chrome_elf_x64.def + ; From components/crash/content/app/crashpad.cc ClearCrashKeyValueImpl ClearCrashKeyValueImplEx
diff --git a/chromecast/base/cast_features.cc b/chromecast/base/cast_features.cc index 236b173..81dbe83 100644 --- a/chromecast/base/cast_features.cc +++ b/chromecast/base/cast_features.cc
@@ -112,6 +112,14 @@ // chromecast/browser/url_request_context_factory.cc for usage. const base::Feature kEnableQuic{"enable_quic", base::FEATURE_DISABLED_BY_DEFAULT}; +// Enables triple-buffer 720p graphics (overriding default graphics buffer +// settings for a platform). +const base::Feature kTripleBuffer720{"enable_triple_buffer_720", + base::FEATURE_DISABLED_BY_DEFAULT}; +// Enables single-buffered graphics (overriding default graphics buffer +// settings and takes precedence over triple-buffer feature). +const base::Feature kSingleBuffer{"enable_single_buffer", + base::FEATURE_DISABLED_BY_DEFAULT}; // End Chromecast Feature definitions.
diff --git a/chromecast/base/cast_features.h b/chromecast/base/cast_features.h index 138bd97..b4a2c83 100644 --- a/chromecast/base/cast_features.h +++ b/chromecast/base/cast_features.h
@@ -22,6 +22,8 @@ // Add Cast Features here. extern const base::Feature kEnableQuic; +extern const base::Feature kTripleBuffer720; +extern const base::Feature kSingleBuffer; // Below are utilities needed by the Cast receiver to persist feature // information. Client code which is simply querying the status of a feature @@ -56,4 +58,4 @@ } // namespace chromecast -#endif // CHROMECAST_BASE_CAST_FEATURES_H_ \ No newline at end of file +#endif // CHROMECAST_BASE_CAST_FEATURES_H_
diff --git a/chromecast/base/chromecast_switches.cc b/chromecast/base/chromecast_switches.cc index df15dfe..3ede811 100644 --- a/chromecast/base/chromecast_switches.cc +++ b/chromecast/base/chromecast_switches.cc
@@ -107,7 +107,7 @@ // screen size correctly (so no need to resize when first window is created). const char kCastInitialScreenWidth[] = "cast-initial-screen-width"; const char kCastInitialScreenHeight[] = "cast-initial-screen-height"; -const char kUseDoubleBuffering[] = "use-double-buffering"; +const char kGraphicsBufferCount[] = "graphics-buffer-count"; // Used to pass configuration for the I2S input to enable loopback for AEC. const char kLoopbackI2sBits[] = "loopback-i2s-bits";
diff --git a/chromecast/base/chromecast_switches.h b/chromecast/base/chromecast_switches.h index 5ffb4eb..81261c3 100644 --- a/chromecast/base/chromecast_switches.h +++ b/chromecast/base/chromecast_switches.h
@@ -58,7 +58,7 @@ // GPU process switches extern const char kCastInitialScreenWidth[]; extern const char kCastInitialScreenHeight[]; -extern const char kUseDoubleBuffering[]; +extern const char kGraphicsBufferCount[]; // I2S loopback configuration switches extern const char kLoopbackI2sBits[];
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc index 3f3c14a3..8d1b447 100644 --- a/chromecast/browser/cast_browser_main_parts.cc +++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -419,8 +419,7 @@ breakpad::CrashDumpObserver::Create(); breakpad::CrashDumpObserver::GetInstance()->RegisterClient( base::MakeUnique<breakpad::ChildProcessCrashObserver>( - crash_dumps_dir, kAndroidMinidumpDescriptor, - base::Bind(&base::DoNothing))); + crash_dumps_dir, kAndroidMinidumpDescriptor)); #else base::FilePath home_dir; CHECK(PathService::Get(DIR_CAST_HOME, &home_dir));
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc index f66d5f96..c676c307 100644 --- a/chromecast/browser/cast_content_browser_client.cc +++ b/chromecast/browser/cast_content_browser_client.cc
@@ -11,6 +11,7 @@ #include "base/base_switches.h" #include "base/command_line.h" +#include "base/feature_list.h" #include "base/files/scoped_file.h" #include "base/i18n/rtl.h" #include "base/json/json_reader.h" @@ -22,6 +23,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "chromecast/base/cast_constants.h" +#include "chromecast/base/cast_features.h" #include "chromecast/base/cast_paths.h" #include "chromecast/base/chromecast_switches.h" #include "chromecast/browser/cast_browser_context.h" @@ -132,14 +134,11 @@ command_line->AppendSwitchASCII(switches::kCastInitialScreenHeight, base::IntToString(res.height())); } - base::CommandLine* browser_command_line = - base::CommandLine::ForCurrentProcess(); - for (auto* const switch_name : {switches::kUseDoubleBuffering}) { - if (browser_command_line->HasSwitch(switch_name)) { - command_line->AppendSwitchASCII( - switch_name, - browser_command_line->GetSwitchValueASCII(switch_name)); - } + + if (base::FeatureList::IsEnabled(kSingleBuffer)) { + command_line->AppendSwitchASCII(switches::kGraphicsBufferCount, "1"); + } else if (base::FeatureList::IsEnabled(chromecast::kTripleBuffer720)) { + command_line->AppendSwitchASCII(switches::kGraphicsBufferCount, "3"); } } #endif // defined(USE_AURA)
diff --git a/chromecast/graphics/BUILD.gn b/chromecast/graphics/BUILD.gn index ce1ed90..e505012 100644 --- a/chromecast/graphics/BUILD.gn +++ b/chromecast/graphics/BUILD.gn
@@ -45,6 +45,7 @@ deps += [ ":libcast_graphics_1.0", + "//chromecast/base", "//chromecast/public", "//ui/aura", "//ui/display",
diff --git a/chromecast/graphics/cast_screen.cc b/chromecast/graphics/cast_screen.cc index deca8ec..88e00f05 100644 --- a/chromecast/graphics/cast_screen.cc +++ b/chromecast/graphics/cast_screen.cc
@@ -7,6 +7,8 @@ #include <stdint.h> #include "base/command_line.h" +#include "base/feature_list.h" +#include "chromecast/base/cast_features.h" #include "chromecast/public/graphics_properties_shlib.h" #include "ui/aura/env.h" #include "ui/gfx/geometry/rect_conversions.h" @@ -23,9 +25,11 @@ // Helper to return the screen resolution (device pixels) // to use. gfx::Size GetScreenResolution() { - if (GraphicsPropertiesShlib::IsSupported( - GraphicsPropertiesShlib::k1080p, - base::CommandLine::ForCurrentProcess()->argv())) { + if (base::FeatureList::IsEnabled(kTripleBuffer720)) { + return gfx::Size(1280, 720); + } else if (GraphicsPropertiesShlib::IsSupported( + GraphicsPropertiesShlib::k1080p, + base::CommandLine::ForCurrentProcess()->argv())) { return gfx::Size(1920, 1080); } else { return gfx::Size(1280, 720);
diff --git a/chromeos/components/tether/BUILD.gn b/chromeos/components/tether/BUILD.gn index 2f38e9f..c463b6d9 100644 --- a/chromeos/components/tether/BUILD.gn +++ b/chromeos/components/tether/BUILD.gn
@@ -67,6 +67,8 @@ "network_connection_handler_tether_delegate.h", "network_host_scan_cache.cc", "network_host_scan_cache.h", + "network_list_sorter.cc", + "network_list_sorter.h", "notification_presenter.h", "notification_remover.cc", "notification_remover.h", @@ -75,8 +77,9 @@ "persistent_host_scan_cache_impl.h", "pref_names.cc", "pref_names.h", - "tether_connector.cc", "tether_connector.h", + "tether_connector_impl.cc", + "tether_connector_impl.h", "tether_disconnector.h", "tether_disconnector_impl.cc", "tether_disconnector_impl.h", @@ -129,6 +132,10 @@ "fake_network_configuration_remover.h", "fake_notification_presenter.cc", "fake_notification_presenter.h", + "fake_tether_connector.cc", + "fake_tether_connector.h", + "fake_tether_disconnector.cc", + "fake_tether_disconnector.h", "fake_tether_host_fetcher.cc", "fake_tether_host_fetcher.h", "fake_wifi_hotspot_connector.cc", @@ -187,9 +194,10 @@ "network_configuration_remover_unittest.cc", "network_connection_handler_tether_delegate_unittest.cc", "network_host_scan_cache_unittest.cc", + "network_list_sorter_unittest.cc", "notification_remover_unittest.cc", "persistent_host_scan_cache_impl_unittest.cc", - "tether_connector_unittest.cc", + "tether_connector_impl_unittest.cc", "tether_disconnector_impl_unittest.cc", "tether_host_fetcher_unittest.cc", "tether_host_response_recorder_unittest.cc",
diff --git a/chromeos/components/tether/fake_ble_connection_manager.cc b/chromeos/components/tether/fake_ble_connection_manager.cc index 3c7ff23..96ef4d8 100644 --- a/chromeos/components/tether/fake_ble_connection_manager.cc +++ b/chromeos/components/tether/fake_ble_connection_manager.cc
@@ -61,6 +61,11 @@ SendMessageSentEvent(sequence_number); } +bool FakeBleConnectionManager::IsRegistered( + const cryptauth::RemoteDevice& remote_device) { + return base::ContainsKey(device_map_, remote_device); +} + void FakeBleConnectionManager::RegisterRemoteDevice( const cryptauth::RemoteDevice& remote_device, const MessageType& connection_reason) {
diff --git a/chromeos/components/tether/fake_ble_connection_manager.h b/chromeos/components/tether/fake_ble_connection_manager.h index c8fcaf7..a8a1a13 100644 --- a/chromeos/components/tether/fake_ble_connection_manager.h +++ b/chromeos/components/tether/fake_ble_connection_manager.h
@@ -37,6 +37,8 @@ // Returns -1 if no sequence numbers have been used yet. int last_sequence_number() { return next_sequence_number_ - 1; } + bool IsRegistered(const cryptauth::RemoteDevice& remote_device); + // BleConnectionManager: void RegisterRemoteDevice(const cryptauth::RemoteDevice& remote_device, const MessageType& connection_reason) override;
diff --git a/chromeos/components/tether/fake_tether_connector.cc b/chromeos/components/tether/fake_tether_connector.cc new file mode 100644 index 0000000..702cf73 --- /dev/null +++ b/chromeos/components/tether/fake_tether_connector.cc
@@ -0,0 +1,35 @@ +// 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 "chromeos/components/tether/fake_tether_connector.h" + +namespace chromeos { + +namespace tether { + +FakeTetherConnector::FakeTetherConnector() {} + +FakeTetherConnector::~FakeTetherConnector() {} + +void FakeTetherConnector::ConnectToNetwork( + const std::string& tether_network_guid, + const base::Closure& success_callback, + const network_handler::StringResultCallback& error_callback) { + last_connected_tether_network_guid_ = tether_network_guid; + + if (connection_error_name_.empty()) + success_callback.Run(); + else + error_callback.Run(connection_error_name_); +} + +bool FakeTetherConnector::CancelConnectionAttempt( + const std::string& tether_network_guid) { + last_canceled_tether_network_guid_ = tether_network_guid; + return should_cancel_successfully_; +} + +} // namespace tether + +} // namespace chromeos
diff --git a/chromeos/components/tether/fake_tether_connector.h b/chromeos/components/tether/fake_tether_connector.h new file mode 100644 index 0000000..58a6065 --- /dev/null +++ b/chromeos/components/tether/fake_tether_connector.h
@@ -0,0 +1,60 @@ +// 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 CHROMEOS_COMPONENTS_TETHER_FAKE_TETHER_CONNECTOR_H_ +#define CHROMEOS_COMPONENTS_TETHER_FAKE_TETHER_CONNECTOR_H_ + +#include "base/callback_forward.h" +#include "base/macros.h" +#include "chromeos/components/tether/tether_connector.h" +#include "chromeos/network/network_connection_handler.h" + +namespace chromeos { + +namespace tether { + +// Test double for TetherConnector. +class FakeTetherConnector : public TetherConnector { + public: + FakeTetherConnector(); + ~FakeTetherConnector() override; + + std::string last_connected_tether_network_guid() { + return last_connected_tether_network_guid_; + } + + void set_connection_error_name(const std::string& connection_error_name) { + connection_error_name_ = connection_error_name; + } + + std::string last_canceled_tether_network_guid() { + return last_canceled_tether_network_guid_; + } + + void set_should_cancel_successfully(bool should_cancel_successfully) { + should_cancel_successfully_ = should_cancel_successfully; + } + + // TetherConnector: + void ConnectToNetwork( + const std::string& tether_network_guid, + const base::Closure& success_callback, + const network_handler::StringResultCallback& error_callback) override; + bool CancelConnectionAttempt(const std::string& tether_network_guid) override; + + private: + std::string last_connected_tether_network_guid_; + std::string connection_error_name_; + + std::string last_canceled_tether_network_guid_; + bool should_cancel_successfully_; + + DISALLOW_COPY_AND_ASSIGN(FakeTetherConnector); +}; + +} // namespace tether + +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_TETHER_FAKE_TETHER_CONNECTOR_H_
diff --git a/chromeos/components/tether/fake_tether_disconnector.cc b/chromeos/components/tether/fake_tether_disconnector.cc new file mode 100644 index 0000000..3302844 --- /dev/null +++ b/chromeos/components/tether/fake_tether_disconnector.cc
@@ -0,0 +1,29 @@ +// 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 "chromeos/components/tether/fake_tether_disconnector.h" + +namespace chromeos { + +namespace tether { + +FakeTetherDisconnector::FakeTetherDisconnector() {} + +FakeTetherDisconnector::~FakeTetherDisconnector() {} + +void FakeTetherDisconnector::DisconnectFromNetwork( + const std::string& tether_network_guid, + const base::Closure& success_callback, + const network_handler::StringResultCallback& error_callback) { + last_disconnected_tether_network_guid_ = tether_network_guid; + + if (disconnection_error_name_.empty()) + success_callback.Run(); + else + error_callback.Run(disconnection_error_name_); +} + +} // namespace tether + +} // namespace chromeos
diff --git a/chromeos/components/tether/fake_tether_disconnector.h b/chromeos/components/tether/fake_tether_disconnector.h new file mode 100644 index 0000000..7e3ce54d3 --- /dev/null +++ b/chromeos/components/tether/fake_tether_disconnector.h
@@ -0,0 +1,49 @@ +// 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 CHROMEOS_COMPONENTS_TETHER_FAKE_TETHER_DISCONNECTOR_H_ +#define CHROMEOS_COMPONENTS_TETHER_FAKE_TETHER_DISCONNECTOR_H_ + +#include "base/callback_forward.h" +#include "base/macros.h" +#include "chromeos/components/tether/tether_disconnector.h" +#include "chromeos/network/network_connection_handler.h" + +namespace chromeos { + +namespace tether { + +// Test double for TetherDisconnector. +class FakeTetherDisconnector : public TetherDisconnector { + public: + FakeTetherDisconnector(); + ~FakeTetherDisconnector() override; + + std::string last_disconnected_tether_network_guid() { + return last_disconnected_tether_network_guid_; + } + + void set_disconnection_error_name( + const std::string& disconnection_error_name) { + disconnection_error_name_ = disconnection_error_name; + } + + // TetherDisconnector: + void DisconnectFromNetwork( + const std::string& tether_network_guid, + const base::Closure& success_callback, + const network_handler::StringResultCallback& error_callback) override; + + private: + std::string last_disconnected_tether_network_guid_; + std::string disconnection_error_name_; + + DISALLOW_COPY_AND_ASSIGN(FakeTetherDisconnector); +}; + +} // namespace tether + +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_TETHER_FAKE_TETHER_DISCONNECTOR_H_
diff --git a/chromeos/components/tether/host_scan_device_prioritizer_impl.cc b/chromeos/components/tether/host_scan_device_prioritizer_impl.cc index f293ec18..a678380 100644 --- a/chromeos/components/tether/host_scan_device_prioritizer_impl.cc +++ b/chromeos/components/tether/host_scan_device_prioritizer_impl.cc
@@ -6,7 +6,6 @@ #include "base/memory/ptr_util.h" #include "base/values.h" -#include "chromeos/components/tether/device_id_tether_network_guid_map.h" #include "chromeos/components/tether/pref_names.h" #include "chromeos/components/tether/tether_host_response_recorder.h" #include "chromeos/network/network_state.h" @@ -18,40 +17,14 @@ namespace tether { -namespace { - -cryptauth::RemoteDevice Move(const cryptauth::RemoteDevice& remote_device) { - return remote_device; -} - -std::unique_ptr<ManagedState> Move( - std::unique_ptr<ManagedState>& tether_network_state) { - return std::move(tether_network_state); -} - -} // namespace - HostScanDevicePrioritizerImpl::HostScanDevicePrioritizerImpl( - TetherHostResponseRecorder* tether_host_response_recorder, - DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map) - : tether_host_response_recorder_(tether_host_response_recorder), - device_id_tether_network_guid_map_(device_id_tether_network_guid_map) {} + TetherHostResponseRecorder* tether_host_response_recorder) + : tether_host_response_recorder_(tether_host_response_recorder) {} HostScanDevicePrioritizerImpl::~HostScanDevicePrioritizerImpl() {} void HostScanDevicePrioritizerImpl::SortByHostScanOrder( std::vector<cryptauth::RemoteDevice>* remote_devices) const { - SortNetworks(remote_devices); -} - -void HostScanDevicePrioritizerImpl::SortTetherNetworkList( - NetworkStateHandler::ManagedStateList* tether_networks) const { - SortNetworks(tether_networks); -} - -template <typename T> -void HostScanDevicePrioritizerImpl::SortNetworks( - std::vector<T>* list_to_sort) const { // First, fetch the hosts which have previously responded. std::vector<std::string> prioritized_ids = tether_host_response_recorder_->GetPreviouslyAvailableHostIds(); @@ -67,39 +40,26 @@ // Iterate from the last stored ID to the first stored ID. This ensures that // the items at the front of the list end up in the front of the prioritized - // |list_to_sort| vector. + // |remote_devices| vector. for (auto prioritized_it = prioritized_ids.rbegin(); prioritized_it != prioritized_ids.rend(); ++prioritized_it) { - // Iterate through |list_to_sort| to see if a device ID exists which is + // Iterate through |remote_devices| to see if a device ID exists which is // equal to |stored_id|. If one exists, remove it from its previous // position in the list and add it at the front instead. - for (auto list_to_sort_it = list_to_sort->begin(); - list_to_sort_it != list_to_sort->end(); ++list_to_sort_it) { - if (GetDeviceId(*list_to_sort_it) != *prioritized_it) { + for (auto remote_devices_it = remote_devices->begin(); + remote_devices_it != remote_devices->end(); ++remote_devices_it) { + if (remote_devices_it->GetDeviceId() != *prioritized_it) { continue; } - T entry_to_move = Move(*list_to_sort_it); - list_to_sort->erase(list_to_sort_it); - list_to_sort->emplace(list_to_sort->begin(), Move(entry_to_move)); + cryptauth::RemoteDevice device_to_move = *remote_devices_it; + remote_devices->erase(remote_devices_it); + remote_devices->emplace(remote_devices->begin(), device_to_move); break; } } } -std::string HostScanDevicePrioritizerImpl::GetDeviceId( - const cryptauth::RemoteDevice& remote_device) const { - return remote_device.GetDeviceId(); -} - -std::string HostScanDevicePrioritizerImpl::GetDeviceId( - const std::unique_ptr<ManagedState>& tether_network_state) const { - NetworkState* network_state = - static_cast<NetworkState*>(tether_network_state.get()); - return device_id_tether_network_guid_map_->GetDeviceIdForTetherNetworkGuid( - network_state->guid()); -} - } // namespace tether } // namespace chromeos
diff --git a/chromeos/components/tether/host_scan_device_prioritizer_impl.h b/chromeos/components/tether/host_scan_device_prioritizer_impl.h index b02b131d..fb1df15 100644 --- a/chromeos/components/tether/host_scan_device_prioritizer_impl.h +++ b/chromeos/components/tether/host_scan_device_prioritizer_impl.h
@@ -7,48 +7,27 @@ #include "base/macros.h" #include "chromeos/components/tether/host_scan_device_prioritizer.h" -#include "chromeos/network/network_state_handler.h" #include "components/cryptauth/remote_device.h" namespace chromeos { -class NetworkStateHandler; - namespace tether { class TetherHostResponseRecorder; -class DeviceIdTetherNetworkGuidMap; // Implementation of HostScanDevicePrioritizer. -class HostScanDevicePrioritizerImpl - : public HostScanDevicePrioritizer, - public NetworkStateHandler::TetherSortDelegate { +class HostScanDevicePrioritizerImpl : public HostScanDevicePrioritizer { public: HostScanDevicePrioritizerImpl( - TetherHostResponseRecorder* tether_host_response_recorder, - DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map); + TetherHostResponseRecorder* tether_host_response_recorder); ~HostScanDevicePrioritizerImpl() override; // HostScanDevicePrioritizer: void SortByHostScanOrder( std::vector<cryptauth::RemoteDevice>* remote_devices) const override; - // NetworkStateHandler::TetherNetworkListSorter: - void SortTetherNetworkList( - NetworkStateHandler::ManagedStateList* tether_networks) const override; - private: - // Performs sorting for both SortByHostScanOrder() and - // SortTetherNetworkList(). - template <typename T> - void SortNetworks(std::vector<T>* list_to_sort) const; - - std::string GetDeviceId(const cryptauth::RemoteDevice& remote_device) const; - std::string GetDeviceId( - const std::unique_ptr<ManagedState>& tether_network_state) const; - TetherHostResponseRecorder* tether_host_response_recorder_; - DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map_; DISALLOW_COPY_AND_ASSIGN(HostScanDevicePrioritizerImpl); };
diff --git a/chromeos/components/tether/host_scan_device_prioritizer_impl_unittest.cc b/chromeos/components/tether/host_scan_device_prioritizer_impl_unittest.cc index 57d85fa..11904ed 100644 --- a/chromeos/components/tether/host_scan_device_prioritizer_impl_unittest.cc +++ b/chromeos/components/tether/host_scan_device_prioritizer_impl_unittest.cc
@@ -6,13 +6,8 @@ #include <memory> -#include "base/test/scoped_task_environment.h" #include "chromeos/components/tether/device_id_tether_network_guid_map.h" #include "chromeos/components/tether/tether_host_response_recorder.h" -#include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/network/network_state.h" -#include "chromeos/network/network_state_handler.h" -#include "chromeos/network/network_state_test.h" #include "components/cryptauth/remote_device_test_util.h" #include "components/prefs/testing_pref_service.h" #include "testing/gtest/include/gtest/gtest.h" @@ -21,71 +16,25 @@ namespace tether { -class HostScanDevicePrioritizerImplTest : public NetworkStateTest { +class HostScanDevicePrioritizerImplTest : public testing::Test { protected: HostScanDevicePrioritizerImplTest() : test_devices_(cryptauth::GenerateTestRemoteDevices(10)) {} void SetUp() override { - DBusThreadManager::Initialize(); - NetworkStateTest::SetUp(); - - network_state_handler()->SetTetherTechnologyState( - NetworkStateHandler::TechnologyState::TECHNOLOGY_ENABLED); - pref_service_ = base::MakeUnique<TestingPrefServiceSimple>(); TetherHostResponseRecorder::RegisterPrefs(pref_service_->registry()); - recorder_ = base::MakeUnique<TetherHostResponseRecorder>(pref_service_.get()); - device_id_tether_network_guid_map_ = - base::MakeUnique<DeviceIdTetherNetworkGuidMap>(); - prioritizer_ = base::MakeUnique<HostScanDevicePrioritizerImpl>( - recorder_.get(), device_id_tether_network_guid_map_.get()); - network_state_handler()->set_tether_sort_delegate(prioritizer_.get()); + prioritizer_ = + base::MakeUnique<HostScanDevicePrioritizerImpl>(recorder_.get()); } - void TearDown() override { - prioritizer_.reset(); - ShutdownNetworkState(); - NetworkStateTest::TearDown(); - DBusThreadManager::Shutdown(); - } - - void VerifyNetworksInExpectedOrder( - std::vector<cryptauth::RemoteDevice> expected) { - NetworkStateHandler::NetworkStateList network_list; - - network_state_handler()->GetVisibleNetworkListByType( - NetworkTypePattern::Tether(), &network_list); - EXPECT_EQ(expected.size(), network_list.size()); - - for (size_t i = 0; i < expected.size(); i++) { - std::string expected_guid = - device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId( - expected[i].GetDeviceId()); - EXPECT_EQ(expected_guid, network_list[i]->guid()); - } - } - - void AddNetworkStateForDevice(const cryptauth::RemoteDevice& remote_device) { - std::string guid = - device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId( - remote_device.GetDeviceId()); - network_state_handler()->AddTetherNetworkState( - guid, "name", "carrier", 100 /* battery_percentage */, - 100 /* signal_strength */, false /* has_connected_to_host */); - } - - const base::test::ScopedTaskEnvironment scoped_task_environment_; const std::vector<cryptauth::RemoteDevice> test_devices_; std::unique_ptr<TestingPrefServiceSimple> pref_service_; std::unique_ptr<TetherHostResponseRecorder> recorder_; - // TODO(hansberry): Use a fake for this when a real mapping scheme is created. - std::unique_ptr<DeviceIdTetherNetworkGuidMap> - device_id_tether_network_guid_map_; std::unique_ptr<HostScanDevicePrioritizerImpl> prioritizer_; @@ -119,30 +68,6 @@ } TEST_F(HostScanDevicePrioritizerImplTest, - TestOnlyTetherAvailabilityResponses_NetworkStates) { - // Receive TetherAvailabilityResponses from devices 0-4. - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]); - - // Do not receive a ConnectTetheringResponse. - - AddNetworkStateForDevice(test_devices_[6]); - AddNetworkStateForDevice(test_devices_[5]); - AddNetworkStateForDevice(test_devices_[4]); - AddNetworkStateForDevice(test_devices_[3]); - AddNetworkStateForDevice(test_devices_[2]); - AddNetworkStateForDevice(test_devices_[1]); - AddNetworkStateForDevice(test_devices_[0]); - - VerifyNetworksInExpectedOrder((std::vector<cryptauth::RemoteDevice>{ - test_devices_[4], test_devices_[3], test_devices_[2], test_devices_[1], - test_devices_[0], test_devices_[6], test_devices_[5]})); -} - -TEST_F(HostScanDevicePrioritizerImplTest, TestBothTypesOfResponses_RemoteDevices) { // Receive TetherAvailabilityResponses from devices 0-4. recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); @@ -169,31 +94,6 @@ } TEST_F(HostScanDevicePrioritizerImplTest, - TestBothTypesOfResponses_NetworkStates) { - // Receive TetherAvailabilityResponses from devices 0-4. - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]); - - // Receive ConnectTetheringResponse from device 0. - recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[0]); - - AddNetworkStateForDevice(test_devices_[6]); - AddNetworkStateForDevice(test_devices_[5]); - AddNetworkStateForDevice(test_devices_[4]); - AddNetworkStateForDevice(test_devices_[3]); - AddNetworkStateForDevice(test_devices_[2]); - AddNetworkStateForDevice(test_devices_[1]); - AddNetworkStateForDevice(test_devices_[0]); - - VerifyNetworksInExpectedOrder((std::vector<cryptauth::RemoteDevice>{ - test_devices_[0], test_devices_[4], test_devices_[3], test_devices_[2], - test_devices_[1], test_devices_[6], test_devices_[5]})); -} - -TEST_F(HostScanDevicePrioritizerImplTest, TestBothTypesOfResponses_DifferentOrder_RemoteDevices) { // Receive different order. recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); @@ -221,35 +121,6 @@ test_vector); } -TEST_F(HostScanDevicePrioritizerImplTest, - TestBothTypesOfResponses_DifferentOrder_NetworkStates) { - // Receive different order. - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[0]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[2]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[1]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[4]); - recorder_->RecordSuccessfulTetherAvailabilityResponse(test_devices_[3]); - - // Receive ConnectTetheringResponse from device 1. - recorder_->RecordSuccessfulConnectTetheringResponse(test_devices_[1]); - - AddNetworkStateForDevice(test_devices_[9]); - AddNetworkStateForDevice(test_devices_[8]); - AddNetworkStateForDevice(test_devices_[7]); - AddNetworkStateForDevice(test_devices_[6]); - AddNetworkStateForDevice(test_devices_[5]); - AddNetworkStateForDevice(test_devices_[4]); - AddNetworkStateForDevice(test_devices_[3]); - AddNetworkStateForDevice(test_devices_[2]); - AddNetworkStateForDevice(test_devices_[1]); - AddNetworkStateForDevice(test_devices_[0]); - - VerifyNetworksInExpectedOrder((std::vector<cryptauth::RemoteDevice>{ - test_devices_[1], test_devices_[3], test_devices_[4], test_devices_[2], - test_devices_[0], test_devices_[9], test_devices_[8], test_devices_[7], - test_devices_[6], test_devices_[5]})); -} - } // namespace tether } // namespace chromeos
diff --git a/chromeos/components/tether/initializer_impl.cc b/chromeos/components/tether/initializer_impl.cc index 6b7a7bb3..a9382c5 100644 --- a/chromeos/components/tether/initializer_impl.cc +++ b/chromeos/components/tether/initializer_impl.cc
@@ -20,10 +20,11 @@ #include "chromeos/components/tether/network_configuration_remover.h" #include "chromeos/components/tether/network_connection_handler_tether_delegate.h" #include "chromeos/components/tether/network_host_scan_cache.h" +#include "chromeos/components/tether/network_list_sorter.h" #include "chromeos/components/tether/notification_presenter.h" #include "chromeos/components/tether/notification_remover.h" #include "chromeos/components/tether/persistent_host_scan_cache_impl.h" -#include "chromeos/components/tether/tether_connector.h" +#include "chromeos/components/tether/tether_connector_impl.h" #include "chromeos/components/tether/tether_disconnector_impl.h" #include "chromeos/components/tether/tether_host_fetcher.h" #include "chromeos/components/tether/tether_host_response_recorder.h" @@ -187,18 +188,11 @@ // Shutdown has completed. It is now safe to delete the objects that were // shutting down asynchronously. - disconnect_tethering_request_sender_ = - base::MakeUnique<DummyDisconnectTetheringRequestSender>(); - ble_connection_manager_ = base::MakeUnique<BleConnectionManager>( - cryptauth_service_, adapter_, local_device_data_provider_.get(), - remote_beacon_seed_fetcher_.get()); - remote_beacon_seed_fetcher_ = - base::MakeUnique<cryptauth::RemoteBeaconSeedFetcher>( - cryptauth_service_->GetCryptAuthDeviceManager()); - local_device_data_provider_ = - base::MakeUnique<cryptauth::LocalDeviceDataProvider>(cryptauth_service_); - tether_host_fetcher_ = - base::MakeUnique<TetherHostFetcher>(cryptauth_service_); + disconnect_tethering_request_sender_.reset(); + ble_connection_manager_.reset(); + remote_beacon_seed_fetcher_.reset(); + local_device_data_provider_.reset(); + tether_host_fetcher_.reset(); TransitionToStatus(Initializer::Status::SHUT_DOWN); } @@ -207,6 +201,8 @@ PA_LOG(INFO) << "Successfully set Bluetooth advertisement interval. " << "Initializing tether feature."; + network_list_sorter_ = base::MakeUnique<NetworkListSorter>(); + network_state_handler_->set_tether_sort_delegate(network_list_sorter_.get()); tether_host_fetcher_ = base::MakeUnique<TetherHostFetcher>(cryptauth_service_); local_device_data_provider_ = @@ -226,10 +222,7 @@ base::MakeUnique<DeviceIdTetherNetworkGuidMap>(); host_scan_device_prioritizer_ = base::MakeUnique<HostScanDevicePrioritizerImpl>( - tether_host_response_recorder_.get(), - device_id_tether_network_guid_map_.get()); - network_state_handler_->set_tether_sort_delegate( - host_scan_device_prioritizer_.get()); + tether_host_response_recorder_.get()); wifi_hotspot_connector_ = base::MakeUnique<WifiHotspotConnector>( network_state_handler_, network_connect_); active_host_ = @@ -262,7 +255,7 @@ network_state_handler_, host_scanner_.get()); host_connection_metrics_logger_ = base::MakeUnique<HostConnectionMetricsLogger>(); - tether_connector_ = base::MakeUnique<TetherConnector>( + tether_connector_ = base::MakeUnique<TetherConnectorImpl>( network_state_handler_, wifi_hotspot_connector_.get(), active_host_.get(), tether_host_fetcher_.get(), ble_connection_manager_.get(), tether_host_response_recorder_.get(), @@ -282,8 +275,8 @@ network_configuration_remover_.get()); network_connection_handler_tether_delegate_ = base::MakeUnique<NetworkConnectionHandlerTetherDelegate>( - network_connection_handler_, tether_connector_.get(), - tether_disconnector_.get()); + network_connection_handler_, active_host_.get(), + tether_connector_.get(), tether_disconnector_.get()); crash_recovery_manager_ = base::MakeUnique<CrashRecoveryManager>( network_state_handler_, active_host_.get(), @@ -311,7 +304,8 @@ disconnect_tethering_request_sender_->AddObserver(this); // All objects which are not dependencies of - // |disconnect_tethering_request_sender_| are + // |disconnect_tethering_request_sender_| are no longer needed, so delete + // them. crash_recovery_manager_.reset(); network_connection_handler_tether_delegate_.reset(); tether_network_disconnection_handler_.reset(); @@ -333,6 +327,8 @@ host_scan_device_prioritizer_.reset(); device_id_tether_network_guid_map_.reset(); tether_host_response_recorder_.reset(); + network_state_handler_->set_tether_sort_delegate(nullptr); + network_list_sorter_.reset(); } } // namespace tether
diff --git a/chromeos/components/tether/initializer_impl.h b/chromeos/components/tether/initializer_impl.h index 82235f1b..9f5dd6e 100644 --- a/chromeos/components/tether/initializer_impl.h +++ b/chromeos/components/tether/initializer_impl.h
@@ -50,6 +50,7 @@ class MasterHostScanCache; class NetworkConfigurationRemover; class NetworkHostScanCache; +class NetworkListSorter; class NotificationPresenter; class NotificationRemover; class PersistentHostScanCache; @@ -142,6 +143,7 @@ // Declare new objects in the order that they will be created during // initialization to ensure that they are destroyed in the correct order. This // order will be enforced by InitializerTest.TestCreateAndDestroy. + std::unique_ptr<NetworkListSorter> network_list_sorter_; std::unique_ptr<TetherHostFetcher> tether_host_fetcher_; std::unique_ptr<cryptauth::LocalDeviceDataProvider> local_device_data_provider_;
diff --git a/chromeos/components/tether/message_transfer_operation.cc b/chromeos/components/tether/message_transfer_operation.cc index 468d4bb..cccecd2 100644 --- a/chromeos/components/tether/message_transfer_operation.cc +++ b/chromeos/components/tether/message_transfer_operation.cc
@@ -45,11 +45,24 @@ : remote_devices_(RemoveDuplicatesFromVector(devices_to_connect)), connection_manager_(connection_manager), timer_factory_(base::MakeUnique<TimerFactory>()), - initialized_(false), weak_ptr_factory_(this) {} MessageTransferOperation::~MessageTransferOperation() { connection_manager_->RemoveObserver(this); + + // If initialization never occurred, devices were never registered. + if (!initialized_) + return; + + shutting_down_ = true; + + // Unregister any devices that are still registered; otherwise, Bluetooth + // connections will continue to stay alive until the Tether component is shut + // down (see crbug.com/761106). Note that a copy of |remote_devices_| is used + // here because UnregisterDevice() will modify |remote_devices_| internally. + std::vector<cryptauth::RemoteDevice> remote_devices_copy = remote_devices_; + for (const auto& remote_device : remote_devices_copy) + UnregisterDevice(remote_device); } void MessageTransferOperation::Initialize() { @@ -58,13 +71,19 @@ } initialized_ = true; + // Store the message type for this connection as a private field. This is + // necessary because when UnregisterDevice() is called in the destructor, the + // derived class has already been destroyed, so invoking + // GetMessageTypeForConnection() will fail due to it being a pure virtual + // function at that time. + message_type_for_connection_ = GetMessageTypeForConnection(); + connection_manager_->AddObserver(this); OnOperationStarted(); - MessageType message_type_for_connection = GetMessageTypeForConnection(); for (const auto& remote_device : remote_devices_) { connection_manager_->RegisterRemoteDevice(remote_device, - message_type_for_connection); + message_type_for_connection_); cryptauth::SecureChannel::Status status; if (connection_manager_->GetStatusForDevice(remote_device, &status) && @@ -143,6 +162,9 @@ void MessageTransferOperation::UnregisterDevice( const cryptauth::RemoteDevice& remote_device) { + // Note: This function may be called from the destructor. It is invalid to + // invoke any virtual methods if |shutting_down_| is true. + remote_device_to_num_attempts_map_.erase(remote_device); remote_devices_.erase(std::remove(remote_devices_.begin(), remote_devices_.end(), remote_device), @@ -150,9 +172,9 @@ StopTimerForDeviceIfRunning(remote_device); connection_manager_->UnregisterRemoteDevice(remote_device, - GetMessageTypeForConnection()); + message_type_for_connection_); - if (remote_devices_.empty()) { + if (!shutting_down_ && remote_devices_.empty()) { OnOperationFinished(); } } @@ -176,7 +198,7 @@ void MessageTransferOperation::StartTimerForDevice( const cryptauth::RemoteDevice& remote_device) { PA_LOG(INFO) << "Starting timer for operation with message type " - << GetMessageTypeForConnection() << " from device with ID " + << message_type_for_connection_ << " from device with ID " << remote_device.GetTruncatedDeviceIdForLogs() << "."; remote_device_to_timer_map_.emplace(remote_device, @@ -199,7 +221,7 @@ void MessageTransferOperation::OnTimeout( const cryptauth::RemoteDevice& remote_device) { PA_LOG(WARNING) << "Timed out operation for message type " - << GetMessageTypeForConnection() << " from device with ID " + << message_type_for_connection_ << " from device with ID " << remote_device.GetTruncatedDeviceIdForLogs() << "."; remote_device_to_timer_map_.erase(remote_device);
diff --git a/chromeos/components/tether/message_transfer_operation.h b/chromeos/components/tether/message_transfer_operation.h index 825583c5..203ac86 100644 --- a/chromeos/components/tether/message_transfer_operation.h +++ b/chromeos/components/tether/message_transfer_operation.h
@@ -109,7 +109,9 @@ BleConnectionManager* connection_manager_; std::unique_ptr<TimerFactory> timer_factory_; - bool initialized_; + bool initialized_ = false; + bool shutting_down_ = false; + MessageType message_type_for_connection_; std::map<cryptauth::RemoteDevice, uint32_t> remote_device_to_num_attempts_map_; std::map<cryptauth::RemoteDevice, std::unique_ptr<base::Timer>>
diff --git a/chromeos/components/tether/message_transfer_operation_unittest.cc b/chromeos/components/tether/message_transfer_operation_unittest.cc index 48c76e2..7a9713cc 100644 --- a/chromeos/components/tether/message_transfer_operation_unittest.cc +++ b/chromeos/components/tether/message_transfer_operation_unittest.cc
@@ -172,13 +172,6 @@ false /* has_finished */); } - bool IsDeviceRegistered(const cryptauth::RemoteDevice& remote_device) const { - DCHECK(operation_); - return std::find(operation_->remote_devices_.begin(), - operation_->remote_devices_.end(), - remote_device) != operation_->remote_devices_.end(); - } - void InitializeOperation() { VerifyOperationStartedAndFinished(false /* has_started */, false /* has_finished */); @@ -238,21 +231,21 @@ TEST_F(MessageTransferOperationTest, TestCannotConnectAndReachesRetryLimit) { ConstructOperation(std::vector<cryptauth::RemoteDevice>{test_devices_[0]}); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); // Try to connect and fail. The device should still be registered. fake_ble_connection_manager_->SetDeviceStatus( test_devices_[0], cryptauth::SecureChannel::Status::CONNECTING); fake_ble_connection_manager_->SetDeviceStatus( test_devices_[0], cryptauth::SecureChannel::Status::DISCONNECTED); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); // Try and fail again. The device should still be registered. fake_ble_connection_manager_->SetDeviceStatus( test_devices_[0], cryptauth::SecureChannel::Status::CONNECTING); fake_ble_connection_manager_->SetDeviceStatus( test_devices_[0], cryptauth::SecureChannel::Status::DISCONNECTED); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); // Try and fail a third time. The maximum number of failures has been reached, // so the device should be unregistered. @@ -260,7 +253,7 @@ test_devices_[0], cryptauth::SecureChannel::Status::CONNECTING); fake_ble_connection_manager_->SetDeviceStatus( test_devices_[0], cryptauth::SecureChannel::Status::DISCONNECTED); - EXPECT_FALSE(IsDeviceRegistered(test_devices_[0])); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); VerifyOperationStartedAndFinished(true /* has_started */, true /* has_finished */); @@ -271,18 +264,18 @@ TEST_F(MessageTransferOperationTest, TestFailsThenConnects) { ConstructOperation(std::vector<cryptauth::RemoteDevice>{test_devices_[0]}); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); // Try to connect and fail. The device should still be registered. fake_ble_connection_manager_->SetDeviceStatus( test_devices_[0], cryptauth::SecureChannel::Status::CONNECTING); fake_ble_connection_manager_->SetDeviceStatus( test_devices_[0], cryptauth::SecureChannel::Status::DISCONNECTED); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); // Try again and succeed. TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[0]); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); VerifyDefaultTimerCreatedForDevice(test_devices_[0]); @@ -293,14 +286,14 @@ TestSuccessfulConnectionAndReceiveMessage) { ConstructOperation(std::vector<cryptauth::RemoteDevice>{test_devices_[0]}); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); // Simulate how subclasses behave after a successful response: unregister the // device. operation_->set_should_unregister_device_on_message_received(true); TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[0]); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); VerifyDefaultTimerCreatedForDevice(test_devices_[0]); @@ -317,18 +310,34 @@ message->GetProto()->SerializeAsString()); } +TEST_F(MessageTransferOperationTest, TestDevicesUnregisteredAfterDeletion) { + ConstructOperation(test_devices_); + InitializeOperation(); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[1])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[2])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[3])); + + // Delete the operation. All registered devices should be unregistered. + operation_.reset(); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[1])); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[2])); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[3])); +} + TEST_F(MessageTransferOperationTest, TestSuccessfulConnectionAndReceiveMessage_TimeoutSeconds) { const uint32_t timeout_seconds = 90; ConstructOperation(std::vector<cryptauth::RemoteDevice>{test_devices_[0]}); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); operation_->set_timeout_seconds(timeout_seconds); TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[0]); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); VerifyTimerCreatedForDevice(test_devices_[0], timeout_seconds); @@ -351,16 +360,16 @@ TEST_F(MessageTransferOperationTest, TestAuthenticatesButTimesOut) { ConstructOperation(std::vector<cryptauth::RemoteDevice>{test_devices_[0]}); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[0]); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); VerifyDefaultTimerCreatedForDevice(test_devices_[0]); GetTimerForDevice(test_devices_[0])->Fire(); - EXPECT_FALSE(IsDeviceRegistered(test_devices_[0])); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->has_operation_finished()); } @@ -369,10 +378,10 @@ ConstructOperation( std::vector<cryptauth::RemoteDevice>{test_devices_[0], test_devices_[0]}); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[0]); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); VerifyDefaultTimerCreatedForDevice(test_devices_[0]); @@ -394,7 +403,7 @@ TEST_F(MessageTransferOperationTest, TestReceiveEventForOtherDevice) { ConstructOperation(std::vector<cryptauth::RemoteDevice>{test_devices_[0]}); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); // Simulate the authentication of |test_devices_[1]|'s channel. Since the // operation was only constructed with |test_devices_[0]|, this operation @@ -402,8 +411,8 @@ fake_ble_connection_manager_->RegisterRemoteDevice( test_devices_[1], MessageType::CONNECT_TETHERING_REQUEST); TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[1]); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); - EXPECT_FALSE(IsDeviceRegistered(test_devices_[1])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[1])); EXPECT_FALSE(operation_->HasDeviceAuthenticated(test_devices_[0])); EXPECT_FALSE(operation_->HasDeviceAuthenticated(test_devices_[1])); @@ -428,7 +437,7 @@ // Now initialize; the authentication handler should have been invoked. InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); VerifyDefaultTimerCreatedForDevice(test_devices_[0]); @@ -458,30 +467,32 @@ // Now initialize; the authentication handler should have been invoked. InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); VerifyDefaultTimerCreatedForDevice(test_devices_[0]); GetTimerForDevice(test_devices_[0])->Fire(); - - EXPECT_FALSE(IsDeviceRegistered(test_devices_[0])); EXPECT_TRUE(operation_->has_operation_finished()); + + // Should still be registered since it was also registered for the + // CONNECT_TETHERING_REQUEST MessageType. + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); } TEST_F(MessageTransferOperationTest, MultipleDevices) { ConstructOperation(test_devices_); InitializeOperation(); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[1])); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[2])); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[3])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[1])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[2])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[3])); // Authenticate |test_devices_[0]|'s channel. fake_ble_connection_manager_->RegisterRemoteDevice( test_devices_[0], MessageType::CONNECT_TETHERING_REQUEST); TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[0]); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[0])); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[0])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[0])); VerifyDefaultTimerCreatedForDevice(test_devices_[0]); // Fail 3 times to connect to |test_devices_[1]|. @@ -500,7 +511,7 @@ fake_ble_connection_manager_->SetDeviceStatus( test_devices_[1], cryptauth::SecureChannel::Status::DISCONNECTED); EXPECT_FALSE(operation_->HasDeviceAuthenticated(test_devices_[1])); - EXPECT_FALSE(IsDeviceRegistered(test_devices_[1])); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[1])); EXPECT_FALSE(GetTimerForDevice(test_devices_[1])); // Authenticate |test_devices_[2]|'s channel. @@ -508,7 +519,7 @@ test_devices_[2], MessageType::CONNECT_TETHERING_REQUEST); TransitionDeviceStatusFromDisconnectedToAuthenticated(test_devices_[2]); EXPECT_TRUE(operation_->HasDeviceAuthenticated(test_devices_[2])); - EXPECT_TRUE(IsDeviceRegistered(test_devices_[2])); + EXPECT_TRUE(fake_ble_connection_manager_->IsRegistered(test_devices_[2])); VerifyDefaultTimerCreatedForDevice(test_devices_[2]); // Fail 3 times to connect to |test_devices_[3]|. @@ -527,7 +538,7 @@ fake_ble_connection_manager_->SetDeviceStatus( test_devices_[3], cryptauth::SecureChannel::Status::DISCONNECTED); EXPECT_FALSE(operation_->HasDeviceAuthenticated(test_devices_[3])); - EXPECT_FALSE(IsDeviceRegistered(test_devices_[3])); + EXPECT_FALSE(fake_ble_connection_manager_->IsRegistered(test_devices_[3])); EXPECT_FALSE(GetTimerForDevice(test_devices_[3])); }
diff --git a/chromeos/components/tether/network_connection_handler_tether_delegate.cc b/chromeos/components/tether/network_connection_handler_tether_delegate.cc index 6c22999..f324332 100644 --- a/chromeos/components/tether/network_connection_handler_tether_delegate.cc +++ b/chromeos/components/tether/network_connection_handler_tether_delegate.cc
@@ -4,8 +4,11 @@ #include "chromeos/components/tether/network_connection_handler_tether_delegate.h" +#include "base/bind_helpers.h" +#include "chromeos/components/tether/active_host.h" #include "chromeos/components/tether/tether_connector.h" #include "chromeos/components/tether/tether_disconnector.h" +#include "components/proximity_auth/logging/logging.h" namespace chromeos { @@ -13,11 +16,14 @@ NetworkConnectionHandlerTetherDelegate::NetworkConnectionHandlerTetherDelegate( NetworkConnectionHandler* network_connection_handler, + ActiveHost* active_host, TetherConnector* tether_connector, TetherDisconnector* tether_disconnector) : network_connection_handler_(network_connection_handler), + active_host_(active_host), tether_connector_(tether_connector), - tether_disconnector_(tether_disconnector) { + tether_disconnector_(tether_disconnector), + weak_ptr_factory_(this) { network_connection_handler_->SetTetherDelegate(this); } @@ -38,10 +44,42 @@ const std::string& tether_network_guid, const base::Closure& success_callback, const network_handler::StringResultCallback& error_callback) { + if (active_host_->GetActiveHostStatus() == + ActiveHost::ActiveHostStatus::CONNECTED) { + if (active_host_->GetTetherNetworkGuid() == tether_network_guid) { + PA_LOG(WARNING) << "Received a request to connect to Tether network with " + << "GUID " << tether_network_guid << ", but that network " + << "is already connected. Ignoring this request."; + error_callback.Run(NetworkConnectionHandler::kErrorConnected); + return; + } + + std::string previous_host_guid = active_host_->GetTetherNetworkGuid(); + DCHECK(!previous_host_guid.empty()); + + PA_LOG(INFO) << "Connection requested to GUID " << tether_network_guid + << ", but there is already an active connection. " + << "Disconnecting from network with GUID " + << previous_host_guid << "."; + DisconnectFromNetwork( + previous_host_guid, base::Bind(&base::DoNothing), + base::Bind(&NetworkConnectionHandlerTetherDelegate:: + OnFailedDisconnectionFromPreviousHost, + weak_ptr_factory_.GetWeakPtr(), previous_host_guid)); + } + tether_connector_->ConnectToNetwork(tether_network_guid, success_callback, error_callback); } +void NetworkConnectionHandlerTetherDelegate:: + OnFailedDisconnectionFromPreviousHost( + const std::string& tether_network_guid, + const std::string& error_name) { + PA_LOG(ERROR) << "Failed to disconnect from previously-active host. " + << "GUID: " << tether_network_guid << ", Error: " << error_name; +} + } // namespace tether } // namespace chromeos
diff --git a/chromeos/components/tether/network_connection_handler_tether_delegate.h b/chromeos/components/tether/network_connection_handler_tether_delegate.h index 45c72366..6cd6cb20 100644 --- a/chromeos/components/tether/network_connection_handler_tether_delegate.h +++ b/chromeos/components/tether/network_connection_handler_tether_delegate.h
@@ -6,6 +6,7 @@ #define CHROMEOS_COMPONENTS_TETHER_NETWORK_CONNECTION_HANDLER_TETHER_DELEGATE_H_ #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "chromeos/network/network_connection_handler.h" namespace chromeos { @@ -14,6 +15,7 @@ namespace tether { +class ActiveHost; class TetherConnector; class TetherDisconnector; @@ -23,6 +25,7 @@ public: NetworkConnectionHandlerTetherDelegate( NetworkConnectionHandler* network_connection_handler, + ActiveHost* active_host, TetherConnector* tether_connector, TetherDisconnector* tether_disconnector); ~NetworkConnectionHandlerTetherDelegate() override; @@ -38,10 +41,18 @@ const network_handler::StringResultCallback& error_callback) override; private: + void OnFailedDisconnectionFromPreviousHost( + const std::string& tether_network_guid, + const std::string& error_name); + NetworkConnectionHandler* network_connection_handler_; + ActiveHost* active_host_; TetherConnector* tether_connector_; TetherDisconnector* tether_disconnector_; + base::WeakPtrFactory<NetworkConnectionHandlerTetherDelegate> + weak_ptr_factory_; + DISALLOW_COPY_AND_ASSIGN(NetworkConnectionHandlerTetherDelegate); };
diff --git a/chromeos/components/tether/network_connection_handler_tether_delegate_unittest.cc b/chromeos/components/tether/network_connection_handler_tether_delegate_unittest.cc index a10b284..32adea27 100644 --- a/chromeos/components/tether/network_connection_handler_tether_delegate_unittest.cc +++ b/chromeos/components/tether/network_connection_handler_tether_delegate_unittest.cc
@@ -6,15 +6,14 @@ #include <memory> -#include "chromeos/components/tether/tether_connector.h" +#include "base/bind.h" +#include "chromeos/components/tether/fake_active_host.h" +#include "chromeos/components/tether/fake_tether_connector.h" +#include "chromeos/components/tether/fake_tether_disconnector.h" #include "chromeos/components/tether/tether_disconnector.h" #include "chromeos/network/network_connection_handler.h" -#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using testing::_; -using testing::NiceMock; - namespace chromeos { namespace tether { @@ -64,40 +63,6 @@ managed_network_configuration_handler) override {} }; -class MockTetherConnector : public TetherConnector { - public: - MockTetherConnector() - : TetherConnector(nullptr /* network_state_handler */, - nullptr /* wifi_hotspot_connector */, - nullptr /* active_host */, - nullptr /* tether_host_fetcher */, - nullptr /* connection_manager */, - nullptr /* tether_host_response_recorder */, - nullptr /* device_id_tether_network_guid_map */, - nullptr /* host_scan_cache */, - nullptr /* notification_presenter */, - nullptr /* host_connection_metrics_logger */) {} - ~MockTetherConnector() override {} - - MOCK_METHOD3( - ConnectToNetwork, - void(const std::string& tether_network_guid, - const base::Closure& success_callback, - const network_handler::StringResultCallback& error_callback)); -}; - -class MockTetherDisconnector : public TetherDisconnector { - public: - MockTetherDisconnector() : TetherDisconnector() {} - ~MockTetherDisconnector() override {} - - MOCK_METHOD3( - DisconnectFromNetwork, - void(const std::string& tether_network_guid, - const base::Closure& success_callback, - const network_handler::StringResultCallback& error_callback)); -}; - } // namespace class NetworkConnectionHandlerTetherDelegateTest : public testing::Test { @@ -105,22 +70,50 @@ NetworkConnectionHandlerTetherDelegateTest() {} void SetUp() override { + error_occurred_during_test_ = false; + test_network_connection_handler_ = base::WrapUnique(new TestNetworkConnectionHandler()); - mock_tether_connector_ = - base::WrapUnique(new NiceMock<MockTetherConnector>()); - mock_tether_disconnector_ = - base::WrapUnique(new NiceMock<MockTetherDisconnector>()); + + fake_active_host_ = base::MakeUnique<FakeActiveHost>(); + fake_tether_connector_ = base::MakeUnique<FakeTetherConnector>(); + fake_tether_disconnector_ = base::MakeUnique<FakeTetherDisconnector>(); delegate_ = base::MakeUnique<NetworkConnectionHandlerTetherDelegate>( - test_network_connection_handler_.get(), mock_tether_connector_.get(), - mock_tether_disconnector_.get()); + test_network_connection_handler_.get(), fake_active_host_.get(), + fake_tether_connector_.get(), fake_tether_disconnector_.get()); + } + + void CallTetherConnect(const std::string& guid) { + test_network_connection_handler_->CallTetherConnect( + guid, base::Closure(), + base::Bind(&NetworkConnectionHandlerTetherDelegateTest::OnError, + base::Unretained(this))); + } + + void CallTetherDisconnect(const std::string& guid) { + test_network_connection_handler_->CallTetherDisconnect( + guid, base::Closure(), + base::Bind(&NetworkConnectionHandlerTetherDelegateTest::OnError, + base::Unretained(this))); + } + + void OnError(const std::string& error, + std::unique_ptr<base::DictionaryValue> error_data) { + error_occurred_during_test_ = true; + } + + void VerifyErrorExpected(bool expected) { + EXPECT_EQ(expected, error_occurred_during_test_); } std::unique_ptr<TestNetworkConnectionHandler> test_network_connection_handler_; - std::unique_ptr<NiceMock<MockTetherConnector>> mock_tether_connector_; - std::unique_ptr<NiceMock<MockTetherDisconnector>> mock_tether_disconnector_; + std::unique_ptr<FakeActiveHost> fake_active_host_; + std::unique_ptr<FakeTetherConnector> fake_tether_connector_; + std::unique_ptr<FakeTetherDisconnector> fake_tether_disconnector_; + + bool error_occurred_during_test_; std::unique_ptr<NetworkConnectionHandlerTetherDelegate> delegate_; @@ -128,18 +121,44 @@ DISALLOW_COPY_AND_ASSIGN(NetworkConnectionHandlerTetherDelegateTest); }; -TEST_F(NetworkConnectionHandlerTetherDelegateTest, TestConnect) { - EXPECT_CALL(*mock_tether_connector_, ConnectToNetwork(_, _, _)); +TEST_F(NetworkConnectionHandlerTetherDelegateTest, + TestConnect_NotAlreadyConnected) { + CallTetherConnect("tetherNetworkGuid"); + EXPECT_EQ("tetherNetworkGuid", + fake_tether_connector_->last_connected_tether_network_guid()); + VerifyErrorExpected(false); +} - test_network_connection_handler_->CallTetherConnect( - "tetherNetworkGuid", base::Closure(), network_handler::ErrorCallback()); +TEST_F(NetworkConnectionHandlerTetherDelegateTest, + TestConnect_AlreadyConnectedToSameDevice) { + fake_active_host_->SetActiveHostConnected("activeHostId", "tetherNetworkGuid", + "wifiNetworkGuid"); + CallTetherConnect("tetherNetworkGuid"); + EXPECT_TRUE( + fake_tether_connector_->last_connected_tether_network_guid().empty()); + EXPECT_TRUE(fake_tether_disconnector_->last_disconnected_tether_network_guid() + .empty()); + VerifyErrorExpected(true); +} + +TEST_F(NetworkConnectionHandlerTetherDelegateTest, + TestConnect_AlreadyConnectedToDifferentDevice) { + fake_active_host_->SetActiveHostConnected("activeHostId", "tetherNetworkGuid", + "wifiNetworkGuid"); + + CallTetherConnect("newTetherNetworkGuid"); + EXPECT_EQ("tetherNetworkGuid", + fake_tether_disconnector_->last_disconnected_tether_network_guid()); + EXPECT_EQ("newTetherNetworkGuid", + fake_tether_connector_->last_connected_tether_network_guid()); + VerifyErrorExpected(false); } TEST_F(NetworkConnectionHandlerTetherDelegateTest, TestDisconnect) { - EXPECT_CALL(*mock_tether_disconnector_, DisconnectFromNetwork(_, _, _)); - - test_network_connection_handler_->CallTetherDisconnect( - "tetherNetworkGuid", base::Closure(), network_handler::ErrorCallback()); + CallTetherDisconnect("tetherNetworkGuid"); + EXPECT_EQ("tetherNetworkGuid", + fake_tether_disconnector_->last_disconnected_tether_network_guid()); + VerifyErrorExpected(false); } } // namespace tether
diff --git a/chromeos/components/tether/network_list_sorter.cc b/chromeos/components/tether/network_list_sorter.cc new file mode 100644 index 0000000..74a2357 --- /dev/null +++ b/chromeos/components/tether/network_list_sorter.cc
@@ -0,0 +1,75 @@ +// 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 "chromeos/components/tether/network_list_sorter.h" + +#include <algorithm> + +#include "base/logging.h" +#include "chromeos/network/network_state.h" +#include "chromeos/network/network_type_pattern.h" + +namespace chromeos { + +namespace tether { + +namespace { + +// Returns true if |first_state| should be ordered before |second_state| in the +// output list. +bool CompareStates(const std::unique_ptr<ManagedState>& first_state, + const std::unique_ptr<ManagedState>& second_state) { + const NetworkState* first = first_state->AsNetworkState(); + const NetworkState* second = second_state->AsNetworkState(); + + // Priority 1: Prefer connected networks to non-connected. + if (first->IsConnectedState() != second->IsConnectedState()) + return first->IsConnectedState(); + + // Priority 2: Prefer connecting networks to non-connecting. + if (first->IsConnectingState() != second->IsConnectingState()) + return first->IsConnectingState(); + + // Priority 3: Prefer higher signal strength. + if (first->signal_strength() != second->signal_strength()) + return first->signal_strength() > second->signal_strength(); + + // Priority 4: Prefer higher battery percentage. + if (first->battery_percentage() != second->battery_percentage()) + return first->battery_percentage() > second->battery_percentage(); + + // Priority 5: Prefer devices which have already connected before. + if (first->tether_has_connected_to_host() != + second->tether_has_connected_to_host()) { + return first->tether_has_connected_to_host(); + } + + // Priority 6: Alphabetize by device name. + if (first->name() != second->name()) + return first->name() < second->name(); + + // Priority 7: Alphabetize by cellular carrier name. + if (first->carrier() != second->carrier()) + return first->carrier() < second->carrier(); + + // Priority 8: Alphabetize by GUID. GUID is not shown in the UI, + // so this is just a tie-breaker. All networks have unique GUIDs. + DCHECK(first->guid() != second->guid()); + return first->guid() < second->guid(); +} + +} // namespace + +NetworkListSorter::NetworkListSorter() {} + +NetworkListSorter::~NetworkListSorter() {} + +void NetworkListSorter::SortTetherNetworkList( + NetworkStateHandler::ManagedStateList* tether_networks) const { + std::sort(tether_networks->begin(), tether_networks->end(), &CompareStates); +} + +} // namespace tether + +} // namespace chromeos
diff --git a/chromeos/components/tether/network_list_sorter.h b/chromeos/components/tether/network_list_sorter.h new file mode 100644 index 0000000..b5c0b41 --- /dev/null +++ b/chromeos/components/tether/network_list_sorter.h
@@ -0,0 +1,39 @@ +// 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 CHROMEOS_COMPONENTS_TETHER_NETWORK_LIST_SORTER_H_ +#define CHROMEOS_COMPONENTS_TETHER_NETWORK_LIST_SORTER_H_ + +#include "base/macros.h" +#include "chromeos/network/network_state_handler.h" +#include "components/cryptauth/remote_device.h" + +namespace chromeos { + +class NetworkStateHandler; + +namespace tether { + +// Sorts networks in the order that they should be displayed in network +// configuration UI. The sort order is be determined by network properties +// (e.g., connected devices before unconnected; higher signal strength before +// lower signal strength). +class NetworkListSorter : public NetworkStateHandler::TetherSortDelegate { + public: + NetworkListSorter(); + virtual ~NetworkListSorter(); + + // NetworkStateHandler::TetherNetworkListSorter: + void SortTetherNetworkList( + NetworkStateHandler::ManagedStateList* tether_networks) const override; + + private: + DISALLOW_COPY_AND_ASSIGN(NetworkListSorter); +}; + +} // namespace tether + +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_TETHER_NETWORK_LIST_SORTER_H_
diff --git a/chromeos/components/tether/network_list_sorter_unittest.cc b/chromeos/components/tether/network_list_sorter_unittest.cc new file mode 100644 index 0000000..72cefc8 --- /dev/null +++ b/chromeos/components/tether/network_list_sorter_unittest.cc
@@ -0,0 +1,134 @@ +// 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 "chromeos/components/tether/network_list_sorter.h" + +#include <memory> + +#include "base/memory/ptr_util.h" +#include "chromeos/network/network_state.h" +#include "chromeos/network/network_state_handler.h" +#include "chromeos/network/tether_constants.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/cros_system_api/dbus/service_constants.h" + +namespace chromeos { + +namespace tether { + +namespace { + +const char kGuid0[] = "guid0"; +const char kGuid1[] = "guid1"; +const char kGuid2[] = "guid2"; + +const char* const kGuidArray[] = {kGuid0, kGuid1, kGuid2}; + +} // namespace + +class NetworkListSorterTest : public testing::Test { + protected: + NetworkListSorterTest() {} + + void SetUp() override { + network_list_sorter_ = base::MakeUnique<NetworkListSorter>(); + } + + void GenerateTestList() { + list_ = base::MakeUnique<NetworkStateHandler::ManagedStateList>(); + + auto state0 = base::MakeUnique<NetworkState>(kGuid0); + state0->SetGuid(kGuid0); + state0->set_visible(true); + list_->emplace_back(std::move(state0)); + + auto state1 = base::MakeUnique<NetworkState>(kGuid1); + state1->SetGuid(kGuid1); + state1->set_visible(true); + list_->emplace_back(std::move(state1)); + + auto state2 = base::MakeUnique<NetworkState>(kGuid2); + state2->SetGuid(kGuid2); + state2->set_visible(true); + list_->emplace_back(std::move(state2)); + } + + NetworkState* NetworkAtIndex(int index) { + return list_->at(index)->AsNetworkState(); + } + + void SetName(NetworkState* state, const std::string& name) { + state->set_name(name); + } + + void SortAndVerifySortOrder(int el0, int el1, int el2) { + network_list_sorter_->SortTetherNetworkList(list_.get()); + + EXPECT_EQ(NetworkAtIndex(0)->guid(), kGuidArray[el0]); + EXPECT_EQ(NetworkAtIndex(1)->guid(), kGuidArray[el1]); + EXPECT_EQ(NetworkAtIndex(2)->guid(), kGuidArray[el2]); + } + + std::unique_ptr<NetworkStateHandler::ManagedStateList> list_; + + std::unique_ptr<NetworkListSorter> network_list_sorter_; + + private: + DISALLOW_COPY_AND_ASSIGN(NetworkListSorterTest); +}; + +TEST_F(NetworkListSorterTest, ConnectionState) { + GenerateTestList(); + NetworkAtIndex(0)->set_connection_state(shill::kStateIdle); + NetworkAtIndex(1)->set_connection_state(shill::kStateAssociation); + NetworkAtIndex(2)->set_connection_state(shill::kStateOnline); + SortAndVerifySortOrder(2, 1, 0); +} + +TEST_F(NetworkListSorterTest, SignalStrength) { + GenerateTestList(); + NetworkAtIndex(0)->set_signal_strength(0); + NetworkAtIndex(1)->set_signal_strength(50); + NetworkAtIndex(2)->set_signal_strength(100); + SortAndVerifySortOrder(2, 1, 0); +} + +TEST_F(NetworkListSorterTest, BatteryPercentage) { + GenerateTestList(); + NetworkAtIndex(0)->set_signal_strength(0); + NetworkAtIndex(1)->set_signal_strength(50); + NetworkAtIndex(2)->set_signal_strength(100); + SortAndVerifySortOrder(2, 1, 0); +} + +TEST_F(NetworkListSorterTest, HasConnectedToHost) { + GenerateTestList(); + NetworkAtIndex(2)->set_tether_has_connected_to_host(true); + SortAndVerifySortOrder(2, 0, 1); +} + +TEST_F(NetworkListSorterTest, Name) { + GenerateTestList(); + SetName(NetworkAtIndex(0), "c"); + SetName(NetworkAtIndex(1), "b"); + SetName(NetworkAtIndex(2), "a"); + SortAndVerifySortOrder(2, 1, 0); +} + +TEST_F(NetworkListSorterTest, Carrier) { + GenerateTestList(); + NetworkAtIndex(0)->set_carrier("c"); + NetworkAtIndex(1)->set_carrier("b"); + NetworkAtIndex(2)->set_carrier("a"); + SortAndVerifySortOrder(2, 1, 0); +} + +TEST_F(NetworkListSorterTest, Guid) { + GenerateTestList(); + SortAndVerifySortOrder(0, 1, 2); +} + +} // namespace tether + +} // namespace chromeos
diff --git a/chromeos/components/tether/tether_connector.h b/chromeos/components/tether/tether_connector.h index 0a04c436..453ef6df 100644 --- a/chromeos/components/tether/tether_connector.h +++ b/chromeos/components/tether/tether_connector.h
@@ -5,101 +5,34 @@ #ifndef CHROMEOS_COMPONENTS_TETHER_TETHER_CONNECTOR_H_ #define CHROMEOS_COMPONENTS_TETHER_TETHER_CONNECTOR_H_ +#include "base/callback_forward.h" #include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "chromeos/components/tether/connect_tethering_operation.h" -#include "chromeos/components/tether/host_connection_metrics_logger.h" #include "chromeos/network/network_connection_handler.h" namespace chromeos { -class NetworkStateHandler; - namespace tether { -class ActiveHost; -class BleConnectionManager; -class DeviceIdTetherNetworkGuidMap; -class HostScanCache; -class NotificationPresenter; -class TetherHostFetcher; -class TetherHostResponseRecorder; -class WifiHotspotConnector; - // Connects to a tether network. When the user initiates a connection via the // UI, TetherConnector receives a callback from NetworkConnectionHandler and // initiates a connection by starting a ConnectTetheringOperation. When a // response has been received from the tether host, TetherConnector connects to // the associated Wi-Fi network. -class TetherConnector : public ConnectTetheringOperation::Observer { +class TetherConnector { public: - TetherConnector( - NetworkStateHandler* network_state_handler, - WifiHotspotConnector* wifi_hotspot_connector, - ActiveHost* active_host, - TetherHostFetcher* tether_host_fetcher, - BleConnectionManager* connection_manager, - TetherHostResponseRecorder* tether_host_response_recorder, - DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map, - HostScanCache* host_scan_cache, - NotificationPresenter* notification_presenter, - HostConnectionMetricsLogger* host_connection_metrics_logger); - virtual ~TetherConnector(); + TetherConnector() {} + virtual ~TetherConnector() {} virtual void ConnectToNetwork( const std::string& tether_network_guid, const base::Closure& success_callback, - const network_handler::StringResultCallback& error_callback); + const network_handler::StringResultCallback& error_callback) = 0; // Returns whether the connection attempt was successfully canceled. - virtual bool CancelConnectionAttempt(const std::string& tether_network_guid); - - // ConnectTetheringOperation::Observer: - void OnSuccessfulConnectTetheringResponse( - const cryptauth::RemoteDevice& remote_device, - const std::string& ssid, - const std::string& password) override; - void OnConnectTetheringFailure( - const cryptauth::RemoteDevice& remote_device, - ConnectTetheringResponse_ResponseCode error_code) override; + virtual bool CancelConnectionAttempt( + const std::string& tether_network_guid) = 0; private: - friend class TetherConnectorTest; - - void SetConnectionFailed(const std::string& error_name, - HostConnectionMetricsLogger::ConnectionToHostResult - connection_to_host_result); - void SetConnectionSucceeded(const std::string& device_id, - const std::string& wifi_network_guid); - - void OnTetherHostToConnectFetched( - const std::string& device_id, - std::unique_ptr<cryptauth::RemoteDevice> tether_host_to_connect); - void OnWifiConnection(const std::string& device_id, - const std::string& wifi_network_guid); - HostConnectionMetricsLogger::ConnectionToHostResult - GetConnectionToHostResultFromErrorCode( - const std::string& device_id, - ConnectTetheringResponse_ResponseCode error_code); - - NetworkConnectionHandler* network_connection_handler_; - NetworkStateHandler* network_state_handler_; - WifiHotspotConnector* wifi_hotspot_connector_; - ActiveHost* active_host_; - TetherHostFetcher* tether_host_fetcher_; - BleConnectionManager* connection_manager_; - TetherHostResponseRecorder* tether_host_response_recorder_; - DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map_; - HostScanCache* host_scan_cache_; - NotificationPresenter* notification_presenter_; - HostConnectionMetricsLogger* host_connection_metrics_logger_; - - std::string device_id_pending_connection_; - base::Closure success_callback_; - network_handler::StringResultCallback error_callback_; - std::unique_ptr<ConnectTetheringOperation> connect_tethering_operation_; - base::WeakPtrFactory<TetherConnector> weak_ptr_factory_; - DISALLOW_COPY_AND_ASSIGN(TetherConnector); };
diff --git a/chromeos/components/tether/tether_connector.cc b/chromeos/components/tether/tether_connector_impl.cc similarity index 93% rename from chromeos/components/tether/tether_connector.cc rename to chromeos/components/tether/tether_connector_impl.cc index 4d64c1d2..cbc5bff 100644 --- a/chromeos/components/tether/tether_connector.cc +++ b/chromeos/components/tether/tether_connector_impl.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 "chromeos/components/tether/tether_connector.h" +#include "chromeos/components/tether/tether_connector_impl.h" #include "base/bind.h" #include "chromeos/components/tether/active_host.h" @@ -21,7 +21,7 @@ namespace tether { -TetherConnector::TetherConnector( +TetherConnectorImpl::TetherConnectorImpl( NetworkStateHandler* network_state_handler, WifiHotspotConnector* wifi_hotspot_connector, ActiveHost* active_host, @@ -44,13 +44,13 @@ host_connection_metrics_logger_(host_connection_metrics_logger), weak_ptr_factory_(this) {} -TetherConnector::~TetherConnector() { +TetherConnectorImpl::~TetherConnectorImpl() { if (connect_tethering_operation_) { connect_tethering_operation_->RemoveObserver(this); } } -void TetherConnector::ConnectToNetwork( +void TetherConnectorImpl::ConnectToNetwork( const std::string& tether_network_guid, const base::Closure& success_callback, const network_handler::StringResultCallback& error_callback) { @@ -96,12 +96,12 @@ tether_host_fetcher_->FetchTetherHost( device_id_pending_connection_, - base::Bind(&TetherConnector::OnTetherHostToConnectFetched, + base::Bind(&TetherConnectorImpl::OnTetherHostToConnectFetched, weak_ptr_factory_.GetWeakPtr(), device_id_pending_connection_)); } -bool TetherConnector::CancelConnectionAttempt( +bool TetherConnectorImpl::CancelConnectionAttempt( const std::string& tether_network_guid) { const std::string device_id = device_id_tether_network_guid_map_->GetDeviceIdForTetherNetworkGuid( @@ -130,7 +130,7 @@ return true; } -void TetherConnector::OnSuccessfulConnectTetheringResponse( +void TetherConnectorImpl::OnSuccessfulConnectTetheringResponse( const cryptauth::RemoteDevice& remote_device, const std::string& ssid, const std::string& password) { @@ -160,11 +160,11 @@ wifi_hotspot_connector_->ConnectToWifiHotspot( ssid_copy, password_copy, active_host_->GetTetherNetworkGuid(), - base::Bind(&TetherConnector::OnWifiConnection, + base::Bind(&TetherConnectorImpl::OnWifiConnection, weak_ptr_factory_.GetWeakPtr(), remote_device_id)); } -void TetherConnector::OnConnectTetheringFailure( +void TetherConnectorImpl::OnConnectTetheringFailure( const cryptauth::RemoteDevice& remote_device, ConnectTetheringResponse_ResponseCode error_code) { std::string device_id_copy = remote_device.GetDeviceId(); @@ -188,7 +188,7 @@ GetConnectionToHostResultFromErrorCode(device_id_copy, error_code)); } -void TetherConnector::OnTetherHostToConnectFetched( +void TetherConnectorImpl::OnTetherHostToConnectFetched( const std::string& device_id, std::unique_ptr<cryptauth::RemoteDevice> tether_host_to_connect) { if (device_id_pending_connection_ != device_id) { @@ -223,7 +223,7 @@ connect_tethering_operation_->Initialize(); } -void TetherConnector::SetConnectionFailed( +void TetherConnectorImpl::SetConnectionFailed( const std::string& error_name, HostConnectionMetricsLogger::ConnectionToHostResult connection_to_host_result) { @@ -253,7 +253,7 @@ } } -void TetherConnector::SetConnectionSucceeded( +void TetherConnectorImpl::SetConnectionSucceeded( const std::string& device_id, const std::string& wifi_network_guid) { DCHECK(!device_id_pending_connection_.empty()); @@ -281,8 +281,9 @@ wifi_network_guid); } -void TetherConnector::OnWifiConnection(const std::string& device_id, - const std::string& wifi_network_guid) { +void TetherConnectorImpl::OnWifiConnection( + const std::string& device_id, + const std::string& wifi_network_guid) { if (device_id != device_id_pending_connection_) { // If the device ID does not match the ID of the device pending connection, // this is a stale attempt. @@ -313,7 +314,7 @@ } HostConnectionMetricsLogger::ConnectionToHostResult -TetherConnector::GetConnectionToHostResultFromErrorCode( +TetherConnectorImpl::GetConnectionToHostResultFromErrorCode( const std::string& device_id, ConnectTetheringResponse_ResponseCode error_code) { if (error_code ==
diff --git a/chromeos/components/tether/tether_connector_impl.h b/chromeos/components/tether/tether_connector_impl.h new file mode 100644 index 0000000..0085b21f9 --- /dev/null +++ b/chromeos/components/tether/tether_connector_impl.h
@@ -0,0 +1,112 @@ +// 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 CHROMEOS_COMPONENTS_TETHER_TETHER_CONNECTOR_IMPL_H_ +#define CHROMEOS_COMPONENTS_TETHER_TETHER_CONNECTOR_IMPL_H_ + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "chromeos/components/tether/connect_tethering_operation.h" +#include "chromeos/components/tether/host_connection_metrics_logger.h" +#include "chromeos/components/tether/tether_connector.h" +#include "chromeos/network/network_connection_handler.h" + +namespace chromeos { + +class NetworkStateHandler; + +namespace tether { + +class ActiveHost; +class BleConnectionManager; +class DeviceIdTetherNetworkGuidMap; +class HostScanCache; +class NotificationPresenter; +class TetherHostFetcher; +class TetherHostResponseRecorder; +class WifiHotspotConnector; + +// Connects to a tether network. When the user initiates a connection via the +// UI, TetherConnectorImpl receives a callback from NetworkConnectionHandler and +// initiates a connection by starting a ConnectTetheringOperation. When a +// response has been received from the tether host, TetherConnectorImpl connects +// to the associated Wi-Fi network. +class TetherConnectorImpl : public TetherConnector, + public ConnectTetheringOperation::Observer { + public: + TetherConnectorImpl( + NetworkStateHandler* network_state_handler, + WifiHotspotConnector* wifi_hotspot_connector, + ActiveHost* active_host, + TetherHostFetcher* tether_host_fetcher, + BleConnectionManager* connection_manager, + TetherHostResponseRecorder* tether_host_response_recorder, + DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map, + HostScanCache* host_scan_cache, + NotificationPresenter* notification_presenter, + HostConnectionMetricsLogger* host_connection_metrics_logger); + ~TetherConnectorImpl() override; + + void ConnectToNetwork( + const std::string& tether_network_guid, + const base::Closure& success_callback, + const network_handler::StringResultCallback& error_callback) override; + + // Returns whether the connection attempt was successfully canceled. + bool CancelConnectionAttempt(const std::string& tether_network_guid) override; + + // ConnectTetheringOperation::Observer: + void OnSuccessfulConnectTetheringResponse( + const cryptauth::RemoteDevice& remote_device, + const std::string& ssid, + const std::string& password) override; + void OnConnectTetheringFailure( + const cryptauth::RemoteDevice& remote_device, + ConnectTetheringResponse_ResponseCode error_code) override; + + private: + friend class TetherConnectorImplTest; + + void SetConnectionFailed(const std::string& error_name, + HostConnectionMetricsLogger::ConnectionToHostResult + connection_to_host_result); + void SetConnectionSucceeded(const std::string& device_id, + const std::string& wifi_network_guid); + + void OnTetherHostToConnectFetched( + const std::string& device_id, + std::unique_ptr<cryptauth::RemoteDevice> tether_host_to_connect); + void OnWifiConnection(const std::string& device_id, + const std::string& wifi_network_guid); + HostConnectionMetricsLogger::ConnectionToHostResult + GetConnectionToHostResultFromErrorCode( + const std::string& device_id, + ConnectTetheringResponse_ResponseCode error_code); + + NetworkConnectionHandler* network_connection_handler_; + NetworkStateHandler* network_state_handler_; + WifiHotspotConnector* wifi_hotspot_connector_; + ActiveHost* active_host_; + TetherHostFetcher* tether_host_fetcher_; + BleConnectionManager* connection_manager_; + TetherHostResponseRecorder* tether_host_response_recorder_; + DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map_; + HostScanCache* host_scan_cache_; + NotificationPresenter* notification_presenter_; + HostConnectionMetricsLogger* host_connection_metrics_logger_; + + std::string device_id_pending_connection_; + base::Closure success_callback_; + network_handler::StringResultCallback error_callback_; + std::unique_ptr<ConnectTetheringOperation> connect_tethering_operation_; + base::WeakPtrFactory<TetherConnectorImpl> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(TetherConnectorImpl); +}; + +} // namespace tether + +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_TETHER_TETHER_CONNECTOR_IMPL_H_
diff --git a/chromeos/components/tether/tether_connector_unittest.cc b/chromeos/components/tether/tether_connector_impl_unittest.cc similarity index 95% rename from chromeos/components/tether/tether_connector_unittest.cc rename to chromeos/components/tether/tether_connector_impl_unittest.cc index d95bde0..6aaaeb2 100644 --- a/chromeos/components/tether/tether_connector_unittest.cc +++ b/chromeos/components/tether/tether_connector_impl_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 "chromeos/components/tether/tether_connector.h" +#include "chromeos/components/tether/tether_connector_impl.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" @@ -119,11 +119,11 @@ } // namespace -class TetherConnectorTest : public NetworkStateTest { +class TetherConnectorImplTest : public NetworkStateTest { public: - TetherConnectorTest() + TetherConnectorImplTest() : test_devices_(cryptauth::GenerateTestRemoteDevices(2u)) {} - ~TetherConnectorTest() override {} + ~TetherConnectorImplTest() override {} void SetUp() override { DBusThreadManager::Initialize(); @@ -154,7 +154,7 @@ result_.clear(); - tether_connector_ = base::WrapUnique(new TetherConnector( + tether_connector_ = base::WrapUnique(new TetherConnectorImpl( network_state_handler(), fake_wifi_hotspot_connector_.get(), fake_active_host_.get(), fake_tether_host_fetcher_.get(), fake_ble_connection_manager_.get(), @@ -185,7 +185,7 @@ void SetUpTetherNetworks() { // Add a tether network corresponding to both of the test devices. These // networks are expected to be added already before - // TetherConnector::ConnectToNetwork is called. + // TetherConnectorImpl::ConnectToNetwork is called. AddTetherNetwork(GetTetherNetworkGuid(test_devices_[0].GetDeviceId()), "TetherNetworkName1", "TetherNetworkCarrier1", 85 /* battery_percentage */, 75 /* signal_strength */, @@ -231,9 +231,9 @@ void CallConnect(const std::string& tether_network_guid) { tether_connector_->ConnectToNetwork( tether_network_guid, - base::Bind(&TetherConnectorTest::SuccessCallback, + base::Bind(&TetherConnectorImplTest::SuccessCallback, base::Unretained(this)), - base::Bind(&TetherConnectorTest::ErrorCallback, + base::Bind(&TetherConnectorImplTest::ErrorCallback, base::Unretained(this))); } @@ -317,13 +317,13 @@ std::string result_; - std::unique_ptr<TetherConnector> tether_connector_; + std::unique_ptr<TetherConnectorImpl> tether_connector_; private: - DISALLOW_COPY_AND_ASSIGN(TetherConnectorTest); + DISALLOW_COPY_AND_ASSIGN(TetherConnectorImplTest); }; -TEST_F(TetherConnectorTest, TestCannotFetchDevice) { +TEST_F(TetherConnectorImplTest, TestCannotFetchDevice) { EXPECT_CALL( *mock_host_connection_metrics_logger_, RecordConnectionToHostResult( @@ -352,7 +352,7 @@ fake_notification_presenter_->is_connection_failed_notification_shown()); } -TEST_F(TetherConnectorTest, TestCancelWhileOperationActive) { +TEST_F(TetherConnectorImplTest, TestCancelWhileOperationActive) { EXPECT_CALL( *mock_host_connection_metrics_logger_, RecordConnectionToHostResult( @@ -386,7 +386,7 @@ fake_notification_presenter_->is_connection_failed_notification_shown()); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, TestConnectTetheringOperationFails_SetupNotRequired) { VerifyConnectTetheringOperationFails( ConnectTetheringResponse_ResponseCode:: @@ -396,7 +396,8 @@ CONNECTION_RESULT_FAILURE_UNKNOWN_ERROR); } -TEST_F(TetherConnectorTest, TestConnectTetheringOperationFails_SetupRequired) { +TEST_F(TetherConnectorImplTest, + TestConnectTetheringOperationFails_SetupRequired) { VerifyConnectTetheringOperationFails( ConnectTetheringResponse_ResponseCode:: ConnectTetheringResponse_ResponseCode_UNKNOWN_ERROR, @@ -405,7 +406,7 @@ CONNECTION_RESULT_FAILURE_UNKNOWN_ERROR); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, TestConnectTetheringOperationFails_ProvisioningFailed) { VerifyConnectTetheringOperationFails( ConnectTetheringResponse_ResponseCode:: @@ -415,7 +416,7 @@ CONNECTION_RESULT_PROVISIONING_FAILED); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, TestConnectTetheringOperationFails_TetheringTimeout_SetupNotRequired) { VerifyConnectTetheringOperationFails( ConnectTetheringResponse_ResponseCode:: @@ -425,7 +426,7 @@ CONNECTION_RESULT_FAILURE_TETHERING_TIMED_OUT_FIRST_TIME_SETUP_WAS_NOT_REQUIRED); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, TestConnectTetheringOperationFails_TetheringTimeout_SetupRequired) { VerifyConnectTetheringOperationFails( ConnectTetheringResponse_ResponseCode:: @@ -435,7 +436,7 @@ CONNECTION_RESULT_FAILURE_TETHERING_TIMED_OUT_FIRST_TIME_SETUP_WAS_REQUIRED); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, ConnectionToHostFailedNotificationRemovedWhenConnectionStarts) { // Start with the "connection to host failed" notification showing. fake_notification_presenter_->NotifyConnectionToHostFailed(); @@ -446,7 +447,7 @@ fake_notification_presenter_->is_connection_failed_notification_shown()); } -TEST_F(TetherConnectorTest, TestConnectingToWifiFails) { +TEST_F(TetherConnectorImplTest, TestConnectingToWifiFails) { EXPECT_CALL(*mock_host_connection_metrics_logger_, RecordConnectionToHostResult( HostConnectionMetricsLogger::ConnectionToHostResult:: @@ -489,7 +490,7 @@ fake_notification_presenter_->is_connection_failed_notification_shown()); } -TEST_F(TetherConnectorTest, TestCancelWhileConnectingToWifi) { +TEST_F(TetherConnectorImplTest, TestCancelWhileConnectingToWifi) { EXPECT_CALL( *mock_host_connection_metrics_logger_, RecordConnectionToHostResult( @@ -527,7 +528,7 @@ fake_notification_presenter_->is_connection_failed_notification_shown()); } -TEST_F(TetherConnectorTest, TestSuccessfulConnection) { +TEST_F(TetherConnectorImplTest, TestSuccessfulConnection) { EXPECT_CALL(*mock_host_connection_metrics_logger_, RecordConnectionToHostResult( HostConnectionMetricsLogger::ConnectionToHostResult:: @@ -578,7 +579,7 @@ fake_notification_presenter_->is_connection_failed_notification_shown()); } -TEST_F(TetherConnectorTest, TestSuccessfulConnection_SetupRequired) { +TEST_F(TetherConnectorImplTest, TestSuccessfulConnection_SetupRequired) { EXPECT_CALL(*mock_host_connection_metrics_logger_, RecordConnectionToHostResult( HostConnectionMetricsLogger::ConnectionToHostResult:: @@ -615,7 +616,7 @@ fake_notification_presenter_->is_connection_failed_notification_shown()); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, TestNewConnectionAttemptDuringFetch_DifferentDevice) { EXPECT_CALL( *mock_host_connection_metrics_logger_, @@ -644,7 +645,7 @@ fake_operation_factory_->created_operations()[0]->GetRemoteDevice()); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, TestNewConnectionAttemptDuringOperation_DifferentDevice) { EXPECT_CALL( *mock_host_connection_metrics_logger_, @@ -704,7 +705,7 @@ fake_wifi_hotspot_connector_->most_recent_tether_network_guid()); } -TEST_F(TetherConnectorTest, +TEST_F(TetherConnectorImplTest, TestNewConnectionAttemptDuringWifiConnection_DifferentDevice) { EXPECT_CALL( *mock_host_connection_metrics_logger_,
diff --git a/chromeos/components/tether/tether_disconnector_impl_unittest.cc b/chromeos/components/tether/tether_disconnector_impl_unittest.cc index ebf08aa..4607fbe0 100644 --- a/chromeos/components/tether/tether_disconnector_impl_unittest.cc +++ b/chromeos/components/tether/tether_disconnector_impl_unittest.cc
@@ -11,6 +11,7 @@ #include "chromeos/components/tether/fake_active_host.h" #include "chromeos/components/tether/fake_ble_connection_manager.h" #include "chromeos/components/tether/fake_network_configuration_remover.h" +#include "chromeos/components/tether/fake_tether_connector.h" #include "chromeos/components/tether/fake_tether_host_fetcher.h" #include "chromeos/components/tether/fake_wifi_hotspot_connector.h" #include "chromeos/components/tether/mock_tether_host_response_recorder.h" @@ -99,42 +100,6 @@ network_handler::ErrorCallback last_disconnect_error_callback_; }; -class TestTetherConnector : public TetherConnector { - public: - TestTetherConnector() - : TetherConnector(nullptr /* network_state_handler */, - nullptr /* wifi_hotspot_connector */, - nullptr /* active_host */, - nullptr /* tether_host_fetcher */, - nullptr /* connection_manager */, - nullptr /* tether_host_response_recorder */, - nullptr /* device_id_tether_network_guid_map */, - nullptr /* host_scan_cache */, - nullptr /* notification_presenter */, - nullptr /* host_connection_metrics_logger */), - should_cancel_successfully_(true) {} - ~TestTetherConnector() override {} - - void set_should_cancel_successfully(bool should_cancel_successfully) { - should_cancel_successfully_ = should_cancel_successfully; - } - - std::string last_canceled_tether_network_guid() { - return last_canceled_tether_network_guid_; - } - - // TetherConnector: - bool CancelConnectionAttempt( - const std::string& tether_network_guid) override { - last_canceled_tether_network_guid_ = tether_network_guid; - return should_cancel_successfully_; - } - - private: - bool should_cancel_successfully_; - std::string last_canceled_tether_network_guid_; -}; - class FakeDisconnectTetheringOperation : public DisconnectTetheringOperation { public: FakeDisconnectTetheringOperation( @@ -203,7 +168,7 @@ fake_ble_connection_manager_ = base::MakeUnique<FakeBleConnectionManager>(); fake_network_configuration_remover_ = base::MakeUnique<FakeNetworkConfigurationRemover>(); - test_tether_connector_ = base::WrapUnique(new TestTetherConnector()); + fake_tether_connector_ = base::MakeUnique<FakeTetherConnector>(); device_id_tether_network_guid_map_ = base::MakeUnique<DeviceIdTetherNetworkGuidMap>(); fake_tether_host_fetcher_ = base::MakeUnique<FakeTetherHostFetcher>( @@ -221,7 +186,7 @@ tether_disconnector_ = base::MakeUnique<TetherDisconnectorImpl>( test_network_connection_handler_.get(), network_state_handler(), fake_active_host_.get(), fake_ble_connection_manager_.get(), - fake_network_configuration_remover_.get(), test_tether_connector_.get(), + fake_network_configuration_remover_.get(), fake_tether_connector_.get(), device_id_tether_network_guid_map_.get(), fake_tether_host_fetcher_.get(), test_pref_service_.get()); } @@ -343,7 +308,7 @@ std::unique_ptr<FakeBleConnectionManager> fake_ble_connection_manager_; std::unique_ptr<FakeNetworkConfigurationRemover> fake_network_configuration_remover_; - std::unique_ptr<TestTetherConnector> test_tether_connector_; + std::unique_ptr<FakeTetherConnector> fake_tether_connector_; // TODO(hansberry): Use a fake for this when a real mapping scheme is created. std::unique_ptr<DeviceIdTetherNetworkGuidMap> device_id_tether_network_guid_map_; @@ -395,13 +360,13 @@ fake_active_host_->SetActiveHostConnecting( test_devices_[0].GetDeviceId(), GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); - test_tether_connector_->set_should_cancel_successfully(false); + fake_tether_connector_->set_should_cancel_successfully(false); CallDisconnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); EXPECT_EQ(NetworkConnectionHandler::kErrorDisconnectFailed, GetResultAndReset()); EXPECT_EQ(GetTetherNetworkGuid(test_devices_[0].GetDeviceId()), - test_tether_connector_->last_canceled_tether_network_guid()); + fake_tether_connector_->last_canceled_tether_network_guid()); // Note: This test does not check the active host's status because it will be // changed by TetherConnector. @@ -411,12 +376,12 @@ fake_active_host_->SetActiveHostConnecting( test_devices_[0].GetDeviceId(), GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); - test_tether_connector_->set_should_cancel_successfully(true); + fake_tether_connector_->set_should_cancel_successfully(true); CallDisconnect(GetTetherNetworkGuid(test_devices_[0].GetDeviceId())); EXPECT_EQ(kSuccessResult, GetResultAndReset()); EXPECT_EQ(GetTetherNetworkGuid(test_devices_[0].GetDeviceId()), - test_tether_connector_->last_canceled_tether_network_guid()); + fake_tether_connector_->last_canceled_tether_network_guid()); // Note: This test does not check the active host's status because it will be // changed by TetherConnector. @@ -669,7 +634,7 @@ tether_disconnector_ = base::MakeUnique<TetherDisconnectorImpl>( test_network_connection_handler_.get(), network_state_handler(), fake_active_host_.get(), fake_ble_connection_manager_.get(), - fake_network_configuration_remover_.get(), test_tether_connector_.get(), + fake_network_configuration_remover_.get(), fake_tether_connector_.get(), device_id_tether_network_guid_map_.get(), fake_tether_host_fetcher_.get(), test_pref_service_.get()); EXPECT_EQ(
diff --git a/chromeos/cryptohome/homedir_methods.cc b/chromeos/cryptohome/homedir_methods.cc index 0775c2b..784b465 100644 --- a/chromeos/cryptohome/homedir_methods.cc +++ b/chromeos/cryptohome/homedir_methods.cc
@@ -218,10 +218,14 @@ } void MigrateToDircrypto(const Identification& id, + bool minimal_migration, const DBusResultCallback& callback) override { + cryptohome::MigrateToDircryptoRequest request; + request.set_minimal_migration(minimal_migration); DBusThreadManager::Get()->GetCryptohomeClient()->MigrateToDircrypto( - id, base::Bind(&HomedirMethodsImpl::OnDBusResultCallback, - weak_ptr_factory_.GetWeakPtr(), callback)); + id, request, + base::Bind(&HomedirMethodsImpl::OnDBusResultCallback, + weak_ptr_factory_.GetWeakPtr(), callback)); } private:
diff --git a/chromeos/cryptohome/homedir_methods.h b/chromeos/cryptohome/homedir_methods.h index 338aa01a..455fba7d 100644 --- a/chromeos/cryptohome/homedir_methods.h +++ b/chromeos/cryptohome/homedir_methods.h
@@ -114,6 +114,7 @@ // Asks cryptohomed to migrate the cryptohome to the new encryption method // for the user specified by |id|. virtual void MigrateToDircrypto(const Identification& id, + bool minimal_migration, const DBusResultCallback& callback) = 0; // Creates the global HomedirMethods instance.
diff --git a/chromeos/cryptohome/mock_homedir_methods.h b/chromeos/cryptohome/mock_homedir_methods.h index de36e08..f92d71e 100644 --- a/chromeos/cryptohome/mock_homedir_methods.h +++ b/chromeos/cryptohome/mock_homedir_methods.h
@@ -58,8 +58,9 @@ MOCK_METHOD2(GetAccountDiskUsage, void(const Identification& id, const GetAccountDiskUsageCallback& callback)); - MOCK_METHOD2(MigrateToDircrypto, + MOCK_METHOD3(MigrateToDircrypto, void(const Identification& id, + bool minimal_migration, const DBusResultCallback& callback)); void set_mount_callback(const base::Closure& callback) {
diff --git a/chromeos/dbus/cryptohome_client.cc b/chromeos/dbus/cryptohome_client.cc index eb3be01..ad37948 100644 --- a/chromeos/dbus/cryptohome_client.cc +++ b/chromeos/dbus/cryptohome_client.cc
@@ -933,15 +933,19 @@ } void MigrateToDircrypto(const cryptohome::Identification& cryptohome_id, + const cryptohome::MigrateToDircryptoRequest& request, VoidDBusMethodCallback callback) override { + // TODO(bug758837,pmarko): Switch back to MigrateToDircrypto when its + // signature matches MigrateToDircryptoEx. dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, - cryptohome::kCryptohomeMigrateToDircrypto); + cryptohome::kCryptohomeMigrateToDircryptoEx); cryptohome::AccountIdentifier id_proto; FillIdentificationProtobuf(cryptohome_id, &id_proto); dbus::MessageWriter writer(&method_call); writer.AppendProtoAsArrayOfBytes(id_proto); + writer.AppendProtoAsArrayOfBytes(request); // The migration progress takes unpredicatable time depending on the // user file size and the number. Setting the time limit to infinite.
diff --git a/chromeos/dbus/cryptohome_client.h b/chromeos/dbus/cryptohome_client.h index ce17f77..abb2fdb 100644 --- a/chromeos/dbus/cryptohome_client.h +++ b/chromeos/dbus/cryptohome_client.h
@@ -27,6 +27,7 @@ class FlushAndSignBootAttributesRequest; class GetBootAttributeRequest; class GetKeyDataRequest; +class MigrateToDircryptoRequest; class MountRequest; class RemoveFirmwareManagementParametersRequest; class RemoveKeyRequest; @@ -577,8 +578,11 @@ // status flag indicating the completion. // MigrateToDircrypto attempts to migrate the home dir to the new "dircrypto" // encryption. + // |request| contains additional parameters, such as specifying if a full + // migration or a minimal migration should be performed. virtual void MigrateToDircrypto( const cryptohome::Identification& cryptohome_id, + const cryptohome::MigrateToDircryptoRequest& request, VoidDBusMethodCallback callback) = 0; // Asynchronously calls RemoveFirmwareManagementParameters method. |callback|
diff --git a/chromeos/dbus/fake_cryptohome_client.cc b/chromeos/dbus/fake_cryptohome_client.cc index 516a39fc..fd78bb4 100644 --- a/chromeos/dbus/fake_cryptohome_client.cc +++ b/chromeos/dbus/fake_cryptohome_client.cc
@@ -671,6 +671,7 @@ void FakeCryptohomeClient::MigrateToDircrypto( const cryptohome::Identification& cryptohome_id, + const cryptohome::MigrateToDircryptoRequest& request, VoidDBusMethodCallback callback) { base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), DBUS_METHOD_CALL_SUCCESS));
diff --git a/chromeos/dbus/fake_cryptohome_client.h b/chromeos/dbus/fake_cryptohome_client.h index f53b592..0ec30a2d6 100644 --- a/chromeos/dbus/fake_cryptohome_client.h +++ b/chromeos/dbus/fake_cryptohome_client.h
@@ -202,6 +202,7 @@ const cryptohome::FlushAndSignBootAttributesRequest& request, const ProtobufMethodCallback& callback) override; void MigrateToDircrypto(const cryptohome::Identification& cryptohome_id, + const cryptohome::MigrateToDircryptoRequest& request, VoidDBusMethodCallback callback) override; void SetDircryptoMigrationProgressHandler( const DircryptoMigrationProgessHandler& handler) override; @@ -265,6 +266,10 @@ void SetTpmAttestationDeviceKeyPayload(const std::string& key_name, const std::string& payload); + DircryptoMigrationProgessHandler dircrypto_migration_progress_handler() { + return dircrypto_migration_progress_handler_; + } + private: void ReturnProtobufMethodCallback( const cryptohome::BaseReply& reply,
diff --git a/chromeos/network/managed_state.h b/chromeos/network/managed_state.h index 399b5b361..f3cf891f 100644 --- a/chromeos/network/managed_state.h +++ b/chromeos/network/managed_state.h
@@ -31,6 +31,10 @@ class NetworkState; class NetworkTypePattern; +namespace tether { +class NetworkListSorterTest; +} + // Base class for states managed by NetworkStateManger which are associated // with a Shill path (e.g. service path or device path). class CHROMEOS_EXPORT ManagedState { @@ -120,6 +124,7 @@ friend class NetworkChangeNotifierChromeosUpdateTest; friend class NetworkStateHandler; friend class ash::network_icon::NetworkIconTest; + friend class chromeos::tether::NetworkListSorterTest; ManagedType managed_type_;
diff --git a/chromeos/network/network_state.h b/chromeos/network/network_state.h index 635cc76..c7d7e38 100644 --- a/chromeos/network/network_state.h +++ b/chromeos/network/network_state.h
@@ -240,14 +240,14 @@ // Tether properties. std::string carrier_; - int battery_percentage_; + int battery_percentage_ = 0; // Whether the current device has already connected to the tether host device // providing the hotspot corresponding to this NetworkState. // Note: this means that the current device has already connected to the // tether host, but it does not necessarily mean that the current device has // connected to the Tether network corresponding to this NetworkState. - bool tether_has_connected_to_host_; + bool tether_has_connected_to_host_ = false; // TODO(pneubeck): Remove this once (Managed)NetworkConfigurationHandler // provides proxy configuration. crbug.com/241775
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index a24b9ac..389f5d9 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -35,8 +35,8 @@ "intent_helper/intent_constants.h", "intent_helper/intent_filter.cc", "intent_helper/intent_filter.h", - "intent_helper/link_handler_model_impl.cc", - "intent_helper/link_handler_model_impl.h", + "intent_helper/link_handler_model.cc", + "intent_helper/link_handler_model.h", "intent_helper/page_transition_util.cc", "intent_helper/page_transition_util.h", "metrics/arc_metrics_service.cc", @@ -220,7 +220,7 @@ "intent_helper/arc_intent_helper_bridge_unittest.cc", "intent_helper/font_size_util_unittest.cc", "intent_helper/intent_filter_unittest.cc", - "intent_helper/link_handler_model_impl_unittest.cc", + "intent_helper/link_handler_model_unittest.cc", "intent_helper/page_transition_util_unittest.cc", ]
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.cc b/components/arc/intent_helper/arc_intent_helper_bridge.cc index 65ed6e35..e8d6290 100644 --- a/components/arc/intent_helper/arc_intent_helper_bridge.cc +++ b/components/arc/intent_helper/arc_intent_helper_bridge.cc
@@ -16,7 +16,6 @@ #include "components/arc/arc_browser_context_keyed_service_factory_base.h" #include "components/arc/arc_service_manager.h" #include "components/arc/audio/arc_audio_bridge.h" -#include "components/arc/intent_helper/link_handler_model_impl.h" #include "ui/base/layout.h" #include "url/gurl.h" @@ -73,7 +72,6 @@ void ArcIntentHelperBridge::OnInstanceReady() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - ash::Shell::Get()->set_link_handler_model_factory(this); auto* instance = ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->intent_helper(), Init); DCHECK(instance); @@ -84,7 +82,6 @@ void ArcIntentHelperBridge::OnInstanceClosed() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - ash::Shell::Get()->set_link_handler_model_factory(nullptr); } void ArcIntentHelperBridge::OnIconInvalidated(const std::string& package_name) { @@ -118,10 +115,7 @@ } void ArcIntentHelperBridge::OpenVolumeControl() { - // TODO(hidehiko): Use browser_context passed to this class's ctor, after - // we migrate this into BrowserContextKeyedService. - auto* audio = ArcAudioBridge::GetForBrowserContext( - ArcServiceManager::Get()->browser_context()); + auto* audio = ArcAudioBridge::GetForBrowserContext(context_); DCHECK(audio); audio->ShowVolumeControls(); } @@ -161,15 +155,6 @@ return observer_list_.HasObserver(observer); } -std::unique_ptr<ash::LinkHandlerModel> ArcIntentHelperBridge::CreateModel( - const GURL& url) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - auto impl = base::MakeUnique<LinkHandlerModelImpl>(context_); - if (!impl->Init(url)) - return nullptr; - return std::move(impl); -} - // static bool ArcIntentHelperBridge::IsIntentHelperPackage( const std::string& package_name) {
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.h b/components/arc/intent_helper/arc_intent_helper_bridge.h index ac5dd7054..7fd1ede7 100644 --- a/components/arc/intent_helper/arc_intent_helper_bridge.h +++ b/components/arc/intent_helper/arc_intent_helper_bridge.h
@@ -9,7 +9,6 @@ #include <string> #include <vector> -#include "ash/link_handler_model_factory.h" #include "base/macros.h" #include "base/observer_list.h" #include "base/threading/thread_checker.h" @@ -22,10 +21,6 @@ class KeyedServiceBaseFactory; -namespace ash { -class LinkHandlerModel; -} // namespace ash - namespace content { class BrowserContext; } // namespace content @@ -39,8 +34,7 @@ class ArcIntentHelperBridge : public KeyedService, public InstanceHolder<mojom::IntentHelperInstance>::Observer, - public mojom::IntentHelperHost, - public ash::LinkHandlerModelFactory { + public mojom::IntentHelperHost { public: // Returns singleton instance for the given BrowserContext, // or nullptr if the browser |context| is not allowed to use ARC. @@ -91,9 +85,6 @@ // without checking the filters. bool ShouldChromeHandleUrl(const GURL& url); - // ash::LinkHandlerModelFactory - std::unique_ptr<ash::LinkHandlerModel> CreateModel(const GURL& url) override; - // Returns false if |package_name| is for the intent_helper apk. static bool IsIntentHelperPackage(const std::string& package_name);
diff --git a/components/arc/intent_helper/link_handler_model_impl.cc b/components/arc/intent_helper/link_handler_model.cc similarity index 76% rename from components/arc/intent_helper/link_handler_model_impl.cc rename to components/arc/intent_helper/link_handler_model.cc index ef86359..42002920 100644 --- a/components/arc/intent_helper/link_handler_model_impl.cc +++ b/components/arc/intent_helper/link_handler_model.cc
@@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/arc/intent_helper/link_handler_model_impl.h" +#include "components/arc/intent_helper/link_handler_model.h" #include <string> #include <utility> #include "base/bind.h" +#include "base/strings/utf_string_conversions.h" #include "components/arc/arc_bridge_service.h" #include "components/arc/arc_service_manager.h" #include "components/arc/intent_helper/arc_intent_helper_bridge.h" @@ -47,38 +48,23 @@ } // namespace -LinkHandlerModelImpl::LinkHandlerModelImpl(content::BrowserContext* context) - : context_(context), weak_ptr_factory_(this) {} - -LinkHandlerModelImpl::~LinkHandlerModelImpl() = default; - -bool LinkHandlerModelImpl::Init(const GURL& url) { - auto* arc_service_manager = ArcServiceManager::Get(); - if (!arc_service_manager) - return false; - auto* instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_service_manager->arc_bridge_service()->intent_helper(), - RequestUrlHandlerList); - if (!instance) - return false; - - // Check if ARC apps can handle the |url|. Since the information is held in - // a different (ARC) process, issue a mojo IPC request. Usually, the - // callback function, OnUrlHandlerList, is called within a few milliseconds - // even on the slowest Chromebook we support. - const GURL rewritten(RewriteUrlFromQueryIfAvailable(url)); - instance->RequestUrlHandlerList( - rewritten.spec(), base::Bind(&LinkHandlerModelImpl::OnUrlHandlerList, - weak_ptr_factory_.GetWeakPtr())); - return true; +// static +std::unique_ptr<LinkHandlerModel> LinkHandlerModel::Create( + content::BrowserContext* context, + const GURL& link_url) { + auto impl = base::WrapUnique(new LinkHandlerModel()); + if (!impl->Init(context, link_url)) + return nullptr; + return impl; } -void LinkHandlerModelImpl::AddObserver(Observer* observer) { +LinkHandlerModel::~LinkHandlerModel() = default; + +void LinkHandlerModel::AddObserver(Observer* observer) { observer_list_.AddObserver(observer); } -void LinkHandlerModelImpl::OpenLinkWithHandler(const GURL& url, - uint32_t handler_id) { +void LinkHandlerModel::OpenLinkWithHandler(uint32_t handler_id) { auto* arc_service_manager = ArcServiceManager::Get(); if (!arc_service_manager) return; @@ -88,11 +74,36 @@ return; if (handler_id >= handlers_.size()) return; - const GURL rewritten(RewriteUrlFromQueryIfAvailable(url)); - instance->HandleUrl(rewritten.spec(), handlers_[handler_id]->package_name); + instance->HandleUrl(url_.spec(), handlers_[handler_id]->package_name); } -void LinkHandlerModelImpl::OnUrlHandlerList( +LinkHandlerModel::LinkHandlerModel() = default; + +bool LinkHandlerModel::Init(content::BrowserContext* context, const GURL& url) { + auto* arc_service_manager = ArcServiceManager::Get(); + if (!arc_service_manager) + return false; + auto* instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_service_manager->arc_bridge_service()->intent_helper(), + RequestUrlHandlerList); + if (!instance) + return false; + + DCHECK(context); + context_ = context; + + // Check if ARC apps can handle the |url|. Since the information is held in + // a different (ARC) process, issue a mojo IPC request. Usually, the + // callback function, OnUrlHandlerList, is called within a few milliseconds + // even on the slowest Chromebook we support. + url_ = RewriteUrlFromQueryIfAvailable(url); + instance->RequestUrlHandlerList( + url_.spec(), base::Bind(&LinkHandlerModel::OnUrlHandlerList, + weak_ptr_factory_.GetWeakPtr())); + return true; +} + +void LinkHandlerModel::OnUrlHandlerList( std::vector<mojom::IntentHandlerInfoPtr> handlers) { handlers_ = ArcIntentHelperBridge::FilterOutIntentHelper(std::move(handlers)); @@ -107,7 +118,7 @@ } const ArcIntentHelperBridge::GetResult result = intent_helper_bridge->GetActivityIcons( - activities, base::Bind(&LinkHandlerModelImpl::NotifyObserver, + activities, base::Bind(&LinkHandlerModel::NotifyObserver, weak_ptr_factory_.GetWeakPtr())); icon_info_notified = internal::ActivityIconLoader::HasIconsReadyCallbackRun(result); @@ -121,14 +132,14 @@ } } -void LinkHandlerModelImpl::NotifyObserver( +void LinkHandlerModel::NotifyObserver( std::unique_ptr<ArcIntentHelperBridge::ActivityToIconsMap> icons) { if (icons) { icons_.insert(icons->begin(), icons->end()); icons.reset(); } - std::vector<ash::LinkHandlerInfo> handlers; + std::vector<LinkHandlerInfo> handlers; for (size_t i = 0; i < handlers_.size(); ++i) { gfx::Image icon; const ArcIntentHelperBridge::ActivityName activity( @@ -137,7 +148,7 @@ if (it != icons_.end()) icon = it->second.icon16; // Use the handler's index as an ID. - ash::LinkHandlerInfo handler = {handlers_[i]->name, icon, i}; + LinkHandlerInfo handler = {base::UTF8ToUTF16(handlers_[i]->name), icon, i}; handlers.push_back(handler); } for (auto& observer : observer_list_) @@ -145,13 +156,13 @@ } // static -GURL LinkHandlerModelImpl::RewriteUrlFromQueryIfAvailableForTesting( +GURL LinkHandlerModel::RewriteUrlFromQueryIfAvailableForTesting( const GURL& url) { return RewriteUrlFromQueryIfAvailable(url); } // static -GURL LinkHandlerModelImpl::RewriteUrlFromQueryIfAvailable(const GURL& url) { +GURL LinkHandlerModel::RewriteUrlFromQueryIfAvailable(const GURL& url) { static const char kPathToFind[] = "/url"; static const char kKeyToFind[] = "url";
diff --git a/components/arc/intent_helper/link_handler_model.h b/components/arc/intent_helper/link_handler_model.h new file mode 100644 index 0000000..556d040 --- /dev/null +++ b/components/arc/intent_helper/link_handler_model.h
@@ -0,0 +1,89 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_ARC_INTENT_HELPER_LINK_HANDLER_MODEL_H_ +#define COMPONENTS_ARC_INTENT_HELPER_LINK_HANDLER_MODEL_H_ + +#include <memory> +#include <vector> + +#include "base/memory/weak_ptr.h" +#include "base/observer_list.h" +#include "base/strings/string16.h" +#include "components/arc/common/intent_helper.mojom.h" +#include "components/arc/intent_helper/arc_intent_helper_bridge.h" +#include "url/gurl.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace arc { + +// This struct describes the UI presentation of a single link handler. +struct LinkHandlerInfo { + base::string16 name; + gfx::Image icon; + // An opaque identifier for this handler (which happens to correlate to the + // index in |handlers_|. + uint32_t id; +}; + +class LinkHandlerModel { + public: + class Observer { + public: + virtual void ModelChanged(const std::vector<LinkHandlerInfo>& handlers) = 0; + }; + + // Creates and inits a model. Will return null if Init() fails. + static std::unique_ptr<LinkHandlerModel> Create( + content::BrowserContext* context, + const GURL& link_url); + + ~LinkHandlerModel(); + + void AddObserver(Observer* observer); + + void OpenLinkWithHandler(uint32_t handler_id); + + static GURL RewriteUrlFromQueryIfAvailableForTesting(const GURL& url); + + private: + LinkHandlerModel(); + + // Starts retrieving handler information for the |url| and returns true. + // Returns false when the information cannot be retrieved. In that case, + // the caller should delete |this| object. + bool Init(content::BrowserContext* context, const GURL& url); + + void OnUrlHandlerList(std::vector<mojom::IntentHandlerInfoPtr> handlers); + void NotifyObserver( + std::unique_ptr<ArcIntentHelperBridge::ActivityToIconsMap> icons); + + // Checks if the |url| matches the following pattern: + // "http(s)://<valid_google_hostname>/url?...&url=<valid_url>&..." + // If it does, creates a new GURL object from the <valid_url> and returns it. + // Otherwise, returns the original |url| as-us. + static GURL RewriteUrlFromQueryIfAvailable(const GURL& url); + + content::BrowserContext* context_ = nullptr; + + GURL url_; + + base::ObserverList<Observer> observer_list_; + + // Url handler info passed from ARC. + std::vector<mojom::IntentHandlerInfoPtr> handlers_; + // Activity icon info passed from ARC. + ArcIntentHelperBridge::ActivityToIconsMap icons_; + + base::WeakPtrFactory<LinkHandlerModel> weak_ptr_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(LinkHandlerModel); +}; + +} // namespace arc + +#endif // COMPONENTS_ARC_INTENT_HELPER_LINK_HANDLER_MODEL_H_
diff --git a/components/arc/intent_helper/link_handler_model_impl.h b/components/arc/intent_helper/link_handler_model_impl.h deleted file mode 100644 index 2c080f75..0000000 --- a/components/arc/intent_helper/link_handler_model_impl.h +++ /dev/null
@@ -1,70 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_ARC_INTENT_HELPER_LINK_HANDLER_MODEL_IMPL_H_ -#define COMPONENTS_ARC_INTENT_HELPER_LINK_HANDLER_MODEL_IMPL_H_ - -#include <memory> -#include <vector> - -#include "ash/link_handler_model.h" -#include "base/memory/weak_ptr.h" -#include "base/observer_list.h" -#include "components/arc/common/intent_helper.mojom.h" -#include "components/arc/intent_helper/arc_intent_helper_bridge.h" -#include "url/gurl.h" - -namespace content { -class BrowserContext; -} // namespace content - -namespace arc { - -class LinkHandlerModelImpl : public ash::LinkHandlerModel { - public: - explicit LinkHandlerModelImpl(content::BrowserContext* context); - ~LinkHandlerModelImpl() override; - - // ash::LinkHandlerModel overrides: - void AddObserver(Observer* observer) override; - void OpenLinkWithHandler(const GURL& url, uint32_t handler_id) override; - - // Starts retrieving handler information for the |url| and returns true. - // Returns false when the information cannot be retrieved. In that case, - // the caller should delete |this| object. - bool Init(const GURL& url); - - static GURL RewriteUrlFromQueryIfAvailableForTesting(const GURL& url); - - private: - mojom::IntentHelperInstance* GetIntentHelper(); - void OnUrlHandlerList(std::vector<mojom::IntentHandlerInfoPtr> handlers); - void NotifyObserver( - std::unique_ptr<ArcIntentHelperBridge::ActivityToIconsMap> icons); - - // Checks if the |url| matches the following pattern: - // "http(s)://<valid_google_hostname>/url?...&url=<valid_url>&..." - // If it does, creates a new GURL object from the <valid_url> and returns it. - // Otherwise, returns the original |url| as-us. - static GURL RewriteUrlFromQueryIfAvailable(const GURL& url); - - content::BrowserContext* const context_; - - base::ObserverList<Observer> observer_list_; - - // Url handler info passed from ARC. - std::vector<mojom::IntentHandlerInfoPtr> handlers_; - // Activity icon info passed from ARC. - ArcIntentHelperBridge::ActivityToIconsMap icons_; - - // Always keep this the last member of this class to make sure it's the - // first thing to be destructed. - base::WeakPtrFactory<LinkHandlerModelImpl> weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(LinkHandlerModelImpl); -}; - -} // namespace arc - -#endif // COMPONENTS_ARC_INTENT_HELPER_LINK_HANDLER_MODEL_IMPL_H_
diff --git a/components/arc/intent_helper/link_handler_model_impl_unittest.cc b/components/arc/intent_helper/link_handler_model_unittest.cc similarity index 93% rename from components/arc/intent_helper/link_handler_model_impl_unittest.cc rename to components/arc/intent_helper/link_handler_model_unittest.cc index 314b1ec..56bb968 100644 --- a/components/arc/intent_helper/link_handler_model_impl_unittest.cc +++ b/components/arc/intent_helper/link_handler_model_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 "components/arc/intent_helper/link_handler_model_impl.h" +#include "components/arc/intent_helper/link_handler_model.h" #include <string> @@ -14,12 +14,12 @@ namespace { GURL Rewrite(const GURL& url) { - return LinkHandlerModelImpl::RewriteUrlFromQueryIfAvailableForTesting(url); + return LinkHandlerModel::RewriteUrlFromQueryIfAvailableForTesting(url); } } // namespace -TEST(LinkHandlerModelImplTest, TestRewriteUrlNoOp) { +TEST(LinkHandlerModelTest, TestRewriteUrlNoOp) { // Test an empty URL. GURL original(""); EXPECT_EQ(original, Rewrite(original)); @@ -77,7 +77,7 @@ EXPECT_EQ(original, Rewrite(original)); } -TEST(LinkHandlerModelImplTest, TestRewriteUrl) { +TEST(LinkHandlerModelTest, TestRewriteUrl) { // Test valid URLs. GURL original( "https://www.google.com/url?" @@ -109,7 +109,7 @@ EXPECT_EQ("k=v", rewritten.query()); } -TEST(LinkHandlerModelImplTest, TestRewriteUrlTooLong) { +TEST(LinkHandlerModelTest, TestRewriteUrlTooLong) { const std::string base = "https://www.google.com/url?url=" "https%3A%2F%2Fwww.chromium.org%2F"; // 33 characters
diff --git a/components/autofill/content/common/autofill_agent.mojom b/components/autofill/content/common/autofill_agent.mojom index 9dd9fa99..21cef203 100644 --- a/components/autofill/content/common/autofill_agent.mojom +++ b/components/autofill/content/common/autofill_agent.mojom
@@ -89,6 +89,10 @@ // Renderer is expected to return the found password form. If no password form // is focused, the response will contain an empty |autofill::PasswordForm|. FindFocusedPasswordForm() => (PasswordForm form); + + // Notifies PasswordAutofillAgent that the matching blacklisted form was + // found. + BlacklistedFormFound(); }; // There is one instance of this interface per render frame in the render
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index 4188e6ce..6d9e69ad 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1054,7 +1054,7 @@ frame_url); } #endif - if (!generation_popup_showing && + if (!generation_popup_showing && !blacklisted_form_found_ && ShouldShowStandaloneManuallFallback(element, frame_url) && ShowManualFallbackSuggestion(element)) { return true; @@ -1711,6 +1711,10 @@ std::move(callback).Run(*password_form); } +void PasswordAutofillAgent::BlacklistedFormFound() { + blacklisted_form_found_ = true; +} + //////////////////////////////////////////////////////////////////////////////// // PasswordAutofillAgent, private: @@ -1784,6 +1788,7 @@ field_value_and_properties_map_.clear(); sent_request_to_store_ = false; checked_safe_browsing_reputation_ = false; + blacklisted_form_found_ = false; } void PasswordAutofillAgent::ClearPreview(
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h index cb8b0d3..bc5db5db 100644 --- a/components/autofill/content/renderer/password_autofill_agent.h +++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -61,6 +61,7 @@ const FormsPredictionsMap& predictions) override; void FindFocusedPasswordForm( FindFocusedPasswordFormCallback callback) override; + void BlacklistedFormFound() override; // WebFrameClient editor related calls forwarded by AutofillAgent. // If they return true, it indicates the event was consumed and should not @@ -322,6 +323,8 @@ blink::WebFormElementObserver* form_element_observer_; + bool blacklisted_form_found_ = false; + DISALLOW_COPY_AND_ASSIGN(PasswordAutofillAgent); };
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h index 37ed503..3d5f9baf 100644 --- a/components/autofill/core/browser/autofill_metrics.h +++ b/components/autofill/core/browser/autofill_metrics.h
@@ -158,7 +158,7 @@ // page that caused the prompt to be shown. The navigation occurred while // the prompt was showing. SAVE_CARD_PROMPT_END_NAVIGATION_SHOWING, - // The prompt and icon were removed because of navigation away from the + // The prompt and icon were removed because of navigation away from the // page that caused the prompt to be shown. The navigation occurred while // the prompt was hidden. SAVE_CARD_PROMPT_END_NAVIGATION_HIDDEN, @@ -167,6 +167,30 @@ // The prompt was dismissed because the user clicked a legal message link. SAVE_CARD_PROMPT_DISMISS_CLICK_LEGAL_MESSAGE, + // The following _CVC_FIX_FLOW_ metrics are independent of the ones above. + // For instance, accepting the CVC fix flow will trigger both + // SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_ACCEPTED as well as + // SAVE_CARD_PROMPT_END_ACCEPTED. They are split apart in order to track + // acceptance/abandonment rates of the multi-stage dialog user experience. + + // SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_DENIED is an impossible state because + // the CVC fix flow uses a close button instead of a cancel button. + + // The prompt moved to a second stage that requested CVC from the user. + SAVE_CARD_PROMPT_CVC_FIX_FLOW_SHOWN, + // The user explicitly entered CVC and accepted the prompt. + SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_ACCEPTED, + // The prompt and icon were removed because of navigation away from the page + // that caused the prompt to be shown. The navigation occurred while the + // prompt was showing, at the CVC request stage. + SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_SHOWING, + // The prompt and icon were removed because of navigation away from the page + // that caused the prompt to be shown. The navigation occurred while the + // prompt was hidden, at the CVC request stage. + SAVE_CARD_PROMPT_CVC_FIX_FLOW_END_NAVIGATION_HIDDEN, + // The prompt was dismissed because the user clicked a legal message link. + SAVE_CARD_PROMPT_CVC_FIX_FLOW_DISMISS_CLICK_LEGAL_MESSAGE, + NUM_SAVE_CARD_PROMPT_METRICS, };
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc index 131f3c6bc..0ad521f0 100644 --- a/components/autofill/core/browser/autofill_profile.cc +++ b/components/autofill/core/browser/autofill_profile.cc
@@ -191,6 +191,21 @@ } } +// Constants for the validity bitfield. +static const size_t validity_bits_per_type = 2; +static const size_t number_supported_types_for_validation = 7; +// The order is important to ensure a consistent bitfield value. New values +// should be added at the end NOT at the start or middle. +static const ServerFieldType + supported_types_for_validation[number_supported_types_for_validation] = { + ADDRESS_HOME_COUNTRY, + ADDRESS_HOME_STATE, + ADDRESS_HOME_ZIP, + ADDRESS_HOME_CITY, + ADDRESS_HOME_DEPENDENT_LOCALITY, + EMAIL_ADDRESS, + PHONE_HOME_WHOLE_NUMBER}; + } // namespace AutofillProfile::AutofillProfile(const std::string& guid, @@ -715,18 +730,23 @@ } bool AutofillProfile::IsValidationSupportedForType(ServerFieldType type) { - switch (type) { - case ADDRESS_HOME_STATE: - case ADDRESS_HOME_ZIP: - case ADDRESS_HOME_COUNTRY: - case ADDRESS_HOME_CITY: - case ADDRESS_HOME_DEPENDENT_LOCALITY: - case EMAIL_ADDRESS: - case PHONE_HOME_WHOLE_NUMBER: - return true; - default: - return false; + return std::find(supported_types_for_validation, + supported_types_for_validation + + number_supported_types_for_validation, + type) != + supported_types_for_validation + number_supported_types_for_validation; +} + +int AutofillProfile::GetValidityBitfieldValue() { + int validity_value = 0; + size_t field_type_shift = 0; + for (ServerFieldType supported_type : supported_types_for_validation) { + DCHECK(GetValidityState(supported_type) != UNSUPPORTED); + validity_value |= GetValidityState(supported_type) << field_type_shift; + field_type_shift += validity_bits_per_type; } + + return validity_value; } base::string16 AutofillProfile::GetInfoImpl(
diff --git a/components/autofill/core/browser/autofill_profile.h b/components/autofill/core/browser/autofill_profile.h index c3d9225..e9f7f80 100644 --- a/components/autofill/core/browser/autofill_profile.h +++ b/components/autofill/core/browser/autofill_profile.h
@@ -32,29 +32,23 @@ enum RecordType { // A profile stored and editable locally. LOCAL_PROFILE, - // A profile synced down from the server. These are read-only locally. SERVER_PROFILE, - // An auxiliary profile, such as a Mac address book entry. AUXILIARY_PROFILE, }; enum ValidityState { // The field has not been validated. - UNVALIDATED, - + UNVALIDATED = 0, // The field is empty. - EMPTY, - + EMPTY = 1, // The field is valid. - VALID, - + VALID = 2, // The field is invalid. - INVALID, - + INVALID = 3, // The validation for the field is unsupported. - UNSUPPORTED, + UNSUPPORTED = 4, }; AutofillProfile(const std::string& guid, const std::string& origin); @@ -211,6 +205,9 @@ // Returns whether autofill does the validation of the specified |type|. bool IsValidationSupportedForType(ServerFieldType type); + // Returns the bitfield value representing the validity state of this profile. + int GetValidityBitfieldValue(); + private: typedef std::vector<const FormGroup*> FormGroupList;
diff --git a/components/autofill/core/browser/autofill_profile_unittest.cc b/components/autofill/core/browser/autofill_profile_unittest.cc index 2cbcf82..07883a8 100644 --- a/components/autofill/core/browser/autofill_profile_unittest.cc +++ b/components/autofill/core/browser/autofill_profile_unittest.cc
@@ -1129,4 +1129,177 @@ profile.GetValidityState(PHONE_HOME_CITY_AND_NUMBER)); } +TEST(AutofillProfileTest, GetValidityBitfieldValue_Country) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_COUNTRY, AutofillProfile::EMPTY); + // 0b01 + EXPECT_EQ(1, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_COUNTRY, AutofillProfile::VALID); + // 0b10 + EXPECT_EQ(2, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_COUNTRY, AutofillProfile::INVALID); + // 0b11 + EXPECT_EQ(3, profile.GetValidityBitfieldValue()); +} + +TEST(AutofillProfileTest, GetValidityBitfieldValue_State) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_STATE, AutofillProfile::EMPTY); + // 0b0100 + EXPECT_EQ(4, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_STATE, AutofillProfile::VALID); + // 0b1000 + EXPECT_EQ(8, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_STATE, AutofillProfile::INVALID); + // 0b1100 + EXPECT_EQ(12, profile.GetValidityBitfieldValue()); +} + +TEST(AutofillProfileTest, GetValidityBitfieldValue_Zip) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_ZIP, AutofillProfile::EMPTY); + // 0b010000 + EXPECT_EQ(16, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_ZIP, AutofillProfile::VALID); + // 0b100000 + EXPECT_EQ(32, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_ZIP, AutofillProfile::INVALID); + // 0b110000 + EXPECT_EQ(48, profile.GetValidityBitfieldValue()); +} + +TEST(AutofillProfileTest, GetValidityBitfieldValue_City) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_CITY, AutofillProfile::EMPTY); + // 0b01000000 + EXPECT_EQ(64, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_CITY, AutofillProfile::VALID); + // 0b10000000 + EXPECT_EQ(128, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_CITY, AutofillProfile::INVALID); + // 0b11000000 + EXPECT_EQ(192, profile.GetValidityBitfieldValue()); +} + +TEST(AutofillProfileTest, GetValidityBitfieldValue_DependentLocality) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_DEPENDENT_LOCALITY, + AutofillProfile::EMPTY); + // 0b0100000000 + EXPECT_EQ(256, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_DEPENDENT_LOCALITY, + AutofillProfile::VALID); + // 0b1000000000 + EXPECT_EQ(512, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_DEPENDENT_LOCALITY, + AutofillProfile::INVALID); + // 0b1100000000 + EXPECT_EQ(768, profile.GetValidityBitfieldValue()); +} + +TEST(AutofillProfileTest, GetValidityBitfieldValue_Email) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(EMAIL_ADDRESS, AutofillProfile::EMPTY); + // 0b010000000000 + EXPECT_EQ(1024, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(EMAIL_ADDRESS, AutofillProfile::VALID); + // 0b100000000000 + EXPECT_EQ(2048, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(EMAIL_ADDRESS, AutofillProfile::INVALID); + // 0b110000000000 + EXPECT_EQ(3072, profile.GetValidityBitfieldValue()); +} + +TEST(AutofillProfileTest, GetValidityBitfieldValue_Phone) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(PHONE_HOME_WHOLE_NUMBER, AutofillProfile::EMPTY); + // 0b01000000000000 + EXPECT_EQ(4096, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(PHONE_HOME_WHOLE_NUMBER, AutofillProfile::VALID); + // 0b10000000000000 + EXPECT_EQ(8192, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(PHONE_HOME_WHOLE_NUMBER, AutofillProfile::INVALID); + // 0b11000000000000 + EXPECT_EQ(12288, profile.GetValidityBitfieldValue()); +} + +TEST(AutofillProfileTest, GetValidityBitfieldValue_Mixed) { + AutofillProfile profile; + + // By default all validity statuses should be set to UNVALIDATED, thus the + // bitfield value should be empty. + EXPECT_EQ(0, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_COUNTRY, AutofillProfile::VALID); + profile.SetValidityState(ADDRESS_HOME_STATE, AutofillProfile::UNVALIDATED); + profile.SetValidityState(ADDRESS_HOME_ZIP, AutofillProfile::EMPTY); + profile.SetValidityState(ADDRESS_HOME_CITY, AutofillProfile::INVALID); + profile.SetValidityState(ADDRESS_HOME_DEPENDENT_LOCALITY, + AutofillProfile::UNVALIDATED); + profile.SetValidityState(EMAIL_ADDRESS, AutofillProfile::INVALID); + profile.SetValidityState(PHONE_HOME_WHOLE_NUMBER, AutofillProfile::EMPTY); + // 0b01110011010010 + EXPECT_EQ(7378, profile.GetValidityBitfieldValue()); + + profile.SetValidityState(ADDRESS_HOME_COUNTRY, AutofillProfile::EMPTY); + profile.SetValidityState(ADDRESS_HOME_STATE, AutofillProfile::INVALID); + profile.SetValidityState(ADDRESS_HOME_ZIP, AutofillProfile::VALID); + profile.SetValidityState(ADDRESS_HOME_CITY, AutofillProfile::VALID); + profile.SetValidityState(ADDRESS_HOME_DEPENDENT_LOCALITY, + AutofillProfile::INVALID); + profile.SetValidityState(EMAIL_ADDRESS, AutofillProfile::UNVALIDATED); + profile.SetValidityState(PHONE_HOME_WHOLE_NUMBER, AutofillProfile::INVALID); + // 0b11001110101101 + EXPECT_EQ(13229, profile.GetValidityBitfieldValue()); +} + } // namespace autofill
diff --git a/components/autofill/core/browser/ui/mock_save_card_bubble_controller.h b/components/autofill/core/browser/ui/mock_save_card_bubble_controller.h index 85814827..48e790d9 100644 --- a/components/autofill/core/browser/ui/mock_save_card_bubble_controller.h +++ b/components/autofill/core/browser/ui/mock_save_card_bubble_controller.h
@@ -26,7 +26,7 @@ MOCK_METHOD1(OnLegalMessageLinkClicked, void(const GURL& url)); MOCK_METHOD0(OnBubbleClosed, void()); MOCK_CONST_METHOD0(GetLegalMessageLines, const LegalMessageLines&()); - MOCK_METHOD1(SetShowUploadConfirmTitle, void(bool show_upload_confirm_title)); + MOCK_METHOD0(ContinueToRequestCvcStage, void()); MOCK_CONST_METHOD1(InputCvcIsValid, bool(const base::string16& input_text)); base::string16 GetCvcEnteredByUser() const override;
diff --git a/components/autofill/core/browser/ui/save_card_bubble_controller.h b/components/autofill/core/browser/ui/save_card_bubble_controller.h index 5b56b1fa..751a604 100644 --- a/components/autofill/core/browser/ui/save_card_bubble_controller.h +++ b/components/autofill/core/browser/ui/save_card_bubble_controller.h
@@ -58,9 +58,9 @@ // Returns empty vector if no legal message should be shown. virtual const LegalMessageLines& GetLegalMessageLines() const = 0; - // Sets whether the normal title or the "Confirm [card]" title shown be shown - // during upload save. - virtual void SetShowUploadConfirmTitle(bool show_upload_confirm_title) = 0; + // Called when the upload save version of the UI needs to request CVC in order + // to save, and has user has clicked [Next] in order to surface that UI. + virtual void ContinueToRequestCvcStage() = 0; // Utilities. virtual bool InputCvcIsValid(const base::string16& input_text) const = 0;
diff --git a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java index 5a09e0c..8976d139 100644 --- a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java +++ b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerGcmNetworkManager.java
@@ -149,12 +149,13 @@ return false; } - Task task = createTaskFromTaskInfo(taskInfo); - try { + Task task = createTaskFromTaskInfo(taskInfo); gcmNetworkManager.schedule(task); } catch (IllegalArgumentException e) { - Log.e(TAG, "GcmNetworkManager failed to schedule task."); + String gcmErrorMessage = e.getMessage() == null ? "null." : e.getMessage(); + Log.e(TAG, + "GcmNetworkManager failed to schedule task, gcm message: " + gcmErrorMessage); return false; }
diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc index 689ef75..179083b 100644 --- a/components/bookmarks/browser/bookmark_model.cc +++ b/components/bookmarks/browser/bookmark_model.cc
@@ -545,6 +545,11 @@ return !nodes_ordered_by_url_set_.empty(); } +bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() { + return bookmark_bar_node_->empty() && other_node_->empty() && + mobile_node_->empty(); +} + bool BookmarkModel::IsBookmarked(const GURL& url) { base::AutoLock url_lock(url_lock_); return IsBookmarkedNoLock(url);
diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h index 2a52eb1e..bae1e48 100644 --- a/components/bookmarks/browser/bookmark_model.h +++ b/components/bookmarks/browser/bookmark_model.h
@@ -176,6 +176,9 @@ // This method is thread safe. bool HasBookmarks(); + // Returns true is there is no user created bookmarks or folders. + bool HasNoUserCreatedBookmarksOrFolders(); + // Returns true if the specified URL is bookmarked. // // If not on the main thread you *must* invoke BlockTillLoaded first.
diff --git a/components/browser_watcher/postmortem_report_collector_unittest.cc b/components/browser_watcher/postmortem_report_collector_unittest.cc index d126033e..9192551a 100644 --- a/components/browser_watcher/postmortem_report_collector_unittest.cc +++ b/components/browser_watcher/postmortem_report_collector_unittest.cc
@@ -101,7 +101,7 @@ CrashReportDatabase::OperationStatus(const UUID& uuid)); }; -class MockPostmortemReportCollector : public PostmortemReportCollector { +class MockPostmortemReportCollector final : public PostmortemReportCollector { public: explicit MockPostmortemReportCollector(CrashReportDatabase* crash_database) : PostmortemReportCollector(kProductName,
diff --git a/components/crash/content/app/crash_export_stubs.cc b/components/crash/content/app/crash_export_stubs.cc index 2a5d890..6babd35 100644 --- a/components/crash/content/app/crash_export_stubs.cc +++ b/components/crash/content/app/crash_export_stubs.cc
@@ -8,6 +8,7 @@ #include <windows.h> +#include "build/build_config.h" #include "components/crash/content/app/crash_export_thunks.h" #include "components/crash/content/app/crashpad.h" @@ -33,3 +34,19 @@ void SetCrashKeyValueImplEx(const char* key, const char* value) {} void ClearCrashKeyValueImplEx(const char* key) {} + +HANDLE InjectDumpForHungInput(HANDLE process, void* serialized_crash_keys) { + return nullptr; +} + +HANDLE InjectDumpForHungInputNoCrashKeys(HANDLE process, int reason) { + return nullptr; +} + +#if defined(ARCH_CPU_X86_64) + +void RegisterNonABICompliantCodeRange(void* start, size_t size_in_bytes) {} + +void UnregisterNonABICompliantCodeRange(void* start) {} + +#endif // defined(ARCH_CPU_X86_64)
diff --git a/components/crash/content/app/crash_export_thunks.cc b/components/crash/content/app/crash_export_thunks.cc index 42c5f172..28c40a9 100644 --- a/components/crash/content/app/crash_export_thunks.cc +++ b/components/crash/content/app/crash_export_thunks.cc
@@ -8,10 +8,11 @@ #include <type_traits> #include "base/strings/utf_string_conversions.h" +#include "build/build_config.h" #include "components/crash/content/app/crashpad.h" #include "third_party/crashpad/crashpad/client/crashpad_client.h" -void RequestSingleCrashUploadThunk(const char* local_id) { +void RequestSingleCrashUploadImpl(const char* local_id) { crash_reporter::RequestSingleCrashUploadImpl(local_id); } @@ -71,3 +72,30 @@ void ClearCrashKeyValueImplEx(const char* key) { crash_reporter::ClearCrashKey(key); } + +HANDLE InjectDumpForHungInput(HANDLE process, void* serialized_crash_keys) { + return CreateRemoteThread( + process, nullptr, 0, + crash_reporter::internal::DumpProcessForHungInputThread, + serialized_crash_keys, 0, nullptr); +} + +HANDLE InjectDumpForHungInputNoCrashKeys(HANDLE process, int reason) { + return CreateRemoteThread( + process, nullptr, 0, + crash_reporter::internal::DumpProcessForHungInputNoCrashKeysThread, + reinterpret_cast<void*>(reason), 0, nullptr); +} + +#if defined(ARCH_CPU_X86_64) + +void RegisterNonABICompliantCodeRange(void* start, size_t size_in_bytes) { + crash_reporter::internal::RegisterNonABICompliantCodeRangeImpl(start, + size_in_bytes); +} + +void UnregisterNonABICompliantCodeRange(void* start) { + crash_reporter::internal::UnregisterNonABICompliantCodeRangeImpl(start); +} + +#endif // ARCH_CPU_X86_64
diff --git a/components/crash/content/app/crash_export_thunks.h b/components/crash/content/app/crash_export_thunks.h index 27cff6e6..5fe49fc5 100644 --- a/components/crash/content/app/crash_export_thunks.h +++ b/components/crash/content/app/crash_export_thunks.h
@@ -8,6 +8,8 @@ #include <stddef.h> #include <windows.h> +#include "build/build_config.h" + namespace crash_reporter { struct Report; } @@ -57,6 +59,25 @@ void ClearCrashKeyValueImplEx(const char* key); +// Injects a thread into a remote process to dump state when there is no crash. +// |serialized_crash_keys| is a nul terminated string in the address space of +// |process| that represents serialized crash keys sent from the browser. +// Keys and values are separated by ':', and key/value pairs are separated by +// ','. All keys should be previously registered as crash keys. +// This method is used solely to classify hung input. +HANDLE InjectDumpForHungInput(HANDLE process, void* serialized_crash_keys); + +// Injects a thread into a remote process to dump state when there is no crash. +// This method provides |reason| which will interpreted as an integer and logged +// as a crash key. +HANDLE InjectDumpForHungInputNoCrashKeys(HANDLE process, int reason); + +#if defined(ARCH_CPU_X86_64) +// V8 support functions. +void RegisterNonABICompliantCodeRange(void* start, size_t size_in_bytes); +void UnregisterNonABICompliantCodeRange(void* start); +#endif // defined(ARCH_CPU_X86_64) + } // extern "C" #endif // COMPONENTS_CRASH_CONTENT_APP_CRASH_EXPORT_THUNKS_H_
diff --git a/components/crash/content/app/crashpad.h b/components/crash/content/app/crashpad.h index ad1132b..87207d3a 100644 --- a/components/crash/content/app/crashpad.h +++ b/components/crash/content/app/crashpad.h
@@ -17,6 +17,9 @@ #if defined(OS_MACOSX) #include "base/mac/scoped_mach_port.h" #endif +#if defined(OS_WIN) +#include <windows.h> +#endif namespace crashpad { class CrashpadClient; @@ -131,6 +134,18 @@ // that it may be reused by GetCrashKeysForKasko. void GetPlatformCrashpadAnnotations( std::map<std::string, std::string>* annotations); + +// The thread functions that implement the InjectDumpForHungInput and +// InjectDumpForHungInputNoCrashKeys in the target process. +DWORD WINAPI DumpProcessForHungInputThread(void* crash_keys_str); +DWORD WINAPI DumpProcessForHungInputNoCrashKeysThread(void* reason); + +#if defined(ARCH_CPU_X86_64) +// V8 support functions. +void RegisterNonABICompliantCodeRangeImpl(void* start, size_t size_in_bytes); +void UnregisterNonABICompliantCodeRangeImpl(void* start); +#endif // defined(ARCH_CPU_X86_64) + #endif // defined(OS_WIN) // The platform-specific portion of InitializeCrashpad(). On windows, if
diff --git a/components/crash/content/app/crashpad_win.cc b/components/crash/content/app/crashpad_win.cc index 9727d1f..bb5c097 100644 --- a/components/crash/content/app/crashpad_win.cc +++ b/components/crash/content/app/crashpad_win.cc
@@ -158,8 +158,6 @@ return database_path; } -namespace { - // We need to prevent ICF from folding DumpProcessForHungInputThread(), // DumpProcessForHungInputNoCrashKeysThread() together, since that makes them // indistinguishable in crash dumps. We do this by making the function @@ -198,36 +196,6 @@ MSVC_POP_WARNING() MSVC_ENABLE_OPTIMIZE() -} // namespace - -} // namespace internal -} // namespace crash_reporter - -extern "C" { - - -// Injects a thread into a remote process to dump state when there is no crash. -// |serialized_crash_keys| is a nul terminated string that represents serialized -// crash keys sent from the browser. Keys and values are separated by ':', and -// key/value pairs are separated by ','. All keys should be previously -// registered as crash keys. This method is used solely to classify hung input. -HANDLE __cdecl InjectDumpForHungInput(HANDLE process, - void* serialized_crash_keys) { - return CreateRemoteThread( - process, nullptr, 0, - crash_reporter::internal::DumpProcessForHungInputThread, - serialized_crash_keys, 0, nullptr); -} - -// Injects a thread into a remote process to dump state when there is no crash. -// This method provides |reason| which will interpreted as an integer and logged -// as a crash key. -HANDLE __cdecl InjectDumpForHungInputNoCrashKeys(HANDLE process, int reason) { - return CreateRemoteThread( - process, nullptr, 0, - crash_reporter::internal::DumpProcessForHungInputNoCrashKeysThread, - reinterpret_cast<void*>(reason), 0, nullptr); -} #if defined(ARCH_CPU_X86_64) @@ -258,8 +226,8 @@ }; // These are GetProcAddress()d from V8 binding code. -void __cdecl RegisterNonABICompliantCodeRange(void* start, - size_t size_in_bytes) { +void __cdecl RegisterNonABICompliantCodeRangeImpl(void* start, + size_t size_in_bytes) { ExceptionHandlerRecord* record = reinterpret_cast<ExceptionHandlerRecord*>(start); @@ -302,7 +270,7 @@ &record->runtime_function, 1, reinterpret_cast<DWORD64>(start))); } -void __cdecl UnregisterNonABICompliantCodeRange(void* start) { +void UnregisterNonABICompliantCodeRangeImpl(void* start) { ExceptionHandlerRecord* record = reinterpret_cast<ExceptionHandlerRecord*>(start); @@ -310,4 +278,5 @@ } #endif // ARCH_CPU_X86_64 -} // extern "C" +} // namespace internal +} // namespace crash_reporter
diff --git a/components/crash/content/browser/child_process_crash_observer_android.cc b/components/crash/content/browser/child_process_crash_observer_android.cc index ca3fb794..b59a0dd 100644 --- a/components/crash/content/browser/child_process_crash_observer_android.cc +++ b/components/crash/content/browser/child_process_crash_observer_android.cc
@@ -6,7 +6,6 @@ #include "base/bind.h" #include "base/files/file_util.h" -#include "base/task_runner_util.h" #include "base/task_scheduler/post_task.h" #include "components/crash/content/app/breakpad_linux.h" #include "components/crash/content/browser/crash_dump_manager_android.h" @@ -15,18 +14,8 @@ ChildProcessCrashObserver::ChildProcessCrashObserver( const base::FilePath crash_dump_dir, - int descriptor_id, - const base::Closure& increase_crash_cb) - : crash_dump_dir_(crash_dump_dir), - descriptor_id_(descriptor_id), - increase_crash_cb_(base::Bind( - [](base::Closure cb, bool run_cb) { - if (run_cb) - cb.Run(); - }, - increase_crash_cb)), - background_task_runner_(base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BACKGROUND})) {} + int descriptor_id) + : crash_dump_dir_(crash_dump_dir), descriptor_id_(descriptor_id) {} ChildProcessCrashObserver::~ChildProcessCrashObserver() {} @@ -52,14 +41,12 @@ // This might be called twice for a given child process, with a // NOTIFICATION_RENDERER_PROCESS_TERMINATED and then with // NOTIFICATION_RENDERER_PROCESS_CLOSED. - - base::PostTaskAndReplyWithResult( - background_task_runner_.get(), FROM_HERE, + base::PostTaskWithTraits( + FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, base::Bind(&CrashDumpManager::ProcessMinidumpFileFromChild, base::Unretained(CrashDumpManager::GetInstance()), crash_dump_dir_, child_process_id, process_type, - termination_status, app_state), - increase_crash_cb_); + termination_status, app_state)); } } // namespace breakpad
diff --git a/components/crash/content/browser/child_process_crash_observer_android.h b/components/crash/content/browser/child_process_crash_observer_android.h index 76a4fdb2..fad32f2 100644 --- a/components/crash/content/browser/child_process_crash_observer_android.h +++ b/components/crash/content/browser/child_process_crash_observer_android.h
@@ -6,19 +6,14 @@ #define COMPONENTS_CRASH_CONTENT_BROWSER_CHILD_PROCESS_CRASH_OBSERVER_ANDROID_H_ #include "base/files/file_path.h" -#include "base/sequenced_task_runner.h" #include "components/crash/content/browser/crash_dump_observer_android.h" namespace breakpad { class ChildProcessCrashObserver : public breakpad::CrashDumpObserver::Client { public: - // |increase_crash_cb is| the callback to run after processing minidump file. - // For now this callback is used to increase render crash counter based on - // processing minidump result. ChildProcessCrashObserver(const base::FilePath crash_dump_dir, - int descriptor_id, - const base::Closure& increase_crash_cb); + int descriptor_id); ~ChildProcessCrashObserver() override; // breakpad::CrashDumpObserver::Client implementation: @@ -36,10 +31,6 @@ // descriptor mappings passed to the child process. int descriptor_id_; - base::Callback<void(bool)> increase_crash_cb_; - - scoped_refptr<base::SequencedTaskRunner> background_task_runner_; - DISALLOW_COPY_AND_ASSIGN(ChildProcessCrashObserver); };
diff --git a/components/crash/content/browser/crash_dump_manager_android.cc b/components/crash/content/browser/crash_dump_manager_android.cc index 6d204696..d7cadd74 100644 --- a/components/crash/content/browser/crash_dump_manager_android.cc +++ b/components/crash/content/browser/crash_dump_manager_android.cc
@@ -60,19 +60,18 @@ return base::ScopedFD(minidump_file.TakePlatformFile()); } -bool CrashDumpManager::ProcessMinidumpFileFromChild( +void CrashDumpManager::ProcessMinidumpFileFromChild( base::FilePath crash_dump_dir, base::ProcessHandle pid, content::ProcessType process_type, base::TerminationStatus termination_status, base::android::ApplicationState app_state) { base::ThreadRestrictions::AssertIOAllowed(); - bool increase_crash_count = false; base::FilePath minidump_path; // If the minidump for a given child process has already been // processed, then there is no more work to do. if (!GetMinidumpPath(pid, &minidump_path)) - return increase_crash_count; + return; int64_t file_size = 0; int r = base::GetFileSize(minidump_path, &file_size); @@ -109,9 +108,6 @@ } if (process_type == content::PROCESS_TYPE_RENDERER) { if (termination_status == base::TERMINATION_STATUS_OOM_PROTECTED) { - // There is a delay for OOM flag to be removed when app goes to - // background, so we can't just check for OOM_PROTECTED flag. - increase_crash_count = is_running || is_paused; UMA_HISTOGRAM_ENUMERATION("Tab.RendererDetailedExitStatus", exit_status, ExitStatus::MINIDUMP_STATUS_COUNT); @@ -132,14 +128,14 @@ r = base::DeleteFile(minidump_path, false); DCHECK(r) << "Failed to delete temporary minidump file " << minidump_path.value(); - return increase_crash_count; + return; } // We are dealing with a valid minidump. Copy it to the crash report // directory from where Java code will upload it later on. if (crash_dump_dir.empty()) { NOTREACHED() << "Failed to retrieve the crash dump directory."; - return increase_crash_count; + return; } const uint64_t rand = base::RandUint64(); const std::string filename = @@ -151,7 +147,7 @@ LOG(ERROR) << "Failed to move crash dump from " << minidump_path.value() << " to " << dest_path.value(); base::DeleteFile(minidump_path, false); - return increase_crash_count; + return; } VLOG(1) << "Crash minidump successfully generated: " << dest_path.value(); @@ -162,7 +158,6 @@ base::android::ScopedJavaLocalRef<jstring> j_dest_path = base::android::ConvertUTF8ToJavaString(env, dest_path.value()); Java_CrashDumpManager_tryToUploadMinidump(env, j_dest_path); - return increase_crash_count; } void CrashDumpManager::SetMinidumpPath(int child_process_id,
diff --git a/components/crash/content/browser/crash_dump_manager_android.h b/components/crash/content/browser/crash_dump_manager_android.h index 5c54c38..6aa58857 100644 --- a/components/crash/content/browser/crash_dump_manager_android.h +++ b/components/crash/content/browser/crash_dump_manager_android.h
@@ -31,8 +31,7 @@ public: static CrashDumpManager* GetInstance(); - // Returns the condition whether we should write the crash to stability proto. - bool ProcessMinidumpFileFromChild(base::FilePath crash_dump_dir, + void ProcessMinidumpFileFromChild(base::FilePath crash_dump_dir, base::ProcessHandle pid, content::ProcessType process_type, base::TerminationStatus termination_status,
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc index f740825..2a6445a 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
@@ -271,6 +271,17 @@ } } +// If the response is the entire resource, then the renderer won't show a +// placeholder. This should match the behavior in blink::ImageResource. +bool IsEntireResource(const net::HttpResponseHeaders* response_headers) { + if (!response_headers || response_headers->response_code() != 206) + return true; + + int64_t first, last, length; + return response_headers->GetContentRangeFor206(&first, &last, &length) && + first == 0 && last + 1 == length; +} + } // namespace DataReductionProxyNetworkDelegate::DataReductionProxyNetworkDelegate( @@ -495,12 +506,18 @@ net::HttpRequestHeaders request_headers; bool server_lofi = request->response_headers() && IsEmptyImagePreview(*(request->response_headers())); - bool client_lofi = + bool will_show_client_lofi_placeholder = data_reduction_proxy_io_data_ && data_reduction_proxy_io_data_->lofi_decider() && data_reduction_proxy_io_data_->lofi_decider()->IsClientLoFiImageRequest( - *request); - if ((server_lofi || client_lofi) && data_reduction_proxy_io_data_ && + *request) && + // If the response contains the entire resource, then the renderer won't + // show a placeholder for this image, so don't bother triggering an + // infobar. + !IsEntireResource(request->response_headers()); + + if ((server_lofi || will_show_client_lofi_placeholder) && + data_reduction_proxy_io_data_ && data_reduction_proxy_io_data_->lofi_ui_service()) { data_reduction_proxy_io_data_->lofi_ui_service()->OnLoFiReponseReceived( *request);
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc index ec27cc4..3151e620 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate_unittest.cc
@@ -7,6 +7,7 @@ #include <stddef.h> #include <stdint.h> +#include <algorithm> #include <map> #include <string> #include <utility> @@ -1613,37 +1614,123 @@ } } -TEST_F(DataReductionProxyNetworkDelegateTest, OnCompletedInternalLoFi) { +TEST_F(DataReductionProxyNetworkDelegateTest, + NonServerLoFiResponseDoesNotTriggerInfobar) { Init(USE_INSECURE_PROXY, false); - // Enable Lo-Fi. - const struct { - bool lofi_response; - bool was_server; - } tests[] = {{false, false}, {true, true}, {true, false}}; - for (const auto& test : tests) { - lofi_decider()->SetIsUsingClientLoFi(false); + ClearLoFiUIService(); + lofi_decider()->SetIsUsingClientLoFi(false); + std::string response_headers = + "HTTP/1.1 200 OK\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n" + "x-original-content-length: 200\r\n\r\n"; + + auto request = + FetchURLRequest(GURL(kTestURL), nullptr, response_headers, 140, 0); + + EXPECT_FALSE(DataReductionProxyData::GetData(*request)->lofi_received()); + VerifyDidNotifyLoFiResponse(false); +} + +TEST_F(DataReductionProxyNetworkDelegateTest, + ServerLoFiResponseDoesTriggerInfobar) { + Init(USE_INSECURE_PROXY, false); + + ClearLoFiUIService(); + lofi_decider()->SetIsUsingClientLoFi(false); + std::string response_headers = + "HTTP/1.1 200 OK\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n" + "x-original-content-length: 200\r\n" + "Chrome-Proxy-Content-Transform: empty-image\r\n\r\n"; + + auto request = + FetchURLRequest(GURL(kTestURL), nullptr, response_headers, 140, 0); + + EXPECT_TRUE(DataReductionProxyData::GetData(*request)->lofi_received()); + VerifyDidNotifyLoFiResponse(true); +} + +TEST_F(DataReductionProxyNetworkDelegateTest, + NonClientLoFiResponseDoesNotTriggerInfobar) { + Init(USE_INSECURE_PROXY, false); + + ClearLoFiUIService(); + lofi_decider()->SetIsUsingClientLoFi(false); + + FetchURLRequest(GURL(kTestURL), nullptr, + "HTTP/1.1 206 Partial Content\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n" + "Content-Range: bytes 0-139/2048\r\n\r\n", + 140, 0); + + VerifyDidNotifyLoFiResponse(false); +} + +TEST_F(DataReductionProxyNetworkDelegateTest, + ClientLoFiCompleteResponseDoesNotTriggerInfobar) { + Init(USE_INSECURE_PROXY, false); + + const char* const test_response_headers[] = { + "HTTP/1.1 200 OK\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n", + + "HTTP/1.1 204 No Content\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n", + + "HTTP/1.1 404 Not Found\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n", + + "HTTP/1.1 206 Partial Content\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n" + "Content-Range: bytes 0-139/140\r\n\r\n", + }; + + for (const char* headers : test_response_headers) { ClearLoFiUIService(); - std::string response_headers = - "HTTP/1.1 200 OK\r\n" - "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" - "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" - "Via: 1.1 Chrome-Compression-Proxy\r\n" - "x-original-content-length: 200\r\n"; + lofi_decider()->SetIsUsingClientLoFi(true); + FetchURLRequest(GURL(kTestURL), nullptr, headers, 140, 0); + VerifyDidNotifyLoFiResponse(false); + } +} - if (test.lofi_response) { - if (test.was_server) - response_headers += "Chrome-Proxy-Content-Transform: empty-image\r\n"; - else - lofi_decider()->SetIsUsingClientLoFi(true); - } +TEST_F(DataReductionProxyNetworkDelegateTest, + ClientLoFiPartialRangeDoesTriggerInfobar) { + Init(USE_INSECURE_PROXY, false); - response_headers += "\r\n"; - auto request = - FetchURLRequest(GURL(kTestURL), nullptr, response_headers, 140, 0); - EXPECT_EQ(test.was_server, - DataReductionProxyData::GetData(*request)->lofi_received()); - VerifyDidNotifyLoFiResponse(test.lofi_response); + const char* const test_response_headers[] = { + "HTTP/1.1 206 Partial Content\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n" + "Content-Range: bytes 0-139/2048\r\n\r\n", + + "HTTP/1.1 206 Partial Content\r\n" + "Date: Wed, 28 Nov 2007 09:40:09 GMT\r\n" + "Expires: Mon, 24 Nov 2014 12:45:26 GMT\r\n" + "Via: 1.1 Chrome-Compression-Proxy\r\n" + "Content-Range: bytes 5-144/145\r\n\r\n", + }; + + for (const char* headers : test_response_headers) { + ClearLoFiUIService(); + lofi_decider()->SetIsUsingClientLoFi(true); + FetchURLRequest(GURL(kTestURL), nullptr, headers, 140, 0); + VerifyDidNotifyLoFiResponse(true); } }
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc index 9c47769..8eea3c6 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
@@ -17,6 +17,7 @@ #include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.h" #include "components/data_reduction_proxy/proto/client_config.pb.h" #include "components/data_use_measurement/core/data_use_user_data.h" +#include "components/variations/net/variations_http_headers.h" #include "net/base/load_flags.h" #include "net/nqe/effective_connection_type.h" #include "net/traffic_annotation/network_traffic_annotation.h" @@ -225,6 +226,15 @@ // already be overloaded. static const int kMaxRetries = 5; current_fetcher_->SetAutomaticallyRetryOnNetworkChanges(kMaxRetries); + + // Attach variations headers. + net::HttpRequestHeaders headers; + variations::AppendVariationHeaders(pingback_url_, false /* incognito */, + false /* uma_enabled */, + false /* is_signed_in */, &headers); + if (!headers.IsEmpty()) + current_fetcher_->SetExtraRequestHeaders(headers.ToString()); + current_fetcher_->Start(); }
diff --git a/components/data_usage/core/data_use_aggregator.cc b/components/data_usage/core/data_use_aggregator.cc index 7f4edb0a..844c903 100644 --- a/components/data_usage/core/data_use_aggregator.cc +++ b/components/data_usage/core/data_use_aggregator.cc
@@ -30,11 +30,11 @@ #if defined(OS_ANDROID) mcc_mnc_ = net::android::GetTelephonySimOperator(); #endif // OS_ANDROID - net::NetworkChangeNotifier::AddConnectionTypeObserver(this); + net::NetworkChangeNotifier::AddNetworkChangeObserver(this); } DataUseAggregator::~DataUseAggregator() { - net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); + net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); } void DataUseAggregator::AddObserver(Observer* observer) { @@ -89,7 +89,7 @@ return weak_ptr_factory_.GetWeakPtr(); } -void DataUseAggregator::OnConnectionTypeChanged( +void DataUseAggregator::OnNetworkChanged( net::NetworkChangeNotifier::ConnectionType type) { DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/components/data_usage/core/data_use_aggregator.h b/components/data_usage/core/data_use_aggregator.h index 9cb12e3..7e6088f 100644 --- a/components/data_usage/core/data_use_aggregator.h +++ b/components/data_usage/core/data_use_aggregator.h
@@ -29,7 +29,7 @@ // Class that collects and aggregates network usage, reporting the usage to // observers. Should only be used on the IO thread. class DataUseAggregator - : public net::NetworkChangeNotifier::ConnectionTypeObserver { + : public net::NetworkChangeNotifier::NetworkChangeObserver { public: class Observer { public: @@ -63,9 +63,9 @@ base::WeakPtr<DataUseAggregator> GetWeakPtr(); protected: - // net::NetworkChangeNotifier::ConnectionTypeObserver implementation. + // net::NetworkChangeNotifier::NetworkChangeObserver implementation. // Protected for testing. - void OnConnectionTypeChanged( + void OnNetworkChanged( net::NetworkChangeNotifier::ConnectionType type) override; // Protected for testing.
diff --git a/components/data_usage/core/data_use_aggregator_unittest.cc b/components/data_usage/core/data_use_aggregator_unittest.cc index 7896f75..bb3bdc4 100644 --- a/components/data_usage/core/data_use_aggregator_unittest.cc +++ b/components/data_usage/core/data_use_aggregator_unittest.cc
@@ -52,7 +52,7 @@ private: friend class TestNetworkChangeNotifier; - using DataUseAggregator::OnConnectionTypeChanged; + using DataUseAggregator::OnNetworkChanged; using DataUseAggregator::SetMccMncForTests; }; @@ -69,7 +69,7 @@ void SimulateNetworkConnectionChange(ConnectionType type, const std::string& mcc_mnc) { connection_type_to_return_ = type; - data_use_aggregator_->OnConnectionTypeChanged(type); + data_use_aggregator_->OnNetworkChanged(type); data_use_aggregator_->SetMccMncForTests(mcc_mnc); }
diff --git a/components/download/internal/controller_impl.cc b/components/download/internal/controller_impl.cc index d6f625c..89973a77 100644 --- a/components/download/internal/controller_impl.cc +++ b/components/download/internal/controller_impl.cc
@@ -875,8 +875,7 @@ auto driver_entry = driver_->Find(guid); uint64_t file_size = driver_entry.has_value() ? driver_entry->bytes_downloaded : 0; - stats::LogDownloadCompletion( - type, entry->completion_time - entry->create_time, file_size); + stats::LogDownloadCompletion(type, file_size); if (type == CompletionType::SUCCEED) { DCHECK(driver_entry.has_value()); @@ -917,6 +916,8 @@ base::Time cleanup_time_for_entry = std::min(entry->last_cleanup_check_time + config_->file_keep_alive_time, entry->completion_time + config_->max_file_keep_alive_time); + cleanup_time_for_entry = + std::max(cleanup_time_for_entry, base::Time::Now()); if (cleanup_time_for_entry < earliest_cleanup_start_time) { earliest_cleanup_start_time = cleanup_time_for_entry; } @@ -927,6 +928,9 @@ base::TimeDelta start_time = earliest_cleanup_start_time - base::Time::Now(); base::TimeDelta end_time = start_time + config_->file_cleanup_window; + DCHECK_LT(std::ceil(start_time.InSecondsF()), + std::ceil(end_time.InSecondsF())) + << "GCM requires start time to be less than end time"; task_scheduler_->ScheduleTask(DownloadTaskType::CLEANUP_TASK, false, false, std::ceil(start_time.InSecondsF()),
diff --git a/components/download/internal/stats.cc b/components/download/internal/stats.cc index 9852575..e58349d 100644 --- a/components/download/internal/stats.cc +++ b/components/download/internal/stats.cc
@@ -207,7 +207,6 @@ } void LogDownloadCompletion(CompletionType type, - const base::TimeDelta& time_span, uint64_t file_size_bytes) { // Records completion type. UMA_HISTOGRAM_ENUMERATION("Download.Service.Finish.Type", type,
diff --git a/components/download/internal/stats.h b/components/download/internal/stats.h index aea45ee5..55774d63 100644 --- a/components/download/internal/stats.h +++ b/components/download/internal/stats.h
@@ -147,7 +147,6 @@ // Logs download completion event, download time, and the file size. void LogDownloadCompletion(CompletionType type, - const base::TimeDelta& time_span, uint64_t file_size_bytes); // Logs statistics about the result of a model operation. Used to track failure
diff --git a/components/exo/surface.cc b/components/exo/surface.cc index 8df5433..7b0c8bc 100644 --- a/components/exo/surface.cc +++ b/components/exo/surface.cc
@@ -37,6 +37,7 @@ #include "ui/compositor/layer.h" #include "ui/events/event.h" #include "ui/gfx/buffer_format_util.h" +#include "ui/gfx/geometry/dip_util.h" #include "ui/gfx/geometry/safe_integer_conversions.h" #include "ui/gfx/geometry/size_conversions.h" #include "ui/gfx/gpu_memory_buffer.h" @@ -418,26 +419,21 @@ void Surface::Commit() { TRACE_EVENT0("exo", "Surface::Commit"); - needs_commit_surface_hierarchy_ = true; + needs_commit_surface_ = true; if (delegate_) delegate_->OnSurfaceCommit(); } void Surface::CommitSurfaceHierarchy( const gfx::Point& origin, - FrameType frame_type, LayerTreeFrameSinkHolder* frame_sink_holder, - cc::CompositorFrame* frame, std::list<FrameCallback>* frame_callbacks, std::list<PresentationCallback>* presentation_callbacks) { - bool needs_commit = - frame_type == FRAME_TYPE_COMMIT && needs_commit_surface_hierarchy_; - bool needs_full_damage = frame_type == FRAME_TYPE_RECREATED_RESOURCES; + if (needs_commit_surface_) { + needs_commit_surface_ = false; - if (needs_commit) { - needs_commit_surface_hierarchy_ = false; - - if (pending_state_.opaque_region != state_.opaque_region || + bool needs_full_damage = + pending_state_.opaque_region != state_.opaque_region || pending_state_.buffer_scale != state_.buffer_scale || pending_state_.buffer_transform != state_.buffer_transform || pending_state_.viewport != state_.viewport || @@ -445,9 +441,7 @@ pending_state_.only_visible_on_secure_output != state_.only_visible_on_secure_output || pending_state_.blend_mode != state_.blend_mode || - pending_state_.alpha != state_.alpha) { - needs_full_damage = true; - } + pending_state_.alpha != state_.alpha; state_ = pending_state_; pending_state_.only_visible_on_secure_output = false; @@ -492,6 +486,17 @@ } sub_surfaces_changed_ = false; } + + SkIRect output_rect = + SkIRect::MakeWH(content_size_.width(), content_size_.height()); + if (needs_full_damage) { + damage_.setRect(output_rect); + } else { + // pending_damage_ is in Surface coordinates. + damage_.set(pending_damage_); + damage_.intersects(output_rect); + } + pending_damage_.setEmpty(); } // The top most sub-surface is at the front of the RenderPass's quad_list, @@ -501,15 +506,28 @@ // Synchronsouly commit all pending state of the sub-surface and its // decendents. sub_surface->CommitSurfaceHierarchy( - origin + sub_surface_entry.second.OffsetFromOrigin(), frame_type, - frame_sink_holder, frame, frame_callbacks, presentation_callbacks); + origin + sub_surface_entry.second.OffsetFromOrigin(), frame_sink_holder, + frame_callbacks, presentation_callbacks); + } +} + +void Surface::AppendSurfaceHierarchyContentsToFrame( + const gfx::Point& origin, + float device_scale_factor, + LayerTreeFrameSinkHolder* frame_sink_holder, + cc::CompositorFrame* frame) { + // The top most sub-surface is at the front of the RenderPass's quad_list, + // so we need composite sub-surface in reversed order. + for (const auto& sub_surface_entry : base::Reversed(sub_surfaces_)) { + auto* sub_surface = sub_surface_entry.first; + // Synchronsouly commit all pending state of the sub-surface and its + // decendents. + sub_surface->AppendSurfaceHierarchyContentsToFrame( + origin + sub_surface_entry.second.OffsetFromOrigin(), + device_scale_factor, frame_sink_holder, frame); } - AppendContentsToFrame(origin, frame, needs_full_damage); - - // Reset damage. - if (needs_commit) - pending_damage_.setEmpty(); + AppendContentsToFrame(origin, device_scale_factor, frame); DCHECK( !current_resource_.id || @@ -599,6 +617,8 @@ } void Surface::RecreateResources(LayerTreeFrameSinkHolder* frame_sink_holder) { + damage_.setRect( + SkIRect::MakeWH(content_size_.width(), content_size_.height())); UpdateResource(frame_sink_holder, false); for (const auto& sub_surface : sub_surfaces_) sub_surface.first->RecreateResources(frame_sink_holder); @@ -676,23 +696,19 @@ } void Surface::AppendContentsToFrame(const gfx::Point& origin, - cc::CompositorFrame* frame, - bool needs_full_damage) { + float device_scale_factor, + cc::CompositorFrame* frame) { const std::unique_ptr<cc::RenderPass>& render_pass = frame->render_pass_list.back(); gfx::Rect output_rect(origin, content_size_); gfx::Rect quad_rect(current_resource_.size); - gfx::Rect damage_rect; - if (needs_full_damage) { - damage_rect = output_rect; - } else { - // pending_damage_ is in Surface coordinates. - damage_rect = gfx::SkIRectToRect(pending_damage_.getBounds()); - damage_rect.set_origin(origin); - damage_rect.Intersect(output_rect); - } - render_pass->damage_rect.Union(damage_rect); + // Surface uses DIP, but the |render_pass->damage_rect| uses pixels, so we + // need scale it beased on the |device_scale_factor|. + gfx::Rect damage_rect = gfx::SkIRectToRect(damage_.getBounds()); + damage_rect.set_origin(origin); + render_pass->damage_rect.Union( + gfx::ConvertRectToPixel(device_scale_factor, damage_rect)); // Create a transformation matrix that maps buffer coordinates to target by // inverting the transform and scale of buffer. @@ -723,6 +739,7 @@ output_rect.height() / transformed_buffer_size.height()); } buffer_to_target_matrix.postTranslate(origin.x(), origin.y()); + buffer_to_target_matrix.postScale(device_scale_factor, device_scale_factor); viz::SharedQuadState* quad_state = render_pass->CreateAndAppendSharedQuadState();
diff --git a/components/exo/surface.h b/components/exo/surface.h index 9e4ccfc..cb08a8f 100644 --- a/components/exo/surface.h +++ b/components/exo/surface.h
@@ -141,18 +141,18 @@ // This will synchronously commit all pending state of the surface and its // descendants by recursively calling CommitSurfaceHierarchy() for each // sub-surface with pending state. - enum FrameType { - FRAME_TYPE_COMMIT, - FRAME_TYPE_RECREATED_RESOURCES, - }; void CommitSurfaceHierarchy( const gfx::Point& origin, - FrameType frame_type, LayerTreeFrameSinkHolder* frame_sink_holder, - cc::CompositorFrame* frame, std::list<FrameCallback>* frame_callbacks, std::list<PresentationCallback>* presentation_callbacks); + void AppendSurfaceHierarchyContentsToFrame( + const gfx::Point& origin, + float device_scale_factor, + LayerTreeFrameSinkHolder* frame_sink_holder, + cc::CompositorFrame* frame); + // Returns true if surface is in synchronized mode. bool IsSynchronized() const; @@ -252,13 +252,6 @@ friend class subtle::PropertyHelper; - bool needs_commit_surface_hierarchy() const { - return needs_commit_surface_hierarchy_; - } - - // Set SurfaceLayer contents to the current buffer. - void SetSurfaceLayerContents(ui::Layer* layer); - // Updates current_resource_ with a new resource id corresponding to the // contents of the attached buffer (or id 0, if no buffer is attached). // UpdateSurface must be called afterwards to ensure the release callback @@ -269,8 +262,8 @@ // Puts the current surface into a draw quad, and appends the draw quads into // the |frame|. void AppendContentsToFrame(const gfx::Point& origin, - cc::CompositorFrame* frame, - bool needs_full_damage); + float device_scale_factor, + cc::CompositorFrame* frame); void UpdateContentSize(); @@ -296,6 +289,10 @@ // The damage region to schedule paint for when Commit() is called. SkRegion pending_damage_; + // The damage region which will be used by + // AppendSurfaceHierarchyContentsToFrame() to generate frame. + SkRegion damage_; + // These lists contains the callbacks to notify the client when it is a good // time to start producing a new frame. These callbacks move to // |frame_callbacks_| when Commit() is called. Later they are moved to @@ -337,7 +334,7 @@ // This is true if a call to Commit() as been made but // CommitSurfaceHierarchy() has not yet been called. - bool needs_commit_surface_hierarchy_ = false; + bool needs_commit_surface_ = false; // This is set when the compositing starts and passed to active frame // callbacks when compositing successfully ends.
diff --git a/components/exo/surface_tree_host.cc b/components/exo/surface_tree_host.cc index 5ef68413..9d31f381 100644 --- a/components/exo/surface_tree_host.cc +++ b/components/exo/surface_tree_host.cc
@@ -19,6 +19,9 @@ #include "ui/aura/window_targeter.h" #include "ui/aura/window_tree_host.h" #include "ui/base/cursor/cursor.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/gfx/geometry/dip_util.h" #include "ui/gfx/path.h" namespace exo { @@ -192,7 +195,10 @@ // SurfaceDelegate overrides: void SurfaceTreeHost::OnSurfaceCommit() { - SubmitCompositorFrame(Surface::FRAME_TYPE_COMMIT); + root_surface_->CommitSurfaceHierarchy( + gfx::Point(), layer_tree_frame_sink_holder_.get(), &frame_callbacks_, + &presentation_callbacks_); + SubmitCompositorFrame(); } void SurfaceTreeHost::OnSurfaceContentSizeChanged() { @@ -265,10 +271,10 @@ if (!host_window_->GetSurfaceId().is_valid() || !root_surface_) return; root_surface_->RecreateResources(layer_tree_frame_sink_holder_.get()); - SubmitCompositorFrame(Surface::FRAME_TYPE_RECREATED_RESOURCES); + SubmitCompositorFrame(); } -void SurfaceTreeHost::SubmitCompositorFrame(Surface::FrameType frame_type) { +void SurfaceTreeHost::SubmitCompositorFrame() { DCHECK(root_surface_); cc::CompositorFrame frame; // If we commit while we don't have an active BeginFrame, we acknowledge a @@ -285,14 +291,19 @@ render_pass->SetNew(kRenderPassId, gfx::Rect(), gfx::Rect(), gfx::Transform()); frame.render_pass_list.push_back(std::move(render_pass)); - root_surface_->CommitSurfaceHierarchy( - gfx::Point(), frame_type, layer_tree_frame_sink_holder_.get(), &frame, - &frame_callbacks_, &presentation_callbacks_); + float device_scale_factor = host_window()->layer()->device_scale_factor(); + root_surface_->AppendSurfaceHierarchyContentsToFrame( + gfx::Point(), device_scale_factor, layer_tree_frame_sink_holder_.get(), + &frame); + // Surface uses DIP, but the |output_rect| uses pixels, so we need + // scale it beased on the |device_scale_factor|. frame.render_pass_list.back()->output_rect = - gfx::Rect(root_surface_->content_size()); + gfx::Rect(gfx::ConvertSizeToPixel(device_scale_factor, + root_surface_->content_size())); + host_window_->layer()->SetFillsBoundsOpaquely( root_surface_->FillsBoundsOpaquely()); - frame.metadata.device_scale_factor = 1.0f; + frame.metadata.device_scale_factor = device_scale_factor; layer_tree_frame_sink_holder_->frame_sink()->SubmitCompositorFrame( std::move(frame));
diff --git a/components/exo/surface_tree_host.h b/components/exo/surface_tree_host.h index 95ef9b1..7a67a60 100644 --- a/components/exo/surface_tree_host.h +++ b/components/exo/surface_tree_host.h
@@ -104,7 +104,7 @@ void OnLostResources() override; private: - void SubmitCompositorFrame(Surface::FrameType frame_type); + void SubmitCompositorFrame(); Surface* root_surface_ = nullptr; std::unique_ptr<aura::Window> host_window_;
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc index 09ab404..9ee29738 100644 --- a/components/exo/surface_unittest.cc +++ b/components/exo/surface_unittest.cc
@@ -5,6 +5,8 @@ #include "components/exo/surface.h" #include "base/bind.h" +#include "base/command_line.h" +#include "base/strings/stringprintf.h" #include "cc/output/compositor_frame.h" #include "cc/quads/texture_draw_quad.h" #include "components/exo/buffer.h" @@ -20,19 +22,53 @@ #include "third_party/khronos/GLES2/gl2.h" #include "ui/aura/env.h" #include "ui/compositor/layer_tree_owner.h" +#include "ui/display/display.h" +#include "ui/display/display_switches.h" +#include "ui/gfx/geometry/dip_util.h" #include "ui/gfx/gpu_memory_buffer.h" #include "ui/wm/core/window_util.h" namespace exo { namespace { -using SurfaceTest = test::ExoTestBase; +class SurfaceTest : public test::ExoTestBase, + public ::testing::WithParamInterface<float> { + public: + SurfaceTest() = default; + ~SurfaceTest() override = default; + void SetUp() override { + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + // Set the device scale factor. + command_line->AppendSwitchASCII( + switches::kForceDeviceScaleFactor, + base::StringPrintf("%f", device_scale_factor())); + test::ExoTestBase::SetUp(); + } + + void TearDown() override { + test::ExoTestBase::TearDown(); + display::Display::ResetForceDeviceScaleFactorForTesting(); + } + + float device_scale_factor() const { return GetParam(); } + + gfx::Rect ToPixel(const gfx::Rect rect) { + return gfx::ConvertRectToPixel(device_scale_factor(), rect); + } + + private: + DISALLOW_COPY_AND_ASSIGN(SurfaceTest); +}; void ReleaseBuffer(int* release_buffer_call_count) { (*release_buffer_call_count)++; } -TEST_F(SurfaceTest, Attach) { +// Instantiate the Boolean which is used to toggle mouse and touch events in +// the parameterized tests. +INSTANTIATE_TEST_CASE_P(, SurfaceTest, testing::Values(1.0f, 1.25f, 2.0f)); + +TEST_P(SurfaceTest, Attach) { gfx::Size buffer_size(256, 256); std::unique_ptr<Buffer> buffer( new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); @@ -64,7 +100,7 @@ ASSERT_EQ(1, release_buffer_call_count); } -TEST_F(SurfaceTest, Damage) { +TEST_P(SurfaceTest, Damage) { gfx::Size buffer_size(256, 256); std::unique_ptr<Buffer> buffer( new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); @@ -91,7 +127,7 @@ *result = frame_time; } -TEST_F(SurfaceTest, RequestFrameCallback) { +TEST_P(SurfaceTest, RequestFrameCallback) { std::unique_ptr<Surface> surface(new Surface); base::TimeTicks frame_time; @@ -114,7 +150,7 @@ return frame; } -TEST_F(SurfaceTest, SetOpaqueRegion) { +TEST_P(SurfaceTest, SetOpaqueRegion) { gfx::Size buffer_size(1, 1); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); @@ -137,7 +173,7 @@ EXPECT_FALSE(frame.render_pass_list.back() ->quad_list.back() ->ShouldDrawWithBlending()); - EXPECT_EQ(gfx::Rect(0, 0, 1, 1), + EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 1, 1)), frame.render_pass_list.back()->damage_rect); } @@ -153,7 +189,7 @@ EXPECT_TRUE(frame.render_pass_list.back() ->quad_list.back() ->ShouldDrawWithBlending()); - EXPECT_EQ(gfx::Rect(0, 0, 1, 1), + EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 1, 1)), frame.render_pass_list.back()->damage_rect); } @@ -174,12 +210,12 @@ EXPECT_FALSE(frame.render_pass_list.back() ->quad_list.back() ->ShouldDrawWithBlending()); - EXPECT_EQ(gfx::Rect(0, 0, 0, 0), + EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 0, 0)), frame.render_pass_list.back()->damage_rect); } } -TEST_F(SurfaceTest, SetInputRegion) { +TEST_P(SurfaceTest, SetInputRegion) { std::unique_ptr<Surface> surface(new Surface); // Setting a non-empty input region should succeed. @@ -189,7 +225,7 @@ surface->SetInputRegion(SkRegion(SkIRect::MakeEmpty())); } -TEST_F(SurfaceTest, SetBufferScale) { +TEST_P(SurfaceTest, SetBufferScale) { gfx::Size buffer_size(512, 512); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); @@ -213,11 +249,11 @@ const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); ASSERT_EQ(1u, frame.render_pass_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 256, 256), + EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 256, 256)), frame.render_pass_list.back()->damage_rect); } -TEST_F(SurfaceTest, SetBufferTransform) { +TEST_P(SurfaceTest, SetBufferTransform) { gfx::Size buffer_size(256, 512); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); @@ -239,12 +275,13 @@ { const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); ASSERT_EQ(1u, frame.render_pass_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, buffer_size.height(), buffer_size.width()), - frame.render_pass_list.back()->damage_rect); + EXPECT_EQ( + ToPixel(gfx::Rect(0, 0, buffer_size.height(), buffer_size.width())), + frame.render_pass_list.back()->damage_rect); const cc::QuadList& quad_list = frame.render_pass_list[0]->quad_list; ASSERT_EQ(1u, quad_list.size()); EXPECT_EQ( - gfx::Rect(0, 0, 512, 256), + ToPixel(gfx::Rect(0, 0, 512, 256)), cc::MathUtil::MapEnclosingClippedRect( quad_list.front()->shared_quad_state->quad_to_target_transform, quad_list.front()->rect)); @@ -282,16 +319,16 @@ const cc::QuadList& quad_list = frame.render_pass_list[0]->quad_list; ASSERT_EQ(2u, quad_list.size()); EXPECT_EQ( - gfx::Rect(child_position, - gfx::ScaleToRoundedSize(child_buffer_size, - 1.0f / kChildBufferScale)), + ToPixel(gfx::Rect(child_position, + gfx::ScaleToRoundedSize(child_buffer_size, + 1.0f / kChildBufferScale))), cc::MathUtil::MapEnclosingClippedRect( quad_list.front()->shared_quad_state->quad_to_target_transform, quad_list.front()->rect)); } } -TEST_F(SurfaceTest, MirrorLayers) { +TEST_P(SurfaceTest, MirrorLayers) { gfx::Size buffer_size(512, 512); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); @@ -312,7 +349,7 @@ EXPECT_TRUE(old_layer_owner->root()->has_external_content()); } -TEST_F(SurfaceTest, SetViewport) { +TEST_P(SurfaceTest, SetViewport) { gfx::Size buffer_size(1, 1); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); @@ -340,11 +377,11 @@ const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); ASSERT_EQ(1u, frame.render_pass_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 512, 512), + EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 512, 512)), frame.render_pass_list.back()->damage_rect); } -TEST_F(SurfaceTest, SetCrop) { +TEST_P(SurfaceTest, SetCrop) { gfx::Size buffer_size(16, 16); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); @@ -363,11 +400,11 @@ const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); ASSERT_EQ(1u, frame.render_pass_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 12, 12), + EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 12, 12)), frame.render_pass_list.back()->damage_rect); } -TEST_F(SurfaceTest, SetBlendMode) { +TEST_P(SurfaceTest, SetBlendMode) { gfx::Size buffer_size(1, 1); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)); @@ -387,7 +424,7 @@ ->ShouldDrawWithBlending()); } -TEST_F(SurfaceTest, OverlayCandidate) { +TEST_P(SurfaceTest, OverlayCandidate) { gfx::Size buffer_size(1, 1); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D, 0, @@ -410,7 +447,7 @@ EXPECT_FALSE(texture_quad->resource_size_in_pixels().IsEmpty()); } -TEST_F(SurfaceTest, SetAlpha) { +TEST_P(SurfaceTest, SetAlpha) { gfx::Size buffer_size(1, 1); auto buffer = base::MakeUnique<Buffer>( exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D, 0, @@ -425,17 +462,18 @@ const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); ASSERT_EQ(1u, frame.render_pass_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 1, 1), frame.render_pass_list.back()->damage_rect); + EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 1, 1)), + frame.render_pass_list.back()->damage_rect); } -TEST_F(SurfaceTest, Commit) { +TEST_P(SurfaceTest, Commit) { std::unique_ptr<Surface> surface(new Surface); // Calling commit without a buffer should succeed. surface->Commit(); } -TEST_F(SurfaceTest, SendsBeginFrameAcks) { +TEST_P(SurfaceTest, SendsBeginFrameAcks) { viz::FakeExternalBeginFrameSource source(0.f, false); gfx::Size buffer_size(1, 1); auto buffer = base::MakeUnique<Buffer>(
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn index faf3387..8dd663c 100644 --- a/components/metrics/BUILD.gn +++ b/components/metrics/BUILD.gn
@@ -109,7 +109,6 @@ "//components/prefs", "//components/variations", "//components/version_info:version_info", - "//extensions/features:features", "//third_party/zlib/google:compression_utils", ] @@ -410,7 +409,6 @@ "//components/metrics/public/cpp:call_stack_unit_tests", "//components/prefs:test_support", "//components/variations", - "//extensions/features:features", "//mojo/public/cpp/bindings", "//net:test_support", "//services/service_manager/public/cpp",
diff --git a/components/metrics/DEPS b/components/metrics/DEPS index 711120e..bd7bd415 100644 --- a/components/metrics/DEPS +++ b/components/metrics/DEPS
@@ -10,7 +10,6 @@ "+components/variations", "+components/version_info", "+content/public/test", - "+extensions/features", "+mojo/public/cpp", "+services/service_manager/public/cpp", "+third_party/zlib/google",
diff --git a/components/metrics/stability_metrics_helper.cc b/components/metrics/stability_metrics_helper.cc index cf54081..1ba27b9 100644 --- a/components/metrics/stability_metrics_helper.cc +++ b/components/metrics/stability_metrics_helper.cc
@@ -13,12 +13,10 @@ #include "base/metrics/sparse_histogram.h" #include "base/metrics/user_metrics.h" #include "build/build_config.h" -#include "build/buildflag.h" #include "components/metrics/metrics_pref_names.h" #include "components/metrics/proto/system_profile.pb.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" -#include "extensions/features/features.h" #if defined(OS_WIN) #include <windows.h> // Needed for STATUS_* codes @@ -166,14 +164,6 @@ registry->RegisterInt64Pref(prefs::kUninstallMetricsPageLoadCount, 0); } -// static -void StabilityMetricsHelper::IncreaseRendererCrashCount( - PrefService* local_state) { - // It doesn't use IncrementPrefValue() because the function is static. - int value = local_state->GetInteger(prefs::kStabilityRendererCrashCount); - local_state->SetInteger(prefs::kStabilityRendererCrashCount, value + 1); -} - void StabilityMetricsHelper::BrowserChildProcessCrashed() { IncrementPrefValue(prefs::kStabilityChildProcessCrashCount); } @@ -199,9 +189,6 @@ case base::TERMINATION_STATUS_ABNORMAL_TERMINATION: case base::TERMINATION_STATUS_OOM: if (was_extension_process) { -#if !BUILDFLAG(ENABLE_EXTENSIONS) - NOTREACHED(); -#endif IncrementPrefValue(prefs::kStabilityExtensionRendererCrashCount); UMA_HISTOGRAM_SPARSE_SLOWLY("CrashExitCodes.Extension",
diff --git a/components/metrics/stability_metrics_helper.h b/components/metrics/stability_metrics_helper.h index a67dad2..bc9aaed0 100644 --- a/components/metrics/stability_metrics_helper.h +++ b/components/metrics/stability_metrics_helper.h
@@ -48,14 +48,11 @@ // Registers local state prefs used by this class. static void RegisterPrefs(PrefRegistrySimple* registry); - // Increments the RendererCrash pref. - static void IncreaseRendererCrashCount(PrefService* local_state); - private: - // Increments an Integer pref value specified by |path|. + // Increment an Integer pref value specified by |path|. void IncrementPrefValue(const char* path); - // Increments a 64-bit Integer pref value specified by |path|. + // Increment a 64-bit Integer pref value specified by |path|. void IncrementLongPrefsValue(const char* path); PrefService* local_state_;
diff --git a/components/metrics/stability_metrics_helper_unittest.cc b/components/metrics/stability_metrics_helper_unittest.cc index edc9aaa..018906d 100644 --- a/components/metrics/stability_metrics_helper_unittest.cc +++ b/components/metrics/stability_metrics_helper_unittest.cc
@@ -6,12 +6,10 @@ #include "base/macros.h" #include "base/test/histogram_tester.h" -#include "build/build_config.h" #include "components/metrics/proto/system_profile.pb.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/prefs/testing_pref_service.h" -#include "extensions/features/features.h" #include "testing/gtest/include/gtest/gtest.h" namespace metrics { @@ -92,29 +90,7 @@ EXPECT_EQ(1, system_profile.stability().renderer_failed_launch_count()); EXPECT_EQ(0, system_profile.stability().extension_renderer_crash_count()); - histogram_tester.ExpectUniqueSample("CrashExitCodes.Renderer", 1, 3); - histogram_tester.ExpectBucketCount("BrowserRenderProcessHost.ChildCrashes", - RENDERER_TYPE_RENDERER, 3); - - // One launch failure each. - histogram_tester.ExpectBucketCount( - "BrowserRenderProcessHost.ChildLaunchFailures", RENDERER_TYPE_RENDERER, - 1); - - // TERMINATION_STATUS_PROCESS_WAS_KILLED for a renderer. - histogram_tester.ExpectBucketCount("BrowserRenderProcessHost.ChildKills", - RENDERER_TYPE_RENDERER, 1); - histogram_tester.ExpectBucketCount("BrowserRenderProcessHost.ChildKills", - RENDERER_TYPE_EXTENSION, 0); - histogram_tester.ExpectBucketCount( - "BrowserRenderProcessHost.ChildLaunchFailureCodes", 1, 1); -} - -// Note: ENABLE_EXTENSIONS is set to false in Android -#if BUILDFLAG(ENABLE_EXTENSIONS) -TEST_F(StabilityMetricsHelperTest, LogRendererCrashEnableExtensions) { - StabilityMetricsHelper helper(prefs()); - base::HistogramTester histogram_tester; + helper.ClearSavedStabilityMetrics(); // Crash and abnormal termination should increment extension crash count. helper.LogRendererCrash(true, base::TERMINATION_STATUS_PROCESS_CRASHED, 1); @@ -125,7 +101,7 @@ // Failed launch increments extension failed launch count. helper.LogRendererCrash(true, base::TERMINATION_STATUS_LAUNCH_FAILED, 1); - metrics::SystemProfileProto system_profile; + system_profile.Clear(); helper.ProvideStabilityMetrics(&system_profile); EXPECT_EQ(0, system_profile.stability().renderer_crash_count()); @@ -133,15 +109,32 @@ EXPECT_EQ( 1, system_profile.stability().extension_renderer_failed_launch_count()); - histogram_tester.ExpectBucketCount( - "BrowserRenderProcessHost.ChildLaunchFailureCodes", 1, 1); + // TERMINATION_STATUS_PROCESS_CRASHED, TERMINATION_STATUS_ABNORMAL_TERMINATION + // and TERMINATION_STATUS_OOM = 3. + histogram_tester.ExpectUniqueSample("CrashExitCodes.Renderer", 1, 3); + histogram_tester.ExpectBucketCount("BrowserRenderProcessHost.ChildCrashes", + RENDERER_TYPE_RENDERER, 3); + + // TERMINATION_STATUS_PROCESS_CRASHED and TERMINATION_STATUS_OOM = 2. histogram_tester.ExpectUniqueSample("CrashExitCodes.Extension", 1, 2); histogram_tester.ExpectBucketCount("BrowserRenderProcessHost.ChildCrashes", RENDERER_TYPE_EXTENSION, 2); + + // One launch failure each. + histogram_tester.ExpectBucketCount( + "BrowserRenderProcessHost.ChildLaunchFailures", RENDERER_TYPE_RENDERER, + 1); histogram_tester.ExpectBucketCount( "BrowserRenderProcessHost.ChildLaunchFailures", RENDERER_TYPE_EXTENSION, 1); + histogram_tester.ExpectBucketCount( + "BrowserRenderProcessHost.ChildLaunchFailureCodes", 1, 2); + + // TERMINATION_STATUS_PROCESS_WAS_KILLED for a renderer. + histogram_tester.ExpectBucketCount("BrowserRenderProcessHost.ChildKills", + RENDERER_TYPE_RENDERER, 1); + histogram_tester.ExpectBucketCount("BrowserRenderProcessHost.ChildKills", + RENDERER_TYPE_EXTENSION, 0); } -#endif } // namespace metrics
diff --git a/components/ntp_snippets/BUILD.gn b/components/ntp_snippets/BUILD.gn index d61e3053..b99c3ac0 100644 --- a/components/ntp_snippets/BUILD.gn +++ b/components/ntp_snippets/BUILD.gn
@@ -16,6 +16,8 @@ "bookmarks/bookmark_suggestions_provider.cc", "bookmarks/bookmark_suggestions_provider.h", "breaking_news/breaking_news_listener.h", + "breaking_news/breaking_news_metrics.cc", + "breaking_news/breaking_news_metrics.h", "breaking_news/subscription_json_request.cc", "breaking_news/subscription_json_request.h", "breaking_news/subscription_manager.cc",
diff --git a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc index d72c083..e3fa69d 100644 --- a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc +++ b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler.cc
@@ -12,6 +12,7 @@ #include "components/gcm_driver/gcm_profile_service.h" #include "components/gcm_driver/instance_id/instance_id.h" #include "components/gcm_driver/instance_id/instance_id_driver.h" +#include "components/ntp_snippets/breaking_news/breaking_news_metrics.h" #include "components/ntp_snippets/features.h" #include "components/ntp_snippets/pref_names.h" #include "components/ntp_snippets/time_serialization.h" @@ -168,6 +169,8 @@ void BreakingNewsGCMAppHandler::DidRetrieveToken( const std::string& subscription_token, InstanceID::Result result) { + metrics::OnTokenRetrieved(result); + switch (result) { case InstanceID::SUCCESS: // The received token is assumed to be valid, therefore, we reschedule @@ -212,25 +215,35 @@ void BreakingNewsGCMAppHandler::DidReceiveTokenForValidation( const std::string& new_token, InstanceID::Result result) { - // TODO(crbug.com/744557): Add a metric to record time from last validation. + metrics::OnTokenRetrieved(result); + + base::Optional<base::TimeDelta> time_since_last_validation; + if (pref_service_->HasPrefPath( + prefs::kBreakingNewsGCMLastTokenValidationTime)) { + const base::Time last_validation_time = + DeserializeTime(pref_service_->GetInt64( + prefs::kBreakingNewsGCMLastTokenValidationTime)); + time_since_last_validation = clock_->Now() - last_validation_time; + } // We intentionally reschedule as normal even if we don't get a token. - // TODO(crbug.com/744557): Add a metric to record number of failed token - // retrievals. Consider rescheduling next validation sooner. pref_service_->SetInt64(prefs::kBreakingNewsGCMLastTokenValidationTime, SerializeTime(clock_->Now())); ScheduleNextTokenValidation(); - if (result != InstanceID::SUCCESS) { - return; + base::Optional<bool> was_token_valid; + if (result == InstanceID::SUCCESS) { + const std::string old_token = + pref_service_->GetString(prefs::kBreakingNewsGCMSubscriptionTokenCache); + + was_token_valid = old_token == new_token; + if (!*was_token_valid) { + subscription_manager_->Resubscribe(new_token); + } } - const std::string old_token = - pref_service_->GetString(prefs::kBreakingNewsGCMSubscriptionTokenCache); - if (old_token != new_token) { - // TODO(crbug.com/744557): Add a metric to record time since last validation - // when the token was valid. - subscription_manager_->Resubscribe(new_token); - } + + metrics::OnTokenValidationAttempted(time_since_last_validation, + was_token_valid); } void BreakingNewsGCMAppHandler::ScheduleNextTokenValidation() { @@ -291,19 +304,20 @@ DCHECK_EQ(app_id, kBreakingNewsGCMAppID); gcm::MessageData::const_iterator it = message.data.find(kPushedNewsKey); - if (it == message.data.end()) { + if (it != message.data.end()) { + const std::string& news = it->second; + parse_json_callback_.Run( + news, + base::Bind(&BreakingNewsGCMAppHandler::OnJsonSuccess, + weak_ptr_factory_.GetWeakPtr()), + base::Bind(&BreakingNewsGCMAppHandler::OnJsonError, + weak_ptr_factory_.GetWeakPtr(), news)); + } else { LOG(WARNING) << "Receiving pushed content failure: Breaking News ID missing."; - return; } - std::string news = it->second; - - parse_json_callback_.Run(news, - base::Bind(&BreakingNewsGCMAppHandler::OnJsonSuccess, - weak_ptr_factory_.GetWeakPtr()), - base::Bind(&BreakingNewsGCMAppHandler::OnJsonError, - weak_ptr_factory_.GetWeakPtr(), news)); + metrics::OnMessageReceived(/*contains_pushed_news=*/it != message.data.end()); } void BreakingNewsGCMAppHandler::OnMessagesDeleted(const std::string& app_id) {
diff --git a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc index 9692bf59..afc86a6 100644 --- a/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc +++ b/components/ntp_snippets/breaking_news/breaking_news_gcm_app_handler_unittest.cc
@@ -9,6 +9,7 @@ #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/test/histogram_tester.h" #include "base/test/simple_test_clock.h" #include "base/test/test_mock_time_task_runner.h" #include "base/time/clock.h" @@ -37,6 +38,8 @@ using testing::_; using testing::AnyNumber; using testing::AtMost; +using testing::ElementsAre; +using testing::IsEmpty; using testing::NiceMock; using testing::StrictMock; @@ -232,10 +235,19 @@ base::MakeUnique<base::OneShotTimer>(tick_clock_.get()); forced_subscription_timer->SetTaskRunner(timer_mock_task_runner); + // TODO(vitaliii): Either parse JSON for real or expose another method to + // avoid it completely. return base::MakeUnique<BreakingNewsGCMAppHandler>( mock_gcm_driver_.get(), mock_instance_id_driver_.get(), pref_service(), std::move(wrapped_mock_subscription_manager), - BreakingNewsGCMAppHandler::ParseJSONCallback(), + /*parse_json_callback=*/ + base::Bind( + [](const std::string& raw_json_string, + const BreakingNewsGCMAppHandler::SuccessCallback& + success_callback, + const BreakingNewsGCMAppHandler::ErrorCallback& error_callback) { + error_callback.Run(/*error=*/"Not implemented"); + }), timer_mock_task_runner->GetMockClock(), std::move(token_validation_timer), std::move(forced_subscription_timer)); @@ -792,4 +804,165 @@ task_runner->FastForwardBy(base::TimeDelta::FromSeconds(1)); } +TEST_F(BreakingNewsGCMAppHandlerTest, ShouldReportReceivedMessageWithoutNews) { + base::HistogramTester histogram_tester; + SetFeatureParams(/*enable_token_validation=*/false, + /*enable_forced_subscription=*/false); + + // Omit receiving the token by putting it there directly. + pref_service()->SetString(prefs::kBreakingNewsGCMSubscriptionTokenCache, + "token"); + + scoped_refptr<TestMockTimeTaskRunner> task_runner( + new TestMockTimeTaskRunner(GetDummyNow(), TimeTicks::Now())); + auto handler = MakeHandler(task_runner); + handler->StartListening( + base::Bind([](std::unique_ptr<RemoteSuggestion> remote_suggestion) {})); + + handler->OnMessage("com.google.breakingnews.gcm", gcm::IncomingMessage()); + + // Bucket 0 corresponds to a message without news. + EXPECT_THAT(histogram_tester.GetAllSamples( + "NewTabPage.ContentSuggestions.BreakingNews.MessageReceived"), + ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); +} + +TEST_F(BreakingNewsGCMAppHandlerTest, ShouldReportReceivedMessageWithNews) { + base::HistogramTester histogram_tester; + SetFeatureParams(/*enable_token_validation=*/false, + /*enable_forced_subscription=*/false); + + // Omit receiving the token by putting it there directly. + pref_service()->SetString(prefs::kBreakingNewsGCMSubscriptionTokenCache, + "token"); + + scoped_refptr<TestMockTimeTaskRunner> task_runner( + new TestMockTimeTaskRunner(GetDummyNow(), TimeTicks::Now())); + auto handler = MakeHandler(task_runner); + handler->StartListening( + base::Bind([](std::unique_ptr<RemoteSuggestion> remote_suggestion) {})); + gcm::IncomingMessage message; + message.data["payload"] = "news"; + + handler->OnMessage("com.google.breakingnews.gcm", message); + + // Bucket 1 corresponds to a message with news. + EXPECT_THAT(histogram_tester.GetAllSamples( + "NewTabPage.ContentSuggestions.BreakingNews.MessageReceived"), + ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); +} + +TEST_F(BreakingNewsGCMAppHandlerTest, ShouldReportTokenRetrievalResult) { + base::HistogramTester histogram_tester; + SetFeatureParams(/*enable_token_validation=*/false, + /*enable_forced_subscription=*/false); + + scoped_refptr<TestMockTimeTaskRunner> task_runner( + new TestMockTimeTaskRunner(GetDummyNow(), TimeTicks::Now())); + auto handler = MakeHandler(task_runner); + + EXPECT_CALL(*mock_instance_id(), GetToken(_, _, _, _)) + .WillOnce(InvokeCallbackArgument<3>(/*token=*/"", + InstanceID::Result::NETWORK_ERROR)); + handler->StartListening( + base::Bind([](std::unique_ptr<RemoteSuggestion> remote_suggestion) {})); + + EXPECT_THAT( + histogram_tester.GetAllSamples( + "NewTabPage.ContentSuggestions.BreakingNews.TokenRetrievalResult"), + ElementsAre(base::Bucket( + /*min=*/static_cast<int>(InstanceID::Result::NETWORK_ERROR), + /*count=*/1))); +} + +TEST_F(BreakingNewsGCMAppHandlerTest, + ShouldReportTimeSinceLastTokenValidation) { + base::HistogramTester histogram_tester; + SetFeatureParams(/*enable_token_validation=*/true, + /*enable_forced_subscription=*/false); + + // The next validation will be soon. + const base::TimeDelta time_to_validation = base::TimeDelta::FromHours(1); + const base::Time last_validation = + GetDummyNow() - (GetTokenValidationPeriod() - time_to_validation); + pref_service()->SetInt64(prefs::kBreakingNewsGCMLastTokenValidationTime, + SerializeTime(last_validation)); + // Omit receiving the token by putting it there directly. + pref_service()->SetString(prefs::kBreakingNewsGCMSubscriptionTokenCache, + "token"); + + scoped_refptr<TestMockTimeTaskRunner> task_runner( + new TestMockTimeTaskRunner(GetDummyNow(), TimeTicks::Now())); + auto handler = MakeHandler(task_runner); + handler->StartListening( + base::Bind([](std::unique_ptr<RemoteSuggestion> remote_suggestion) {})); + + // Check that handler does not report the metric before the validation. + task_runner->FastForwardBy(time_to_validation - + base::TimeDelta::FromSeconds(1)); + EXPECT_THAT( + histogram_tester.GetAllSamples( + "NewTabPage.ContentSuggestions.BreakingNews.TokenRetrievalResult"), + IsEmpty()); + + // But when the validation happens, the time is reported. + EXPECT_CALL(*mock_instance_id(), GetToken(_, _, _, _)) + .WillOnce( + InvokeCallbackArgument<3>("token", InstanceID::Result::SUCCESS)); + task_runner->FastForwardBy(base::TimeDelta::FromSeconds(1)); + + histogram_tester.ExpectTimeBucketCount( + "NewTabPage.ContentSuggestions.BreakingNews.TimeSinceLastTokenValidation", + GetTokenValidationPeriod(), /*count=*/1); + // |ExpectTimeBucketCount| allows other buckets. Let's ensure that there are + // none. + histogram_tester.ExpectTotalCount( + "NewTabPage.ContentSuggestions.BreakingNews.TimeSinceLastTokenValidation", + /*count=*/1); +} + +TEST_F(BreakingNewsGCMAppHandlerTest, + ShouldReportWhetherTokenWasValidBeforeValidation) { + base::HistogramTester histogram_tester; + SetFeatureParams(/*enable_token_validation=*/true, + /*enable_forced_subscription=*/false); + + // The next validation will be soon. + const base::TimeDelta time_to_validation = base::TimeDelta::FromHours(1); + const base::Time last_validation = + GetDummyNow() - (GetTokenValidationPeriod() - time_to_validation); + pref_service()->SetInt64(prefs::kBreakingNewsGCMLastTokenValidationTime, + SerializeTime(last_validation)); + // Omit receiving the token by putting it there directly. + pref_service()->SetString(prefs::kBreakingNewsGCMSubscriptionTokenCache, + "token"); + + scoped_refptr<TestMockTimeTaskRunner> task_runner( + new TestMockTimeTaskRunner(GetDummyNow(), TimeTicks::Now())); + auto handler = MakeHandler(task_runner); + handler->StartListening( + base::Bind([](std::unique_ptr<RemoteSuggestion> remote_suggestion) {})); + + // Check that handler does not report the metric before the validation. + task_runner->FastForwardBy(time_to_validation - + base::TimeDelta::FromSeconds(1)); + EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.ContentSuggestions." + "BreakingNews." + "WasTokenValidBeforeValidation"), + IsEmpty()); + + // But when the validation happens, the old token validness is reported. + EXPECT_CALL(*mock_instance_id(), GetToken(_, _, _, _)) + .WillOnce( + InvokeCallbackArgument<3>("token", InstanceID::Result::SUCCESS)); + task_runner->FastForwardBy(base::TimeDelta::FromSeconds(1)); + + EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.ContentSuggestions." + "BreakingNews." + "WasTokenValidBeforeValidation"), + ElementsAre(base::Bucket( + /*min=*/1, + /*count=*/1))); +} + } // namespace ntp_snippets
diff --git a/components/ntp_snippets/breaking_news/breaking_news_metrics.cc b/components/ntp_snippets/breaking_news/breaking_news_metrics.cc new file mode 100644 index 0000000..c462dcd7 --- /dev/null +++ b/components/ntp_snippets/breaking_news/breaking_news_metrics.cc
@@ -0,0 +1,71 @@ +// 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 "components/ntp_snippets/breaking_news/breaking_news_metrics.h" + +#include "base/metrics/histogram_macros.h" + +using instance_id::InstanceID; + +namespace ntp_snippets { +namespace metrics { + +namespace { + +const char kHistogramSubscriptionRequestStatus[] = + "NewTabPage.ContentSuggestions.BreakingNews.SubscriptionRequestStatus"; +const char kHistogramUnsubscriptionRequestStatus[] = + "NewTabPage.ContentSuggestions.BreakingNews.UnsubscriptionRequestStatus"; + +const char kHistogramMessageReceived[] = + "NewTabPage.ContentSuggestions.BreakingNews.MessageReceived"; + +const char kHistogramTokenRetrievalResult[] = + "NewTabPage.ContentSuggestions.BreakingNews.TokenRetrievalResult"; + +const char kHistogramTimeSinceLastTokenValidation[] = + "NewTabPage.ContentSuggestions.BreakingNews.TimeSinceLastTokenValidation"; + +const char kHistogramWasTokenValidBeforeValidation[] = + "NewTabPage.ContentSuggestions.BreakingNews.WasTokenValidBeforeValidation"; + +} // namespace + +void OnSubscriptionRequestCompleted(const Status& status) { + UMA_HISTOGRAM_ENUMERATION(kHistogramSubscriptionRequestStatus, status.code, + StatusCode::STATUS_CODE_COUNT); +} + +void OnUnsubscriptionRequestCompleted(const Status& status) { + UMA_HISTOGRAM_ENUMERATION(kHistogramUnsubscriptionRequestStatus, status.code, + StatusCode::STATUS_CODE_COUNT); +} + +void OnMessageReceived(bool contains_pushed_news) { + UMA_HISTOGRAM_BOOLEAN(kHistogramMessageReceived, contains_pushed_news); +} + +void OnTokenRetrieved(InstanceID::Result result) { + UMA_HISTOGRAM_ENUMERATION(kHistogramTokenRetrievalResult, result, + InstanceID::Result::LAST_RESULT + 1); +} + +void OnTokenValidationAttempted( + const base::Optional<base::TimeDelta>& time_since_last_validation, + const base::Optional<bool>& was_token_valid_before_validation) { + if (time_since_last_validation.has_value()) { + UMA_HISTOGRAM_CUSTOM_TIMES(kHistogramTimeSinceLastTokenValidation, + *time_since_last_validation, + /*min=*/base::TimeDelta::FromSeconds(1), + /*max=*/base::TimeDelta::FromDays(7), + /*bucket_count=*/50); + } + if (was_token_valid_before_validation.has_value()) { + UMA_HISTOGRAM_BOOLEAN(kHistogramWasTokenValidBeforeValidation, + *was_token_valid_before_validation); + } +} + +} // namespace metrics +} // namespace ntp_snippets
diff --git a/components/ntp_snippets/breaking_news/breaking_news_metrics.h b/components/ntp_snippets/breaking_news/breaking_news_metrics.h new file mode 100644 index 0000000..b6d49ff --- /dev/null +++ b/components/ntp_snippets/breaking_news/breaking_news_metrics.h
@@ -0,0 +1,33 @@ +// 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 COMPONENTS_NTP_SNIPPETS_BREAKING_NEWS_BREAKING_NEWS_METRICS_H_ +#define COMPONENTS_NTP_SNIPPETS_BREAKING_NEWS_BREAKING_NEWS_METRICS_H_ + +#include "base/optional.h" +#include "base/time/time.h" +#include "components/gcm_driver/instance_id/instance_id.h" +#include "components/ntp_snippets/status.h" + +namespace ntp_snippets { +namespace metrics { + +void OnSubscriptionRequestCompleted(const Status& status); +void OnUnsubscriptionRequestCompleted(const Status& status); + +void OnMessageReceived(bool contains_pushed_news); + +void OnTokenRetrieved(instance_id::InstanceID::Result result); + +// |time_since_last_validation| can be absent for the first validation. +// |was_token_valid_before_validation| may be absent if it is not known (e.g. an +// error happened and a token was not received). +void OnTokenValidationAttempted( + const base::Optional<base::TimeDelta>& time_since_last_validation, + const base::Optional<bool>& was_token_valid_before_validation); + +} // namespace metrics +} // namespace ntp_snippets + +#endif // COMPONENTS_NTP_SNIPPETS_BREAKING_NEWS_BREAKING_NEWS_METRICS_H_
diff --git a/components/ntp_snippets/breaking_news/subscription_manager_impl.cc b/components/ntp_snippets/breaking_news/subscription_manager_impl.cc index e67f459e..4eb5bca0 100644 --- a/components/ntp_snippets/breaking_news/subscription_manager_impl.cc +++ b/components/ntp_snippets/breaking_news/subscription_manager_impl.cc
@@ -8,6 +8,7 @@ #include "base/memory/ptr_util.h" #include "base/metrics/field_trial_params.h" #include "base/strings/stringprintf.h" +#include "components/ntp_snippets/breaking_news/breaking_news_metrics.h" #include "components/ntp_snippets/breaking_news/subscription_json_request.h" #include "components/ntp_snippets/features.h" #include "components/ntp_snippets/ntp_snippets_constants.h" @@ -159,6 +160,8 @@ const std::string& subscription_token, bool is_authenticated, const Status& status) { + metrics::OnSubscriptionRequestCompleted(status); + // Delete the request only after we leave this method (which is called from // the request itself). std::unique_ptr<internal::SubscriptionJsonRequest> request_deleter( @@ -235,6 +238,8 @@ void SubscriptionManagerImpl::DidUnsubscribe(const std::string& new_token, const Status& status) { + metrics::OnUnsubscriptionRequestCompleted(status); + // Delete the request only after we leave this method (which is called from // the request itself). std::unique_ptr<internal::SubscriptionJsonRequest> request_deleter(
diff --git a/components/ntp_snippets/breaking_news/subscription_manager_impl_unittest.cc b/components/ntp_snippets/breaking_news/subscription_manager_impl_unittest.cc index 0277dfb..4edcafe 100644 --- a/components/ntp_snippets/breaking_news/subscription_manager_impl_unittest.cc +++ b/components/ntp_snippets/breaking_news/subscription_manager_impl_unittest.cc
@@ -5,6 +5,7 @@ #include "components/ntp_snippets/breaking_news/subscription_manager_impl.h" #include "base/message_loop/message_loop.h" +#include "base/test/histogram_tester.h" #include "build/build_config.h" #include "components/ntp_snippets/pref_names.h" #include "components/ntp_snippets/remote/test_utils.h" @@ -13,10 +14,14 @@ #include "components/signin/core/browser/fake_signin_manager.h" #include "components/signin/core/browser/test_signin_client.h" #include "google_apis/gaia/fake_oauth2_token_service_delegate.h" +#include "net/base/net_errors.h" #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_request_test_util.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +using testing::ElementsAre; + namespace ntp_snippets { const char kTestEmail[] = "test@email.com"; @@ -337,4 +342,49 @@ GetPrefService()->GetString(prefs::kBreakingNewsSubscriptionDataToken)); } +TEST_F(SubscriptionManagerImplTest, ShouldReportSubscriptionResult) { + base::HistogramTester histogram_tester; + // Create manager and subscribe. + const std::string subscription_token = "token"; + SubscriptionManagerImpl manager( + GetRequestContext(), GetPrefService(), + /*variations_service=*/nullptr, GetSigninManager(), + GetOAuth2TokenService(), + /*locale=*/"", kAPIKey, GURL(kSubscriptionUrl), GURL(kUnsubscriptionUrl)); + manager.Subscribe(subscription_token); + // TODO(vitaliii): Mock subscription request to avoid this low level errors. + RespondToSubscriptionWithError(/*is_signed_in=*/false, + /*error_code=*/net::ERR_INVALID_RESPONSE); + + EXPECT_THAT( + histogram_tester.GetAllSamples("NewTabPage.ContentSuggestions." + "BreakingNews.SubscriptionRequestStatus"), + ElementsAre(base::Bucket( + /*min=*/static_cast<int>(StatusCode::TEMPORARY_ERROR), + /*count=*/1))); +} + +TEST_F(SubscriptionManagerImplTest, ShouldReportUnsubscriptionResult) { + base::HistogramTester histogram_tester; + // Create manager and subscribe. + const std::string subscription_token = "token"; + SubscriptionManagerImpl manager( + GetRequestContext(), GetPrefService(), + /*variations_service=*/nullptr, GetSigninManager(), + GetOAuth2TokenService(), + /*locale=*/"", kAPIKey, GURL(kSubscriptionUrl), GURL(kUnsubscriptionUrl)); + manager.Subscribe(subscription_token); + RespondToSubscriptionRequestSuccessfully(/*is_signed_in=*/false); + manager.Unsubscribe(); + + RespondToUnsubscriptionWithError(/*is_signed_in=*/false, + /*error_code=*/net::ERR_INVALID_RESPONSE); + EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.ContentSuggestions." + "BreakingNews." + "UnsubscriptionRequestStatus"), + ElementsAre(base::Bucket( + /*min=*/static_cast<int>(StatusCode::TEMPORARY_ERROR), + /*count=*/1))); +} + } // namespace ntp_snippets
diff --git a/components/ntp_snippets/status.h b/components/ntp_snippets/status.h index 8371045..4b62053 100644 --- a/components/ntp_snippets/status.h +++ b/components/ntp_snippets/status.h
@@ -9,11 +9,18 @@ namespace ntp_snippets { -// This enum indicates how an operation was completed. +// This enum indicates how an operation was completed. These values are written +// to logs. New enum values can be added, but existing enums must never be +// renumbered or deleted and reused. enum class StatusCode { - SUCCESS, // The operation has been completed successfully. - TEMPORARY_ERROR, // The operation failed but retrying might solve the error. - PERMANENT_ERROR, // The operation failed and would fail again if retried. + // The operation has been completed successfully. + SUCCESS = 0, + // The operation failed but retrying might solve the error. + TEMPORARY_ERROR = 1, + // The operation failed and would fail again if retried. + PERMANENT_ERROR = 2, + + STATUS_CODE_COUNT }; // This struct provides the status code of a request and an optional message
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java index 8c3a57e..9fee0affd 100644 --- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java +++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentAggregatorBridge.java
@@ -68,9 +68,10 @@ } @Override - public void resumeDownload(ContentId id) { + public void resumeDownload(ContentId id, boolean hasUserGesture) { if (mNativeOfflineContentAggregatorBridge == 0) return; - nativeResumeDownload(mNativeOfflineContentAggregatorBridge, id.namespace, id.id); + nativeResumeDownload( + mNativeOfflineContentAggregatorBridge, id.namespace, id.id, hasUserGesture); } @Override @@ -186,8 +187,8 @@ long nativeOfflineContentAggregatorBridge, String nameSpace, String id); private native void nativePauseDownload( long nativeOfflineContentAggregatorBridge, String nameSpace, String id); - private native void nativeResumeDownload( - long nativeOfflineContentAggregatorBridge, String nameSpace, String id); + private native void nativeResumeDownload(long nativeOfflineContentAggregatorBridge, + String nameSpace, String id, boolean hasUserGesture); private native OfflineItem nativeGetItemById( long nativeOfflineContentAggregatorBridge, String nameSpace, String id); private native ArrayList<OfflineItem> nativeGetAllItems(
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java index 14613f3..f604522 100644 --- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java +++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java
@@ -45,7 +45,7 @@ void pauseDownload(ContentId id); /** See OfflineContentProvider::ResumeDownload(...). */ - void resumeDownload(ContentId id); + void resumeDownload(ContentId id, boolean hasUserGesture); /** See OfflineContentProvider::GetItemById(...). */ OfflineItem getItemById(ContentId id);
diff --git a/components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc b/components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc index 2560705..41140354 100644 --- a/components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc +++ b/components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc
@@ -122,8 +122,10 @@ JNIEnv* env, const JavaParamRef<jobject>& jobj, const JavaParamRef<jstring>& j_namespace, - const JavaParamRef<jstring>& j_id) { - provider_->ResumeDownload(CreateContentId(env, j_namespace, j_id)); + const JavaParamRef<jstring>& j_id, + jboolean j_has_user_gesture) { + provider_->ResumeDownload(CreateContentId(env, j_namespace, j_id), + j_has_user_gesture); } ScopedJavaLocalRef<jobject> OfflineContentAggregatorBridge::GetItemById(
diff --git a/components/offline_items_collection/core/android/offline_content_aggregator_bridge.h b/components/offline_items_collection/core/android/offline_content_aggregator_bridge.h index 0c4dfc1f..5444009d 100644 --- a/components/offline_items_collection/core/android/offline_content_aggregator_bridge.h +++ b/components/offline_items_collection/core/android/offline_content_aggregator_bridge.h
@@ -58,7 +58,8 @@ void ResumeDownload(JNIEnv* env, const base::android::JavaParamRef<jobject>& jobj, const base::android::JavaParamRef<jstring>& j_namespace, - const base::android::JavaParamRef<jstring>& j_id); + const base::android::JavaParamRef<jstring>& j_id, + jboolean j_has_user_gesture); base::android::ScopedJavaLocalRef<jobject> GetItemById( JNIEnv* env, const base::android::JavaParamRef<jobject>& jobj,
diff --git a/components/offline_items_collection/core/offline_content_aggregator.cc b/components/offline_items_collection/core/offline_content_aggregator.cc index 64ba2e2..d3bc292 100644 --- a/components/offline_items_collection/core/offline_content_aggregator.cc +++ b/components/offline_items_collection/core/offline_content_aggregator.cc
@@ -107,14 +107,16 @@ base::Unretained(it->second), id)); } -void OfflineContentAggregator::ResumeDownload(const ContentId& id) { +void OfflineContentAggregator::ResumeDownload(const ContentId& id, + bool has_user_gesture) { auto it = providers_.find(id.name_space); if (it == providers_.end()) return; - RunIfReady(it->second, base::Bind(&OfflineContentProvider::ResumeDownload, - base::Unretained(it->second), id)); + RunIfReady(it->second, + base::Bind(&OfflineContentProvider::ResumeDownload, + base::Unretained(it->second), id, has_user_gesture)); } const OfflineItem* OfflineContentAggregator::GetItemById(const ContentId& id) {
diff --git a/components/offline_items_collection/core/offline_content_aggregator.h b/components/offline_items_collection/core/offline_content_aggregator.h index 68df5685..b66ae04 100644 --- a/components/offline_items_collection/core/offline_content_aggregator.h +++ b/components/offline_items_collection/core/offline_content_aggregator.h
@@ -81,7 +81,7 @@ void RemoveItem(const ContentId& id) override; void CancelDownload(const ContentId& id) override; void PauseDownload(const ContentId& id) override; - void ResumeDownload(const ContentId& id) override; + void ResumeDownload(const ContentId& id, bool has_user_gesture) override; const OfflineItem* GetItemById(const ContentId& id) override; OfflineItemList GetAllItems() override; void GetVisualsForItem(const ContentId& id,
diff --git a/components/offline_items_collection/core/offline_content_aggregator_unittest.cc b/components/offline_items_collection/core/offline_content_aggregator_unittest.cc index 45d77fd..e259bb4e 100644 --- a/components/offline_items_collection/core/offline_content_aggregator_unittest.cc +++ b/components/offline_items_collection/core/offline_content_aggregator_unittest.cc
@@ -295,8 +295,8 @@ EXPECT_CALL(provider2, RemoveItem(id2)).Times(1); EXPECT_CALL(provider1, CancelDownload(id1)).Times(1); EXPECT_CALL(provider2, CancelDownload(id2)).Times(1); - EXPECT_CALL(provider1, ResumeDownload(id1)).Times(1); - EXPECT_CALL(provider2, ResumeDownload(id2)).Times(1); + EXPECT_CALL(provider1, ResumeDownload(id1, false)).Times(1); + EXPECT_CALL(provider2, ResumeDownload(id2, true)).Times(1); EXPECT_CALL(provider1, PauseDownload(id1)).Times(1); EXPECT_CALL(provider2, PauseDownload(id2)).Times(1); EXPECT_CALL(provider1, GetVisualsForItem(id1, _)).Times(1); @@ -307,8 +307,8 @@ aggregator_.RemoveItem(id2); aggregator_.CancelDownload(id1); aggregator_.CancelDownload(id2); - aggregator_.ResumeDownload(id1); - aggregator_.ResumeDownload(id2); + aggregator_.ResumeDownload(id1, false); + aggregator_.ResumeDownload(id2, true); aggregator_.PauseDownload(id1); aggregator_.PauseDownload(id2); aggregator_.GetVisualsForItem(id1, OfflineContentProvider::VisualsCallback()); @@ -331,11 +331,11 @@ { testing::InSequence sequence; EXPECT_CALL(provider1, PauseDownload(id1)).Times(1); - EXPECT_CALL(provider1, ResumeDownload(id1)).Times(1); + EXPECT_CALL(provider1, ResumeDownload(id1, true)).Times(1); EXPECT_CALL(provider1, OpenItem(id1)).Times(1); EXPECT_CALL(provider2, OpenItem(id2)).Times(0); - aggregator_.ResumeDownload(id1); + aggregator_.ResumeDownload(id1, true); aggregator_.OpenItem(id1); provider1.NotifyOnItemsAvailable(); aggregator_.OpenItem(id2);
diff --git a/components/offline_items_collection/core/offline_content_provider.h b/components/offline_items_collection/core/offline_content_provider.h index 82af995..fbaba9f9 100644 --- a/components/offline_items_collection/core/offline_content_provider.h +++ b/components/offline_items_collection/core/offline_content_provider.h
@@ -74,7 +74,8 @@ virtual void PauseDownload(const ContentId& id) = 0; // Called to resume a paused download of an OfflineItem represented by |id|. - virtual void ResumeDownload(const ContentId& id) = 0; + // TODO(shaktisahu): Remove |has_user_gesture| if we end up not needing it. + virtual void ResumeDownload(const ContentId& id, bool has_user_gesture) = 0; // Returns an OfflineItem represented by |id| or |nullptr| if none exists. // The caller should not hold ownership of the returned item beyond the scope
diff --git a/components/offline_items_collection/core/test_support/mock_offline_content_provider.h b/components/offline_items_collection/core/test_support/mock_offline_content_provider.h index c0c49a4..922cc5a 100644 --- a/components/offline_items_collection/core/test_support/mock_offline_content_provider.h +++ b/components/offline_items_collection/core/test_support/mock_offline_content_provider.h
@@ -42,7 +42,7 @@ MOCK_METHOD1(RemoveItem, void(const ContentId&)); MOCK_METHOD1(CancelDownload, void(const ContentId&)); MOCK_METHOD1(PauseDownload, void(const ContentId&)); - MOCK_METHOD1(ResumeDownload, void(const ContentId&)); + MOCK_METHOD2(ResumeDownload, void(const ContentId&, bool)); MOCK_METHOD1(GetItemById, const OfflineItem*(const ContentId&)); MOCK_METHOD2(GetVisualsForItem, void(const ContentId&, const VisualsCallback&));
diff --git a/components/offline_items_collection/core/throttled_offline_content_provider.cc b/components/offline_items_collection/core/throttled_offline_content_provider.cc index b1a0164..0c35682 100644 --- a/components/offline_items_collection/core/throttled_offline_content_provider.cc +++ b/components/offline_items_collection/core/throttled_offline_content_provider.cc
@@ -62,8 +62,9 @@ FlushUpdates(); } -void ThrottledOfflineContentProvider::ResumeDownload(const ContentId& id) { - wrapped_provider_->ResumeDownload(id); +void ThrottledOfflineContentProvider::ResumeDownload(const ContentId& id, + bool has_user_gesture) { + wrapped_provider_->ResumeDownload(id, has_user_gesture); FlushUpdates(); }
diff --git a/components/offline_items_collection/core/throttled_offline_content_provider.h b/components/offline_items_collection/core/throttled_offline_content_provider.h index 86845f92..3df43f9d 100644 --- a/components/offline_items_collection/core/throttled_offline_content_provider.h +++ b/components/offline_items_collection/core/throttled_offline_content_provider.h
@@ -40,7 +40,7 @@ void RemoveItem(const ContentId& id) override; void CancelDownload(const ContentId& id) override; void PauseDownload(const ContentId& id) override; - void ResumeDownload(const ContentId& id) override; + void ResumeDownload(const ContentId& id, bool has_user_gesture) override; // Because this class queues updates, a call to Observer::OnItemUpdated might // get triggered with the same contents as returned by these getter methods in
diff --git a/components/offline_items_collection/core/throttled_offline_content_provider_unittest.cc b/components/offline_items_collection/core/throttled_offline_content_provider_unittest.cc index 7191fb2..e70b2e5 100644 --- a/components/offline_items_collection/core/throttled_offline_content_provider_unittest.cc +++ b/components/offline_items_collection/core/throttled_offline_content_provider_unittest.cc
@@ -114,7 +114,7 @@ EXPECT_CALL(wrapped_provider_, RemoveItem(id)); EXPECT_CALL(wrapped_provider_, CancelDownload(id)); EXPECT_CALL(wrapped_provider_, PauseDownload(id)); - EXPECT_CALL(wrapped_provider_, ResumeDownload(id)); + EXPECT_CALL(wrapped_provider_, ResumeDownload(id, true)); EXPECT_CALL(wrapped_provider_, GetVisualsForItem(id, _)); EXPECT_CALL(wrapped_provider_, GetItemById(id)).WillRepeatedly(Return(&item)); EXPECT_CALL(wrapped_provider_, GetAllItems()).WillRepeatedly(Return(items)); @@ -123,7 +123,7 @@ provider_.RemoveItem(id); provider_.CancelDownload(id); provider_.PauseDownload(id); - provider_.ResumeDownload(id); + provider_.ResumeDownload(id, true); provider_.GetVisualsForItem(id, OfflineContentProvider::VisualsCallback()); EXPECT_EQ(&item, provider_.GetItemById(id)); EXPECT_EQ(items, provider_.GetAllItems()); @@ -361,7 +361,7 @@ EXPECT_CALL(wrapped_provider_, PauseDownload(_)) .WillRepeatedly( InvokeWithoutArgs(CallbackToFunctor(base::Bind(updater, item5)))); - EXPECT_CALL(wrapped_provider_, ResumeDownload(_)) + EXPECT_CALL(wrapped_provider_, ResumeDownload(_, _)) .WillRepeatedly( InvokeWithoutArgs(CallbackToFunctor(base::Bind(updater, item6)))); @@ -402,7 +402,7 @@ EXPECT_CALL(observer, OnItemUpdated(item6)).Times(1); provider_.set_last_update_time(base::TimeTicks::Now()); wrapped_provider_.NotifyOnItemUpdated(item1); - provider_.ResumeDownload(id1); + provider_.ResumeDownload(id1, false); } }
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc index 59733b6..c1f4971 100644 --- a/components/password_manager/content/browser/content_password_manager_driver.cc +++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -171,6 +171,10 @@ return is_main_frame_; } +void ContentPasswordManagerDriver::MatchingBlacklistedFormFound() { + GetPasswordAutofillAgent()->BlacklistedFormFound(); +} + PasswordGenerationManager* ContentPasswordManagerDriver::GetPasswordGenerationManager() { return &password_generation_manager_;
diff --git a/components/password_manager/content/browser/content_password_manager_driver.h b/components/password_manager/content/browser/content_password_manager_driver.h index cb9a2568..31cdbd6 100644 --- a/components/password_manager/content/browser/content_password_manager_driver.h +++ b/components/password_manager/content/browser/content_password_manager_driver.h
@@ -78,6 +78,7 @@ void AllowToRunFormClassifier() override; autofill::AutofillDriver* GetAutofillDriver() override; bool IsMainFrame() const override; + void MatchingBlacklistedFormFound() override; PasswordGenerationManager* GetPasswordGenerationManager() override; PasswordManager* GetPasswordManager() override;
diff --git a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc index c49cbf5f..6b8bb2ec 100644 --- a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc +++ b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
@@ -82,6 +82,8 @@ MOCK_METHOD2(FillPasswordForm, void(int, const autofill::PasswordFormFillData&)); + MOCK_METHOD0(BlacklistedFormFound, void()); + private: void SetLoggingState(bool active) override { called_set_logging_state_ = true; @@ -232,6 +234,16 @@ driver->FillPasswordForm(fill_data); } +TEST_F(ContentPasswordManagerDriverTest, NotInformAboutBlacklistedForm) { + std::unique_ptr<ContentPasswordManagerDriver> driver( + new ContentPasswordManagerDriver(main_rfh(), &password_manager_client_, + &autofill_client_)); + + PasswordFormFillData fill_data = GetTestPasswordFormFillData(); + EXPECT_CALL(fake_agent_, BlacklistedFormFound()).Times(0); + driver->FillPasswordForm(fill_data); +} + #if defined(SAFE_BROWSING_DB_LOCAL) TEST_F(ContentPasswordManagerDriverTest, CheckSafeBrowsingReputationCalled) { std::unique_ptr<ContentPasswordManagerDriver> driver(
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc index 5067513..00c04a4 100644 --- a/components/password_manager/core/browser/password_form_manager.cc +++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -592,6 +592,7 @@ size_t filtered_count) { blacklisted_matches_.clear(); new_blacklisted_.reset(); + blacklisted_origin_found_ = false; std::unique_ptr<BrowserSavePasswordProgressLogger> logger; if (password_manager_util::IsLoggingActive(client_)) { @@ -608,6 +609,15 @@ [this](const PasswordForm* form) { return IsMatch(*form); }); ScoreMatches(matches); + auto find_blacklisted_match_it = std::find_if( + non_federated.begin(), non_federated.end(), + [this](const PasswordForm* form) { + return form->blacklisted_by_user && + form->origin.GetOrigin() == observed_form_.origin.GetOrigin(); + }); + blacklisted_origin_found_ = + (find_blacklisted_match_it != non_federated.end()); + // Copy out blacklisted matches. blacklisted_matches_.resize(std::count_if( non_federated.begin(), non_federated.end(), @@ -653,6 +663,9 @@ if (!driver) return; + if (blacklisted_origin_found_) + driver->MatchingBlacklistedFormFound(); + driver->AllowPasswordGenerationForForm(observed_form_); if (best_matches_.empty()) {
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h index 4078a45..2530bd7 100644 --- a/components/password_manager/core/browser/password_form_manager.h +++ b/components/password_manager/core/browser/password_form_manager.h
@@ -587,6 +587,10 @@ // match found. base::Optional<base::string16> corrected_username_element_; + // Tracks if a form with same origin as |observed_form_| found in blacklisted + // forms. + bool blacklisted_origin_found_ = false; + DISALLOW_COPY_AND_ASSIGN(PasswordFormManager); };
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 0c8adc6..53648b56 100644 --- a/components/password_manager/core/browser/password_form_manager_unittest.cc +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -329,6 +329,7 @@ void(const autofill::PasswordFormFillData&)); MOCK_METHOD1(AllowPasswordGenerationForForm, void(const autofill::PasswordForm&)); + MOCK_METHOD0(MatchingBlacklistedFormFound, void()); MockAutofillManager* mock_autofill_manager() { return &mock_autofill_manager_; @@ -1475,11 +1476,10 @@ } TEST_F(PasswordFormManagerTest, - TestSendNotBlacklistedMessage_BlacklistedCredentials) { + TestSendMachedBlacklistedFoundMessage_BlacklistedCredentials) { // Signing up on a previously visited site. Credentials are found in the - // password store, but they are blacklisted. AllowPasswordGenerationForForm - // is still called. - EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); + // password store, but they are blacklisted. + EXPECT_CALL(*client()->mock_driver(), MatchingBlacklistedFormFound()); PasswordForm simulated_result = CreateSavedMatch(true); fake_form_fetcher()->SetNonFederated({&simulated_result}, 0u); } @@ -3957,5 +3957,24 @@ test.expected_event); } } +TEST_F(PasswordFormManagerTest, + TestSendNotBlacklistedMessage_BlacklistedCredentials) { + // Signing up on a previously visited site. Credentials are found in the + // password store, but they are blacklisted. AllowPasswordGenerationForForm + // is still called. + EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); + PasswordForm simulated_result = CreateSavedMatch(true); + fake_form_fetcher()->SetNonFederated({&simulated_result}, 0u); +} + +TEST_F(PasswordFormManagerTest, + TestSendMachedBlacklistedFoundMessage_Credentials) { + // Signing up on a previously visited site. Credentials are found in the + // password store, and are not blacklisted. + EXPECT_CALL(*client()->mock_driver(), MatchingBlacklistedFormFound()) + .Times(0); + PasswordForm simulated_result = CreateSavedMatch(false); + fake_form_fetcher()->SetNonFederated({&simulated_result}, 0u); +} } // namespace password_manager
diff --git a/components/password_manager/core/browser/password_generation_manager_unittest.cc b/components/password_manager/core/browser/password_generation_manager_unittest.cc index 05093fc..b7c7202 100644 --- a/components/password_manager/core/browser/password_generation_manager_unittest.cc +++ b/components/password_manager/core/browser/password_generation_manager_unittest.cc
@@ -70,6 +70,7 @@ } MOCK_METHOD0(AllowToRunFormClassifier, void()); + MOCK_METHOD0(MatchingBlacklistedFormFound, void()); private: PasswordManager password_manager_;
diff --git a/components/password_manager/core/browser/password_manager_driver.h b/components/password_manager/core/browser/password_manager_driver.h index f48ea0c..2689afa 100644 --- a/components/password_manager/core/browser/password_manager_driver.h +++ b/components/password_manager/core/browser/password_manager_driver.h
@@ -112,6 +112,9 @@ // Return true iff the driver corresponds to the main frame. virtual bool IsMainFrame() const = 0; + // Tells the driver that the matching blacklisted form was found. + virtual void MatchingBlacklistedFormFound() = 0; + private: DISALLOW_COPY_AND_ASSIGN(PasswordManagerDriver); };
diff --git a/components/password_manager/core/browser/stub_password_manager_driver.cc b/components/password_manager/core/browser/stub_password_manager_driver.cc index 4a9145f..2cb66c1 100644 --- a/components/password_manager/core/browser/stub_password_manager_driver.cc +++ b/components/password_manager/core/browser/stub_password_manager_driver.cc
@@ -64,4 +64,6 @@ return true; } +void StubPasswordManagerDriver::MatchingBlacklistedFormFound() {} + } // namespace password_manager
diff --git a/components/password_manager/core/browser/stub_password_manager_driver.h b/components/password_manager/core/browser/stub_password_manager_driver.h index 406190a..f914a78 100644 --- a/components/password_manager/core/browser/stub_password_manager_driver.h +++ b/components/password_manager/core/browser/stub_password_manager_driver.h
@@ -38,6 +38,7 @@ PasswordAutofillManager* GetPasswordAutofillManager() override; autofill::AutofillDriver* GetAutofillDriver() override; bool IsMainFrame() const override; + void MatchingBlacklistedFormFound() override; private: DISALLOW_COPY_AND_ASSIGN(StubPasswordManagerDriver);
diff --git a/components/payments/core/payment_details.cc b/components/payments/core/payment_details.cc index 04e382b7..cae5068 100644 --- a/components/payments/core/payment_details.cc +++ b/components/payments/core/payment_details.cc
@@ -4,6 +4,9 @@ #include "components/payments/core/payment_details.h" +#include <algorithm> + +#include "base/memory/ptr_util.h" #include "base/values.h" namespace payments { @@ -21,11 +24,29 @@ } // namespace PaymentDetails::PaymentDetails() {} -PaymentDetails::PaymentDetails(const PaymentDetails& other) = default; PaymentDetails::~PaymentDetails() = default; +PaymentDetails::PaymentDetails(const PaymentDetails& other) { + *this = other; +} + +PaymentDetails& PaymentDetails::operator=(const PaymentDetails& other) { + this->id = other.id; + if (other.total) + this->total = base::MakeUnique<PaymentItem>(*other.total); + else + this->total.reset(nullptr); + this->display_items = std::vector<PaymentItem>(other.display_items); + this->shipping_options = + std::vector<PaymentShippingOption>(other.shipping_options); + this->modifiers = std::vector<PaymentDetailsModifier>(other.modifiers); + return *this; +} + bool PaymentDetails::operator==(const PaymentDetails& other) const { - return this->id == other.id && this->total == other.total && + return this->id == other.id && + ((!this->total && !other.total) || + (this->total && other.total && *this->total == *other.total)) && this->display_items == other.display_items && this->shipping_options == other.shipping_options && this->modifiers == other.modifiers && this->error == other.error; @@ -49,8 +70,10 @@ requires_total) { return false; } - if (total_dict && !this->total.FromDictionaryValue(*total_dict)) { - return false; + if (total_dict) { + this->total = base::MakeUnique<PaymentItem>(); + if (!this->total->FromDictionaryValue(*total_dict)) + return false; } const base::ListValue* display_items_list = nullptr;
diff --git a/components/payments/core/payment_details.h b/components/payments/core/payment_details.h index 3a4b4da2..788c6c55 100644 --- a/components/payments/core/payment_details.h +++ b/components/payments/core/payment_details.h
@@ -5,6 +5,7 @@ #ifndef COMPONENTS_PAYMENTS_CORE_PAYMENT_DETAILS_H_ #define COMPONENTS_PAYMENTS_CORE_PAYMENT_DETAILS_H_ +#include <memory> #include <string> #include <vector> @@ -29,6 +30,7 @@ PaymentDetails(const PaymentDetails& other); ~PaymentDetails(); + PaymentDetails& operator=(const PaymentDetails& other); bool operator==(const PaymentDetails& other) const; bool operator!=(const PaymentDetails& other) const; @@ -42,7 +44,7 @@ std::string id; // The total amount of the payment request. - PaymentItem total; + std::unique_ptr<PaymentItem> total; // Line items for the payment request that the user agent may display. For // example, it might include details of products or breakdown of tax and
diff --git a/components/payments/core/payment_details_modifier.cc b/components/payments/core/payment_details_modifier.cc index 8ed516c..cae48306 100644 --- a/components/payments/core/payment_details_modifier.cc +++ b/components/payments/core/payment_details_modifier.cc
@@ -16,18 +16,34 @@ static const char kPaymentDetailsModifierTotal[] = "total"; static const char kPaymentDetailsModifierSupportedMethods[] = "supportedMethods"; +static const char kPaymentDetailsModifierData[] = "data"; } // namespace PaymentDetailsModifier::PaymentDetailsModifier() {} -PaymentDetailsModifier::PaymentDetailsModifier( - const PaymentDetailsModifier& other) = default; PaymentDetailsModifier::~PaymentDetailsModifier() = default; +PaymentDetailsModifier::PaymentDetailsModifier( + const PaymentDetailsModifier& other) { + *this = other; +} + +PaymentDetailsModifier& PaymentDetailsModifier::operator=( + const PaymentDetailsModifier& other) { + this->method_data = other.method_data; + if (other.total) + this->total = base::MakeUnique<PaymentItem>(*other.total); + else + this->total.reset(nullptr); + this->additional_display_items = other.additional_display_items; + return *this; +} + bool PaymentDetailsModifier::operator==( const PaymentDetailsModifier& other) const { - return this->supported_methods == other.supported_methods && - this->total == other.total && + return this->method_data == other.method_data && + ((!this->total && !other.total) || + (this->total && other.total && *this->total == *other.total)) && this->additional_display_items == other.additional_display_items; } @@ -43,13 +59,16 @@ std::unique_ptr<base::ListValue> methods = base::MakeUnique<base::ListValue>(); - size_t numMethods = this->supported_methods.size(); + size_t numMethods = this->method_data.supported_methods.size(); for (size_t i = 0; i < numMethods; i++) { - methods->GetList().emplace_back(this->supported_methods[i]); + methods->GetList().emplace_back(this->method_data.supported_methods[i]); } result->SetList(kPaymentDetailsModifierSupportedMethods, std::move(methods)); - result->SetDictionary(kPaymentDetailsModifierTotal, - this->total.ToDictionaryValue()); + result->SetString(kPaymentDetailsModifierData, this->method_data.data); + if (this->total) { + result->SetDictionary(kPaymentDetailsModifierTotal, + this->total->ToDictionaryValue()); + } return result; }
diff --git a/components/payments/core/payment_details_modifier.h b/components/payments/core/payment_details_modifier.h index 261f001..d749236e 100644 --- a/components/payments/core/payment_details_modifier.h +++ b/components/payments/core/payment_details_modifier.h
@@ -10,6 +10,7 @@ #include <vector> #include "components/payments/core/payment_item.h" +#include "components/payments/core/payment_method_data.h" // C++ bindings for the PaymentRequest API PaymentDetailsModifier. Conforms to // the following spec: @@ -29,6 +30,7 @@ PaymentDetailsModifier(const PaymentDetailsModifier& other); ~PaymentDetailsModifier(); + PaymentDetailsModifier& operator=(const PaymentDetailsModifier& other); bool operator==(const PaymentDetailsModifier& other) const; bool operator!=(const PaymentDetailsModifier& other) const; @@ -36,14 +38,14 @@ // PaymentDetailsModifier. std::unique_ptr<base::DictionaryValue> ToDictionaryValue() const; - // A sequence of payment method identifiers. The remaining fields in the - // PaymentDetailsModifier apply only if the user selects a payment method - // included in this sequence. - std::vector<std::string> supported_methods; + // A payment method identifier and any associated payment method specific + // data. The remaining fields in the PaymentDetailsModifier apply only if the + // user selects this payment method. + PaymentMethodData method_data; // This value overrides the total field in the PaymentDetails dictionary for // the payment method identifiers in the supportedMethods field. - payments::PaymentItem total; + std::unique_ptr<PaymentItem> total; // Provides additional display items that are appended to the displayItems // field in the PaymentDetails dictionary for the payment method identifiers @@ -51,7 +53,7 @@ // discount or surcharge line item indicating the reason for the different // total amount for the selected payment method that the user agent may // display. - std::vector<payments::PaymentItem> additional_display_items; + std::vector<PaymentItem> additional_display_items; }; } // namespace payments
diff --git a/components/payments/core/payment_details_modifier_unittest.cc b/components/payments/core/payment_details_modifier_unittest.cc index f10447d..310f415 100644 --- a/components/payments/core/payment_details_modifier_unittest.cc +++ b/components/payments/core/payment_details_modifier_unittest.cc
@@ -5,8 +5,8 @@ #include "components/payments/core/payment_details_modifier.h" #include "base/memory/ptr_util.h" -#include "base/strings/utf_string_conversions.h" #include "base/values.h" +#include "components/payments/core/payment_method_data.h" #include "testing/gtest/include/gtest/gtest.h" namespace payments { @@ -19,21 +19,11 @@ std::unique_ptr<base::ListValue> supported_methods_list = base::MakeUnique<base::ListValue>(); expected_value.SetList("supportedMethods", std::move(supported_methods_list)); - std::unique_ptr<base::DictionaryValue> item_dict = - base::MakeUnique<base::DictionaryValue>(); - item_dict->SetString("label", ""); - std::unique_ptr<base::DictionaryValue> amount_dict = - base::MakeUnique<base::DictionaryValue>(); - amount_dict->SetString("currency", ""); - amount_dict->SetString("value", ""); - amount_dict->SetString("currencySystem", "urn:iso:std:iso:4217"); - item_dict->SetDictionary("amount", std::move(amount_dict)); - item_dict->SetBoolean("pending", false); - expected_value.SetDictionary("total", std::move(item_dict)); + expected_value.SetString("data", ""); - PaymentDetailsModifier payment_detials_modififer; + PaymentDetailsModifier payment_details_modifier; EXPECT_TRUE(expected_value.Equals( - payment_detials_modififer.ToDictionaryValue().get())); + payment_details_modifier.ToDictionaryValue().get())); } // Tests that serializing a populated PaymentDetailsModifier yields the expected @@ -43,9 +33,11 @@ std::unique_ptr<base::ListValue> supported_methods_list = base::MakeUnique<base::ListValue>(); - supported_methods_list->GetList().emplace_back("visa"); + supported_methods_list->GetList().emplace_back("basic-card"); supported_methods_list->GetList().emplace_back("amex"); expected_value.SetList("supportedMethods", std::move(supported_methods_list)); + expected_value.SetString("data", + "{\"supportedNetworks\":[\"visa\",\"mastercard\"]}"); std::unique_ptr<base::DictionaryValue> item_dict = base::MakeUnique<base::DictionaryValue>(); item_dict->SetString("label", "Gratuity"); @@ -58,15 +50,19 @@ item_dict->SetBoolean("pending", false); expected_value.SetDictionary("total", std::move(item_dict)); - PaymentDetailsModifier payment_detials_modififer; - payment_detials_modififer.supported_methods.push_back("visa"); - payment_detials_modififer.supported_methods.push_back("amex"); - payment_detials_modififer.total.label = "Gratuity"; - payment_detials_modififer.total.amount.currency = "USD"; - payment_detials_modififer.total.amount.value = "139.99"; + PaymentDetailsModifier payment_details_modifier; + payment_details_modifier.method_data.supported_methods.push_back( + "basic-card"); + payment_details_modifier.method_data.supported_methods.push_back("amex"); + payment_details_modifier.method_data.data = + "{\"supportedNetworks\":[\"visa\",\"mastercard\"]}"; + payment_details_modifier.total = base::MakeUnique<PaymentItem>(); + payment_details_modifier.total->label = "Gratuity"; + payment_details_modifier.total->amount.currency = "USD"; + payment_details_modifier.total->amount.value = "139.99"; EXPECT_TRUE(expected_value.Equals( - payment_detials_modififer.ToDictionaryValue().get())); + payment_details_modifier.ToDictionaryValue().get())); } // Tests that two details modifier objects are not equal if their property @@ -81,20 +77,29 @@ std::vector<std::string> supported_methods1; supported_methods1.push_back("China UnionPay"); supported_methods1.push_back("BobPay"); - details_modifier1.supported_methods = supported_methods1; + details_modifier1.method_data.supported_methods = supported_methods1; EXPECT_NE(details_modifier1, details_modifier2); std::vector<std::string> supported_methods2; supported_methods2.push_back("BobPay"); - details_modifier2.supported_methods = supported_methods2; + details_modifier2.method_data.supported_methods = supported_methods2; EXPECT_NE(details_modifier1, details_modifier2); - details_modifier2.supported_methods = supported_methods1; + details_modifier2.method_data.supported_methods = supported_methods1; EXPECT_EQ(details_modifier1, details_modifier2); - details_modifier1.total.label = "Total"; + details_modifier1.method_data.data = + "{\"supportedNetworks\":[\"visa\",\"mastercard\"]}"; EXPECT_NE(details_modifier1, details_modifier2); - details_modifier2.total.label = "Gratuity"; + details_modifier2.method_data.data = + "{\"supportedNetworks\":[\"visa\",\"mastercard\"]}"; + EXPECT_EQ(details_modifier1, details_modifier2); + + details_modifier1.total = base::MakeUnique<PaymentItem>(); + details_modifier1.total->label = "Total"; EXPECT_NE(details_modifier1, details_modifier2); - details_modifier2.total.label = "Total"; + details_modifier2.total = base::MakeUnique<PaymentItem>(); + details_modifier2.total->label = "Gratuity"; + EXPECT_NE(details_modifier1, details_modifier2); + details_modifier2.total->label = "Total"; EXPECT_EQ(details_modifier1, details_modifier2); PaymentItem payment_item;
diff --git a/components/payments/core/payment_details_unittest.cc b/components/payments/core/payment_details_unittest.cc index 660aab78..b460292 100644 --- a/components/payments/core/payment_details_unittest.cc +++ b/components/payments/core/payment_details_unittest.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "base/memory/ptr_util.h" #include "base/values.h" #include "testing/gtest/include/gtest/gtest.h" @@ -23,9 +24,10 @@ actual.FromDictionaryValue(details_dict, /*requires_total=*/false)); EXPECT_EQ(expected, actual); - expected.total.label = "TOTAL"; - expected.total.amount.currency = "GBP"; - expected.total.amount.value = "6.66"; + expected.total = base::MakeUnique<PaymentItem>(); + expected.total->label = "TOTAL"; + expected.total->amount.currency = "GBP"; + expected.total->amount.value = "6.66"; std::unique_ptr<base::DictionaryValue> total_dict(new base::DictionaryValue); total_dict->SetString("label", "TOTAL"); @@ -47,9 +49,10 @@ // Tests the failure case when populating a PaymentDetails from a dictionary. TEST(PaymentRequestTest, PaymentDetailsFromDictionaryValueFailure) { PaymentDetails expected; - expected.total.label = "TOTAL"; - expected.total.amount.currency = "GBP"; - expected.total.amount.value = "6.66"; + expected.total = base::MakeUnique<PaymentItem>(); + expected.total->label = "TOTAL"; + expected.total->amount.currency = "GBP"; + expected.total->amount.value = "6.66"; expected.error = "Error in details"; base::DictionaryValue details_dict; @@ -76,11 +79,13 @@ details2.id = details1.id; EXPECT_EQ(details1, details2); - details1.total.label = "Total"; + details1.total = base::MakeUnique<PaymentItem>(); + details1.total->label = "Total"; EXPECT_NE(details1, details2); - details2.total.label = "Shipping"; + details2.total = base::MakeUnique<PaymentItem>(); + details2.total->label = "Shipping"; EXPECT_NE(details1, details2); - details2.total.label = "Total"; + details2.total->label = "Total"; EXPECT_EQ(details1, details2); details1.error = "Foo"; @@ -119,7 +124,9 @@ EXPECT_EQ(details1, details2); PaymentDetailsModifier details_modifier; - details_modifier.total.label = "Total"; + + details_modifier.total = base::MakeUnique<PaymentItem>(); + details_modifier.total->label = "Total"; details1.modifiers.push_back(details_modifier); EXPECT_NE(details1, details2); details2.modifiers.push_back(details_modifier);
diff --git a/components/policy/core/browser/browser_policy_connector.cc b/components/policy/core/browser/browser_policy_connector.cc index a36e7d6..6ea20cd 100644 --- a/components/policy/core/browser/browser_policy_connector.cc +++ b/components/policy/core/browser/browser_policy_connector.cc
@@ -46,15 +46,22 @@ // these users are not from hosted enterprise domains. const wchar_t* const kNonManagedDomainPatterns[] = { L"aol\\.com", + L"comcast\\.net", L"googlemail\\.com", L"gmail\\.com", + L"gmx\\.de", L"hotmail(\\.co|\\.com|)\\.[^.]+", // hotmail.com, hotmail.it, hotmail.co.uk L"live\\.com", L"mail\\.ru", L"msn\\.com", + L"naver\\.com", + L"orange\\.fr", + L"outlook\\.com", L"qq\\.com", L"yahoo(\\.co|\\.com|)\\.[^.]+", // yahoo.com, yahoo.co.uk, yahoo.com.tw L"yandex\\.ru", + L"web\\.de", + L"wp\\.pl", L"consumer\\.example\\.com", };
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index ecd8be0..9597f847 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -143,7 +143,7 @@ # persistent IDs for all fields (but not for groups!) are needed. These are # specified by the 'id' keys of each policy. NEVER CHANGE EXISTING IDs, # because doing so would break the deployed wire format! -# For your editing convenience: highest ID currently used: 381 +# For your editing convenience: highest ID currently used: 385 # And don't forget to also update the EnterprisePolicies enum of # histograms.xml (run 'python tools/metrics/histograms/update_policies.py'). # @@ -9391,6 +9391,151 @@ configuration of printers by individual users.''', }, { + 'name': 'NativePrintersBulkConfiguration', + 'id': 382, + 'type': 'external', + 'schema': { + 'type': 'object', + 'properties': { + 'url': { 'type': 'string' }, + 'hash': { 'type': 'string' } + }, + }, + 'supported_on': ['chrome_os:62-'], + 'features': { + 'dynamic_refresh': True, + 'per_profile': True, + }, + 'example_value': { + "url": "https://example.com/printerpolicy", + "hash": "deadbeefdeadbeefdeadbeefdeadbeefdeafdeadbeefdeadbeef" + }, + 'max_size': 5242880, + 'caption': '''Enterprise printer configuration file''', + 'tags': [], + 'desc': '''Provides configurations for enterprise printers. + + This policy allows you to provide printer configurations to + <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices. + The size of the file must not exceed 5MB and must be encoded in JSON. + The format is the same as the NativePrinters dictionary. It is estimated + that a file containing approximately 21,000 printers will encode as a 5MB + file. The cryptographic hash is used to verify the integrity of the + download. + + The file is downloaded and cached. It will be re-downloaded whenever + the URL or the hash changes. + + If this policy is set, + <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will download + the file for printer configurations and make printers available in + accordance with NativePrintersBulkAccessMode, NativePrintersBulkWhitelist, + and NativePrintersBulkBlacklist. + + If you set this policy, users cannot change or override it. + + This policy has no effect on whether users can configure printers on + individual devices. It is intended to be supplementary to the + configuration of printers by individual users.''', + }, + { + 'name': 'NativePrintersBulkAccessMode', + 'id': 383, + 'supported_on': ['chrome_os:62-'], + 'type': 'int-enum', + 'schema': { + 'type': 'integer', + 'enum': [ 0, 1, 2 ], + }, + 'items': [ + { + 'name': 'BlacklistRestriction', + 'value': 0, + 'caption': '''All printers are shown except those in the blacklist.''', + }, + { + 'name': 'WhitelistPrintersOnly', + 'value': 1, + 'caption': '''Only printers in the whitelist are shown to users''', + }, + { + 'name': 'AllowAll', + 'value': 2, + 'caption': '''Allow all printers from the configuration file.''', + }, + ], + 'features' : { + 'can_be_recommended': True, + 'dynamic_refresh': True, + 'per_profile': True, + }, + 'example_value': 1, + 'caption': '''Printer configuration access policy.''', + 'tags': [], + 'desc': '''Controls which printers from the + NativePrintersBulkConfiguration are available to users. + + Designates which access policy is used for bulk printer configuration. + If AllowAll is selected, all printers are shown. If BlacklistRestrction + is selected, NativePrintersBulkBlacklist is used to restrict access to + the specified printers. If WhitelistPrintersOnly is selected, + NativePrintersWhitelist designates only those printers which are + selectable. + + If this policy is not set, BlacklistRestriction is assumed. + ''', + }, + { + 'name': 'NativePrintersBulkBlacklist', + 'supported_on': ['chrome_os:62-'], + 'id': 384, + 'type': 'list', + 'schema': { + 'type': 'array', + 'items': { 'type': 'string' }, + }, + 'features': { + 'dynamic_refresh': True, + 'per_profile': True, + }, + 'example_value': ["id1", "id2", "id3"], + 'caption': '''Disabled enterprise printers''', + 'tags': [], + 'desc': '''Specifies the printers which a user cannot use. + + This policy is only used if BlacklistRestriction is chosen for + NativePrintersBulkAccessMode. + + If this policy is used, all printers are provided to the user except + for the ids listed in this policy. + ''', + }, + { + 'name': 'NativePrintersBulkWhitelist', + 'supported_on': ['chrome_os:62-'], + 'id': 385, + 'type': 'list', + 'schema': { + 'type': 'array', + 'items': { 'type': 'string' }, + }, + 'features': { + 'dynamic_refresh': True, + 'per_profile': True, + }, + 'example_value': ["id1", "id2", "id3"], + 'caption': '''Enabled enterprise printers''', + 'tags': [], + 'desc': '''Specifies the printers which a user can use. + + This policy is only used if WhitelistPrintersOnly is chosen for + NativePrintersBulkAccessMode. + + If this policy is used, only the printers with ids matching the values + in this policy are available to the user. The ids must coorespond to + the entries in the file specified in NativePrintersBulkConfiguration.''', + }, + { 'name': 'QuickUnlock', 'type': 'group', 'caption': '''Quick unlock policies''',
diff --git a/components/prefs/overlay_user_pref_store.cc b/components/prefs/overlay_user_pref_store.cc index 76109c4..285b2063 100644 --- a/components/prefs/overlay_user_pref_store.cc +++ b/components/prefs/overlay_user_pref_store.cc
@@ -74,7 +74,9 @@ const base::Value** result) const { // If the |key| shall NOT be stored in the overlay store, there must not // be an entry. - DCHECK(ShallBeStoredInOverlay(key) || !overlay_->GetValue(key, NULL)); + // TODO(crbug.com/761123): Put back this DCHECK. It should be fixed by: + // https://chromium-review.googlesource.com/c/chromium/src/+/624772 + // DCHECK(ShallBeStoredInOverlay(key) || !overlay_->GetValue(key, NULL)); if (overlay_->GetValue(key, result)) return true;
diff --git a/components/printing/service/pdf_compositor_manifest.json b/components/printing/service/pdf_compositor_manifest.json index 9e9b059..d7914f4 100644 --- a/components/printing/service/pdf_compositor_manifest.json +++ b/components/printing/service/pdf_compositor_manifest.json
@@ -7,8 +7,8 @@ "composite": [ "printing::mojom::PdfCompositor" ] }, "requires": { - "service_manager": [ "service_manager:all_users" ], - "content_browser": [ "utility" ] + "*": [ "app" ], + "service_manager": [ "service_manager:all_users" ] } } }
diff --git a/components/safe_browsing/browser/base_parallel_resource_throttle.cc b/components/safe_browsing/browser/base_parallel_resource_throttle.cc index f1e0c74d..a59be63c 100644 --- a/components/safe_browsing/browser/base_parallel_resource_throttle.cc +++ b/components/safe_browsing/browser/base_parallel_resource_throttle.cc
@@ -18,7 +18,7 @@ void BaseParallelResourceThrottle::URLLoaderThrottleDelegateImpl:: CancelWithError(int error_code) { - owner_->CancelWithError(error_code); + owner_->CancelResourceLoad(); } void BaseParallelResourceThrottle::URLLoaderThrottleDelegateImpl::Resume() { @@ -75,8 +75,13 @@ void BaseParallelResourceThrottle::WillProcessResponse(bool* defer) { url_loader_throttle_->WillProcessResponse(defer); } + const char* BaseParallelResourceThrottle::GetNameForLogging() const { return "BaseParallelResourceThrottle"; } +void BaseParallelResourceThrottle::CancelResourceLoad() { + Cancel(); +} + } // namespace safe_browsing
diff --git a/components/safe_browsing/browser/base_parallel_resource_throttle.h b/components/safe_browsing/browser/base_parallel_resource_throttle.h index 0798526c..26d64ab4 100644 --- a/components/safe_browsing/browser/base_parallel_resource_throttle.h +++ b/components/safe_browsing/browser/base_parallel_resource_throttle.h
@@ -40,6 +40,8 @@ void WillProcessResponse(bool* defer) override; const char* GetNameForLogging() const override; + virtual void CancelResourceLoad(); + private: class URLLoaderThrottleDelegateImpl : public content::URLLoaderThrottle::Delegate {
diff --git a/components/safe_browsing/web_ui/safe_browsing_ui.cc b/components/safe_browsing/web_ui/safe_browsing_ui.cc index c714f37..2cc2964b 100644 --- a/components/safe_browsing/web_ui/safe_browsing_ui.cc +++ b/components/safe_browsing/web_ui/safe_browsing_ui.cc
@@ -106,7 +106,7 @@ base::DictionaryValue* full_hash_info_dict) { if (full_hash_info.has_positive_expiry()) { full_hash_info_dict->SetString( - "Positivie expiry", + "Positive expiry", UserReadableTimeFromMillisSinceEpoch(full_hash_info.positive_expiry()) .GetString()); }
diff --git a/components/signin/core/browser/about_signin_internals.cc b/components/signin/core/browser/about_signin_internals.cc index 8d932a5..757a42fc 100644 --- a/components/signin/core/browser/about_signin_internals.cc +++ b/components/signin/core/browser/about_signin_internals.cc
@@ -691,5 +691,14 @@ } signin_status->Set("accountInfo", std::move(account_info)); + +#if BUILDFLAG(ENABLE_DICE_SUPPORT) + if (signin::IsAccountConsistencyDiceEnabled()) { + auto dice_info = base::MakeUnique<base::DictionaryValue>(); + dice_info->SetBoolean("isSignedIn", signin_manager->IsAuthenticated()); + signin_status->Set("dice", std::move(dice_info)); + } +#endif + return signin_status; }
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.cc b/components/signin/core/browser/gaia_cookie_manager_service.cc index ed8e94b..85e7d28 100644 --- a/components/signin/core/browser/gaia_cookie_manager_service.cc +++ b/components/signin/core/browser/gaia_cookie_manager_service.cc
@@ -144,11 +144,9 @@ helper_->gaia_auth_fetcher_->StartGetCheckConnectionInfo(); // Some fetches may timeout. Start a timer to decide when the result fetcher - // has waited long enough. - // TODO(rogerta): I have no idea how long to wait before timing out. - // Gaia folks say this should take no more than 2 second even in mobile. - // This will need to be tweaked. - timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(5), this, + // has waited long enough. See https://crbug.com/750316#c36 for details on + // exact timeout duration. + timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(7), this, &GaiaCookieManagerService::ExternalCcResultFetcher::Timeout); }
diff --git a/components/signin/core/browser/resources/signin_index.css b/components/signin/core/browser/resources/signin_index.css index ebcc7873..34531a7 100644 --- a/components/signin/core/browser/resources/signin_index.css +++ b/components/signin/core/browser/resources/signin_index.css
@@ -76,3 +76,13 @@ -webkit-animation-name: highlight2; -webkit-animation-timing-function: linear; } + +paper-button.dice-primary-action { + --paper-button-flat-keyboard-focus: { + background: rgb(58, 117, 215); + font-weight: 500; + margin-top: 20; + }; + background: var(--google-blue-500); + color: white; +}
diff --git a/components/signin/core/browser/resources/signin_index.html b/components/signin/core/browser/resources/signin_index.html index 513a934..2b300d3 100644 --- a/components/signin/core/browser/resources/signin_index.html +++ b/components/signin/core/browser/resources/signin_index.html
@@ -2,6 +2,9 @@ <html dir="$i18n{textdirection}" lang="$i18n{language}"> <head> <meta charset="utf-8"> + <link rel="import" href="chrome://resources/html/polymer.html"> + <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> + <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html"> <title>Signin Internals</title> <script src="chrome://resources/js/cr.js"></script> <script src="chrome://resources/js/util.js"></script> @@ -86,6 +89,17 @@ </table> </div> </div> + <div id="diceSection" hidden="true"> + <h2>Desktop Identity Consistency</h2> + <div class="action-container"> + <paper-button class="dice-primary-action" id="enableSyncButton"> + Enable Sync + </paper-button> + <paper-button class="dice-primary-action" id="disableSyncButton"> + Disable Sync + </paper-button> + </div> + </div> <script src="chrome://resources/js/i18n_template.js"></script> <script src="chrome://resources/js/jstemplate_compiled.js"></script> <script src="chrome://signin-internals/signin_internals.js"></script>
diff --git a/components/signin/core/browser/resources/signin_internals.js b/components/signin/core/browser/resources/signin_internals.js index 5ac1b25..fb0f47c 100644 --- a/components/signin/core/browser/resources/signin_internals.js +++ b/components/signin/core/browser/resources/signin_internals.js
@@ -161,6 +161,39 @@ chrome.signin[signinFunction] = makeSigninFunction(signinFunction); } +cr.define('chrome.signin.dice', function() { + 'use strict'; + + function initialize() { + $('enableSyncButton').addEventListener('click', function(e) { + chrome.send("enableSync"); + }); + } + + function refreshUI(signinInfo) { + var diceInfo = signinInfo.dice; + + if (diceInfo == undefined) { + $('diceSection').hidden = true; + return; + } + + $('diceSection').hidden = false; + if (diceInfo.isSignedIn) { + $('enableSyncButton').hidden = true; + $('disableSyncButton').hidden = false; + } else { + $('disableSyncButton').hidden = true; + $('enableSyncButton').hidden = false; + } + } + + return { + initialize: initialize, + refreshUI: refreshUI, + }; +}); + chrome.signin.internalsInfo = {}; // Replace the displayed values with the latest fetched ones. @@ -169,6 +202,9 @@ jstProcess(new JsEvalContext(signinInfo), $('signin-info')); jstProcess(new JsEvalContext(signinInfo), $('token-info')); jstProcess(new JsEvalContext(signinInfo), $('account-info')); + + // Refresh the DICE section if needed. + chrome.signin.dice.refreshUI(signinInfo); } // Replace the cookie information with the fetched values. @@ -183,6 +219,7 @@ chrome.signin.onSigninInfoChanged.addListener(refreshSigninInfo); chrome.signin.onCookieAccountsFetched.addListener(updateCookieAccounts); + chrome.signin.dice.initialize(); } document.addEventListener('DOMContentLoaded', onLoad, false);
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc index b852d957..3a8bf2a3 100644 --- a/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc +++ b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
@@ -82,6 +82,14 @@ // ACTIVATION_DISABLED implies DISABLED activation level. DCHECK(activation_decision_ != ActivationDecision::ACTIVATION_DISABLED || activation_options().activation_level == ActivationLevel::DISABLED); + + // Ensure the matched config is in our config list. If it wasn't then this + // must be a forced activation via devtools. + DCHECK(activation_decision_ != ActivationDecision::ACTIVATED || + HasEnabledConfiguration(matched_configuration) || + matched_configuration == Configuration::MakeForForcedActivation()) + << matched_configuration; + ActivationState state = ActivationState(activation_options().activation_level); state.measure_performance = ShouldMeasurePerformanceForPageLoad(
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h index 1689293a..e4956fa5 100644 --- a/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h +++ b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.h
@@ -46,9 +46,7 @@ ~ContentSubresourceFilterDriverFactory() override; // This class will be notified of page level activation, before the associated - // navigation commits. Note that the passed |matched_configuration| may have - // activation options altered (in the event of e.g. forced activation via - // devtools), but the activation conditions should remain unaltered. + // navigation commits. void NotifyPageActivationComputed( content::NavigationHandle* navigation_handle, ActivationDecision activation_decision, @@ -58,13 +56,9 @@ // window. bool ShouldDisallowNewWindow(const content::OpenURLParams* open_url_params); - // Returns the |ActivationOptions| for the current main frame - // document. Do not rely on this API, it is only temporary. - // TODO(csharrison): Remove this and |activation_options_| in place of adding - // |should_suppress_notifications| on ActivationState. - const Configuration::ActivationOptions& - GetActivationOptionsForLastCommittedPageLoad() const { - return activation_options(); + // Returns the Configuration for the current main frame document. + const Configuration& GetMatchedConfigurationForLastCommittedPageLoad() const { + return matched_configuration_; } // ContentSubresourceFilterThrottleManager::Delegate: @@ -117,8 +111,7 @@ // // Careful note: the Configuration may not entirely match up with // a config in GetEnabledConfigurations() due to activation computation - // changing the config (e.g. for forcing devtools activation). However, the - // Configuration::ActivationConditions should remain unchanged. + // changing the config (e.g. for forcing devtools activation). Configuration matched_configuration_; DISALLOW_COPY_AND_ASSIGN(ContentSubresourceFilterDriverFactory);
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc index 86c2c24..19b3a3c 100644 --- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc +++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.cc
@@ -19,6 +19,7 @@ #include "components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.h" #include "components/subresource_filter/content/browser/subresource_filter_observer_manager.h" #include "components/subresource_filter/content/common/subresource_filter_messages.h" +#include "components/subresource_filter/content/common/subresource_filter_utils.h" #include "components/subresource_filter/core/browser/subresource_filter_constants.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_throttle.h" @@ -164,7 +165,13 @@ activated_frame_hosts_[frame_host] = std::move(filter); } else { activated_frame_hosts_.erase(frame_host); + + // If this is for a special url that did not go through the navigation + // throttles, then based on the parent's activation state, possibly add this + // to activated_frame_hosts_. + MaybeActivateSubframeSpecialUrls(navigation_handle); } + DestroyRulesetHandleIfNoLongerUsed(); } @@ -283,8 +290,25 @@ DCHECK(!child_frame_navigation->IsInMainFrame()); content::RenderFrameHost* parent = child_frame_navigation->GetParentFrame(); DCHECK(parent); - auto it = activated_frame_hosts_.find(parent); - return it == activated_frame_hosts_.end() ? nullptr : it->second.get(); + + // Filter will be null for those special url navigations that were added in + // MaybeActivateSubframeSpecialUrls. Return the filter of the first parent + // with a non-null filter. + while (parent) { + auto it = activated_frame_hosts_.find(parent); + if (it == activated_frame_hosts_.end()) + return nullptr; + + if (it->second.get()) + return it->second.get(); + parent = it->first->GetParent(); + } + + // Since null filter is only possible for special navigations of iframes, the + // above loop should have found a filter for at least the top level frame, + // thus making this unreachable. + NOTREACHED(); + return nullptr; } void ContentSubresourceFilterThrottleManager::MaybeCallFirstDisallowedLoad() { @@ -322,4 +346,23 @@ CHECK_EQ(0u, num_erased); } +void ContentSubresourceFilterThrottleManager::MaybeActivateSubframeSpecialUrls( + content::NavigationHandle* navigation_handle) { + if (navigation_handle->IsInMainFrame()) + return; + + if (!ShouldUseParentActivation(navigation_handle->GetURL())) + return; + + content::RenderFrameHost* frame_host = + navigation_handle->GetRenderFrameHost(); + if (!frame_host) + return; + + content::RenderFrameHost* parent = navigation_handle->GetParentFrame(); + DCHECK(parent); + if (base::ContainsKey(activated_frame_hosts_, parent)) + activated_frame_hosts_[frame_host] = nullptr; +} + } // namespace subresource_filter
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h index c3ea5bf..ce4cc04 100644 --- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h +++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager.h
@@ -133,8 +133,16 @@ void OnActivationThrottleDestroyed( content::NavigationHandle* navigation_handle); + // Adds the navigation's RenderFrameHost to activated_frame_hosts_ if it is a + // special navigation which did not go through navigation throttles and its + // parent frame is activated as well. The filter for these frames is set + // to nullptr. + void MaybeActivateSubframeSpecialUrls( + content::NavigationHandle* navigation_handle); + // For each RenderFrameHost where the last committed load has subresource // filtering activated, owns the corresponding AsyncDocumentSubresourceFilter. + // It is possible for a frame to have a null filter. std::unordered_map<content::RenderFrameHost*, std::unique_ptr<AsyncDocumentSubresourceFilter>> activated_frame_hosts_;
diff --git a/components/subresource_filter/content/browser/subresource_filter_client.h b/components/subresource_filter/content/browser/subresource_filter_client.h index 75763d90..77dd18ed 100644 --- a/components/subresource_filter/content/browser/subresource_filter_client.h +++ b/components/subresource_filter/content/browser/subresource_filter_client.h
@@ -35,7 +35,8 @@ // Precondition: The navigation must be a main frame navigation. virtual bool OnPageActivationComputed( content::NavigationHandle* navigation_handle, - bool activated) = 0; + bool activated, + bool suppressing_notifications) = 0; // Adds |url| to a per-WebContents whitelist. virtual void WhitelistInCurrentWebContents(const GURL& url) = 0;
diff --git a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc index df027958..263b7fa1 100644 --- a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc +++ b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc
@@ -185,37 +185,39 @@ auto* driver_factory = ContentSubresourceFilterDriverFactory::FromWebContents( navigation_handle()->GetWebContents()); DCHECK(driver_factory); - if (driver_factory->GetActivationOptionsForLastCommittedPageLoad() - .should_whitelist_site_on_reload && + if (driver_factory->GetMatchedConfigurationForLastCommittedPageLoad() + .activation_options.should_whitelist_site_on_reload && NavigationIsPageReload(navigation_handle())) { // Whitelist this host for the current as well as subsequent navigations. client_->WhitelistInCurrentWebContents(navigation_handle()->GetURL()); } Configuration matched_configuration; - ActivationDecision activation_decision = - ComputeActivation(&matched_configuration); - Configuration::ActivationOptions& matched_options = - matched_configuration.activation_options; - - // For forced activation, keep all the options except activation_level. + ActivationDecision activation_decision = ActivationDecision::UNKNOWN; if (client_->ForceActivationInCurrentWebContents()) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("loading"), "ActivationForced"); activation_decision = ActivationDecision::ACTIVATED; - matched_options.activation_level = ActivationLevel::ENABLED; + matched_configuration = Configuration::MakeForForcedActivation(); + } else { + activation_decision = ComputeActivation(&matched_configuration); } + DCHECK_NE(activation_decision, ActivationDecision::UNKNOWN); // Check for whitelisted status last, so that the client gets an accurate // indication of whether there would be activation otherwise. + // Note that the client is responsible for noticing if we're forcing + // activation. bool whitelisted = client_->OnPageActivationComputed( navigation_handle(), - matched_options.activation_level == ActivationLevel::ENABLED); + matched_configuration.activation_options.activation_level == + ActivationLevel::ENABLED, + matched_configuration.activation_options.should_suppress_notifications); // Only reset the activation decision reason if we would have activated. if (whitelisted && activation_decision == ActivationDecision::ACTIVATED) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("loading"), "ActivationWhitelisted"); activation_decision = ActivationDecision::URL_WHITELISTED; - matched_options = Configuration::ActivationOptions(); + matched_configuration = Configuration(); } driver_factory->NotifyPageActivationComputed(
diff --git a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc index 0f465a4d..16bb301 100644 --- a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc +++ b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
@@ -86,7 +86,8 @@ } bool OnPageActivationComputed(content::NavigationHandle* handle, - bool activated) override { + bool activated, + bool suppress_notifications) override { DCHECK(handle->IsInMainFrame()); return whitelisted_hosts_.count(handle->GetURL().host()); }
diff --git a/components/subresource_filter/content/common/BUILD.gn b/components/subresource_filter/content/common/BUILD.gn index 05f9b61a..aab4b33b 100644 --- a/components/subresource_filter/content/common/BUILD.gn +++ b/components/subresource_filter/content/common/BUILD.gn
@@ -9,6 +9,8 @@ "subresource_filter_message_generator.cc", "subresource_filter_message_generator.h", "subresource_filter_messages.h", + "subresource_filter_utils.cc", + "subresource_filter_utils.h", ] public_deps = [ "//base",
diff --git a/components/subresource_filter/content/common/subresource_filter_utils.cc b/components/subresource_filter/content/common/subresource_filter_utils.cc new file mode 100644 index 0000000..a84ae2a --- /dev/null +++ b/components/subresource_filter/content/common/subresource_filter_utils.cc
@@ -0,0 +1,26 @@ +// 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 "components/subresource_filter/content/common/subresource_filter_utils.h" + +#include "content/public/common/browser_side_navigation_policy.h" +#include "content/public/common/url_constants.h" +#include "content/public/common/url_utils.h" +#include "url/gurl.h" + +namespace subresource_filter { + +bool ShouldUseParentActivation(const GURL& url) { + if (content::IsBrowserSideNavigationEnabled()) + return !content::IsURLHandledByNetworkStack(url); + + // TODO(csharrison): It is not always true that a data URL can use its + // parent's activation in OOPIF mode, where the resulting data frame will + // be same-process to its initiator. See crbug.com/739777 for more + // information. + return (url.SchemeIs(url::kDataScheme) || url == url::kAboutBlankURL || + url == content::kAboutSrcDocURL); +} + +} // namespace subresource_filter
diff --git a/components/subresource_filter/content/common/subresource_filter_utils.h b/components/subresource_filter/content/common/subresource_filter_utils.h new file mode 100644 index 0000000..460e16a --- /dev/null +++ b/components/subresource_filter/content/common/subresource_filter_utils.h
@@ -0,0 +1,19 @@ +// 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 COMPONENTS_SUBRESOURCE_FILTER_CONTENT_COMMON_SUBRESOURCE_FILTER_UTILS_H_ +#define COMPONENTS_SUBRESOURCE_FILTER_CONTENT_COMMON_SUBRESOURCE_FILTER_UTILS_H_ + +class GURL; + +namespace subresource_filter { + +// Subframe navigations matching these URLs/schemes will not trigger +// ReadyToCommitNavigation in the browser process, so they must be treated +// specially to maintain activation. Should only be invoked for subframes. +bool ShouldUseParentActivation(const GURL& url); + +} // namespace subresource_filter + +#endif // COMPONENTS_SUBRESOURCE_FILTER_CONTENT_COMMON_SUBRESOURCE_FILTER_UTILS_H_
diff --git a/components/subresource_filter/content/renderer/subresource_filter_agent.cc b/components/subresource_filter/content/renderer/subresource_filter_agent.cc index 4e7b379..375d737 100644 --- a/components/subresource_filter/content/renderer/subresource_filter_agent.cc +++ b/components/subresource_filter/content/renderer/subresource_filter_agent.cc
@@ -13,6 +13,7 @@ #include "base/metrics/histogram_macros.h" #include "base/time/time.h" #include "components/subresource_filter/content/common/subresource_filter_messages.h" +#include "components/subresource_filter/content/common/subresource_filter_utils.h" #include "components/subresource_filter/content/renderer/unverified_ruleset_dealer.h" #include "components/subresource_filter/content/renderer/web_document_subresource_filter_impl.h" #include "components/subresource_filter/core/common/document_load_statistics.h" @@ -47,6 +48,10 @@ return render_frame()->GetWebFrame()->GetDocument().Url(); } +bool SubresourceFilterAgent::IsMainFrame() { + return render_frame()->IsMainFrame(); +} + void SubresourceFilterAgent::SetSubresourceFilterForCommittedLoad( std::unique_ptr<blink::WebDocumentSubresourceFilter> filter) { blink::WebLocalFrame* web_frame = render_frame()->GetWebFrame(); @@ -163,13 +168,16 @@ // which require changes to the unit tests. const GURL& url = GetDocumentURL(); - bool use_parent_activation = ShouldUseParentActivation(url); + bool use_parent_activation = !IsMainFrame() && ShouldUseParentActivation(url); + const ActivationState activation_state = use_parent_activation ? GetParentActivationState(render_frame()) : activation_state_for_next_commit_; + ResetActivatonStateForNextCommit(); - if (!url.SchemeIsHTTPOrHTTPS() && !url.SchemeIsFile() && - !use_parent_activation) + + // Do not pollute the histograms for empty main frame documents. + if (IsMainFrame() && !url.SchemeIsHTTPOrHTTPS() && !url.SchemeIsFile()) return; RecordHistogramsOnLoadCommitted(activation_state); @@ -238,14 +246,4 @@ AsWeakPtr()))); } -bool SubresourceFilterAgent::ShouldUseParentActivation(const GURL& url) const { - // TODO(csharrison): It is not always true that a data URL can use its - // parent's activation in OOPIF mode, where the resulting data frame will - // be same-process to its initiator. See crbug.com/739777 for more - // information. - return render_frame() && !render_frame()->IsMainFrame() && - (url.SchemeIs(url::kDataScheme) || url == url::kAboutBlankURL || - url == content::kAboutSrcDocURL); -} - } // namespace subresource_filter
diff --git a/components/subresource_filter/content/renderer/subresource_filter_agent.h b/components/subresource_filter/content/renderer/subresource_filter_agent.h index 235c11a..73d7c1a 100644 --- a/components/subresource_filter/content/renderer/subresource_filter_agent.h +++ b/components/subresource_filter/content/renderer/subresource_filter_agent.h
@@ -45,6 +45,8 @@ // Returns the URL of the currently committed document. virtual GURL GetDocumentURL(); + virtual bool IsMainFrame(); + // Injects the provided subresource |filter| into the DocumentLoader // orchestrating the most recently committed load. virtual void SetSubresourceFilterForCommittedLoad( @@ -78,11 +80,6 @@ bool OnMessageReceived(const IPC::Message& message) override; void WillCreateWorkerFetchContext(blink::WebWorkerFetchContext*) override; - // Subframe navigations matching these URLs/schemes will not trigger - // ReadyToCommitNavigation in the browser process, so they must be treated - // specially to maintain activation. - bool ShouldUseParentActivation(const GURL& url) const; - // Owned by the ChromeContentRendererClient and outlives us. UnverifiedRulesetDealer* ruleset_dealer_;
diff --git a/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc b/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc index ab9962885..4e3c2ad 100644 --- a/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc +++ b/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc
@@ -51,6 +51,8 @@ MOCK_METHOD0(SignalFirstSubresourceDisallowedForCommittedLoad, void()); MOCK_METHOD1(SendDocumentLoadStatistics, void(const DocumentLoadStatistics&)); + bool IsMainFrame() override { return true; } + void SetSubresourceFilterForCommittedLoad( std::unique_ptr<blink::WebDocumentSubresourceFilter> filter) override { last_injected_filter_ = std::move(filter);
diff --git a/components/subresource_filter/core/browser/subresource_filter_features.cc b/components/subresource_filter/core/browser/subresource_filter_features.cc index 0d35776..8f9ab91 100644 --- a/components/subresource_filter/core/browser/subresource_filter_features.cc +++ b/components/subresource_filter/core/browser/subresource_filter_features.cc
@@ -311,6 +311,16 @@ return config; } +// static +Configuration Configuration::MakeForForcedActivation() { + // This is a strange configuration, but it is generated on-the-fly rather than + // via finch configs, and is separate from the standard activation computation + // (which is why scope is no_sites). + Configuration config(ActivationLevel::ENABLED, ActivationScope::NO_SITES); + config.activation_conditions.forced_activation = true; + return config; +} + Configuration::Configuration() = default; Configuration::Configuration(ActivationLevel activation_level, ActivationScope activation_scope, @@ -331,6 +341,7 @@ config.activation_conditions.activation_list, config.activation_conditions.priority, config.activation_conditions.experimental, + config.activation_conditions.forced_activation, config.activation_options.activation_level, config.activation_options.performance_measurement_rate, config.activation_options.should_whitelist_site_on_reload, @@ -353,6 +364,7 @@ value->SetString("activation_list", StreamToString(activation_list)); value->SetInteger("priority", priority); value->SetBoolean("experimental", experimental); + value->SetBoolean("forced_activation", forced_activation); return value; } @@ -378,6 +390,11 @@ return value; } +std::ostream& operator<<(std::ostream& os, const Configuration& config) { + os << config.ToTracedValue()->ToString(); + return os; +} + // ConfigurationList ---------------------------------------------------------- ConfigurationList::ConfigurationList(std::vector<Configuration> configs) @@ -397,6 +414,11 @@ return g_active_configurations.Get(); } +bool HasEnabledConfiguration(const Configuration& config) { + return base::ContainsValue( + GetEnabledConfigurations()->configs_by_decreasing_priority(), config); +} + namespace testing { scoped_refptr<ConfigurationList> GetAndSetActivateConfigurations(
diff --git a/components/subresource_filter/core/browser/subresource_filter_features.h b/components/subresource_filter/core/browser/subresource_filter_features.h index 82741bb..4c6b638 100644 --- a/components/subresource_filter/core/browser/subresource_filter_features.h +++ b/components/subresource_filter/core/browser/subresource_filter_features.h
@@ -65,6 +65,11 @@ // Whether to activate on SafeBrowsing lists with experimental metadata. bool experimental = false; + // This boolean is set to true for a navigation which has forced activation, + // despite other conditions not matching. It should never be possible to set + // this via variation params. + bool forced_activation = false; + std::unique_ptr<base::trace_event::TracedValue> ToTracedValue() const; }; @@ -132,11 +137,17 @@ static Configuration MakePresetForLiveRunOnPhishingSites(); static Configuration MakePresetForPerformanceTestingDryRunOnAllSites(); + // Not really a preset, but used as the configuration for forcing activation + // (e.g. via devtools). + static Configuration MakeForForcedActivation(); + ActivationConditions activation_conditions; ActivationOptions activation_options; GeneralSettings general_settings; }; +std::ostream& operator<<(std::ostream& os, const Configuration& config); + // Thread-safe, ref-counted wrapper around an immutable list of configurations. class ConfigurationList : public base::RefCountedThreadSafe<ConfigurationList> { public: @@ -172,6 +183,8 @@ // callers should not hold on to the result for long. scoped_refptr<ConfigurationList> GetEnabledConfigurations(); +bool HasEnabledConfiguration(const Configuration& config); + namespace testing { // Returns the currently cached enabled ConfigurationList, if any, and replaces
diff --git a/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc b/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc index eb5640b..e52d6d5f 100644 --- a/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc +++ b/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc
@@ -683,4 +683,21 @@ config_list->lexicographically_greatest_ruleset_flavor()); } +TEST(SubresourceFilterFeaturesTest, ForcedActivation_NotConfigurable) { + ScopedExperimentalStateToggle scoped_experimental_state( + base::FeatureList::OVERRIDE_ENABLE_FEATURE, + {{kActivationLevelParameterName, kActivationLevelEnabled}, + {kActivationScopeParameterName, kActivationScopeNoSites}, + {"forced_activation", "true"}}); + + Configuration actual_configuration; + ExpectAndRetrieveExactlyOneEnabledConfig(&actual_configuration); + EXPECT_EQ(ActivationLevel::ENABLED, + actual_configuration.activation_options.activation_level); + EXPECT_EQ(ActivationScope::NO_SITES, + actual_configuration.activation_conditions.activation_scope); + + EXPECT_FALSE(actual_configuration.activation_conditions.forced_activation); +} + } // namespace subresource_filter
diff --git a/components/sync/BUILD.gn b/components/sync/BUILD.gn index 1e437edf5..08589b0 100644 --- a/components/sync/BUILD.gn +++ b/components/sync/BUILD.gn
@@ -608,6 +608,7 @@ "//google_apis", "//sql", "//third_party/cacheinvalidation", + "//third_party/crc32c", "//third_party/leveldatabase", "//third_party/zlib", "//third_party/zlib/google:compression_utils", @@ -615,9 +616,7 @@ if (is_android) { deps += [ "//components/sync/android:jni_headers" ] - sources += [ - "android/model_type_helper.cc", - ] + sources += [ "android/model_type_helper.cc" ] } if (is_chromeos) { @@ -986,6 +985,7 @@ "//sql:test_support", "//testing/gmock", "//testing/gtest", + "//third_party/crc32c", "//third_party/leveldatabase", "//third_party/protobuf:protobuf_lite", "//third_party/zlib/google:compression_utils",
diff --git a/components/sync/engine/attachments/DEPS b/components/sync/engine/attachments/DEPS index 8834eeb6..2527ffa 100644 --- a/components/sync/engine/attachments/DEPS +++ b/components/sync/engine/attachments/DEPS
@@ -1,4 +1,5 @@ include_rules = [ "+net", + "+third_party/crc32c", "+third_party/leveldatabase", ]
diff --git a/components/sync/engine/attachments/attachment_util.cc b/components/sync/engine/attachments/attachment_util.cc index 990077c..5360865ee 100644 --- a/components/sync/engine/attachments/attachment_util.cc +++ b/components/sync/engine/attachments/attachment_util.cc
@@ -5,12 +5,12 @@ #include "components/sync/engine/attachments/attachment_util.h" #include "base/memory/ref_counted_memory.h" -#include "third_party/leveldatabase/src/util/crc32c.h" +#include "third_party/crc32c/src/include/crc32c/crc32c.h" namespace syncer { uint32_t ComputeCrc32c(const scoped_refptr<base::RefCountedMemory>& data) { - return leveldb::crc32c::Value(data->front_as<char>(), data->size()); + return crc32c::Crc32c(data->front_as<char>(), data->size()); } } // namespace syncer
diff --git a/components/sync/engine_impl/attachments/DEPS b/components/sync/engine_impl/attachments/DEPS index 93e42d4..af87ba3 100644 --- a/components/sync/engine_impl/attachments/DEPS +++ b/components/sync/engine_impl/attachments/DEPS
@@ -1,5 +1,5 @@ include_rules = [ "+net", - "+third_party/leveldatabase", + "+third_party/crc32c", "+components/data_use_measurement/core", ]
diff --git a/components/sync/engine_impl/attachments/attachment_downloader_impl_unittest.cc b/components/sync/engine_impl/attachments/attachment_downloader_impl_unittest.cc index 9e375f8..7c4682b 100644 --- a/components/sync/engine_impl/attachments/attachment_downloader_impl_unittest.cc +++ b/components/sync/engine_impl/attachments/attachment_downloader_impl_unittest.cc
@@ -25,7 +25,7 @@ #include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/url_request_test_util.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/leveldatabase/src/util/crc32c.h" +#include "third_party/crc32c/src/include/crc32c/crc32c.h" namespace syncer { @@ -292,8 +292,8 @@ case HASH_HEADER_NONE: break; case HASH_HEADER_VALID: - header += AttachmentUploaderImpl::FormatCrc32cHash(leveldb::crc32c::Value( - kAttachmentContent, strlen(kAttachmentContent))); + header += AttachmentUploaderImpl::FormatCrc32cHash( + crc32c::Crc32c(kAttachmentContent, strlen(kAttachmentContent))); headers->AddHeader(header); break; case HASH_HEADER_INVALID:
diff --git a/components/tracing/common/OWNERS b/components/tracing/common/OWNERS index 42444bc..cbf806a 100644 --- a/components/tracing/common/OWNERS +++ b/components/tracing/common/OWNERS
@@ -1,2 +1,5 @@ per-file *_messages*.h=set noparent per-file *_messages*.h=file://ipc/SECURITY_OWNERS + +per-file *_messages.cc=set noparent +per-file *_messages.cc=file://ipc/SECURITY_OWNERS
diff --git a/components/tracing/common/tracing_messages.cc b/components/tracing/common/tracing_messages.cc index e05142c..798e1a8 100644 --- a/components/tracing/common/tracing_messages.cc +++ b/components/tracing/common/tracing_messages.cc
@@ -4,36 +4,64 @@ // Get basic type definitions. #define IPC_MESSAGE_IMPL +#undef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include "components/tracing/common/tracing_messages.h" +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#error "Failed to include components/tracing/common/tracing_messages.h" +#endif // Generate constructors. #include "ipc/struct_constructor_macros.h" +#undef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include "components/tracing/common/tracing_messages.h" +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#error "Failed to include components/tracing/common/tracing_messages.h" +#endif // Generate destructors. #include "ipc/struct_destructor_macros.h" +#undef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include "components/tracing/common/tracing_messages.h" +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#error "Failed to include components/tracing/common/tracing_messages.h" +#endif // Generate param traits size methods. #include "ipc/param_traits_size_macros.h" namespace IPC { +#undef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include "components/tracing/common/tracing_messages.h" +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#error "Failed to include components/tracing/common/tracing_messages.h" +#endif } // Generate param traits write methods. #include "ipc/param_traits_write_macros.h" namespace IPC { +#undef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include "components/tracing/common/tracing_messages.h" +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#error "Failed to include components/tracing/common/tracing_messages.h" +#endif } // namespace IPC // Generate param traits read methods. #include "ipc/param_traits_read_macros.h" namespace IPC { +#undef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include "components/tracing/common/tracing_messages.h" +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#error "Failed to include components/tracing/common/tracing_messages.h" +#endif } // namespace IPC // Generate param traits log methods. #include "ipc/param_traits_log_macros.h" namespace IPC { +#undef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include "components/tracing/common/tracing_messages.h" +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#error "Failed to include components/tracing/common/tracing_messages.h" +#endif } // namespace IPC
diff --git a/components/tracing/common/tracing_messages.h b/components/tracing/common/tracing_messages.h index e1d82d65..d63c022b 100644 --- a/components/tracing/common/tracing_messages.h +++ b/components/tracing/common/tracing_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message header, no traditional include guard. +#ifndef COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ +#define COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_ #include <stdint.h> @@ -72,3 +73,5 @@ std::string /* name */) IPC_MESSAGE_CONTROL0(TracingHostMsg_AbortBackgroundTrace) + +#endif // COMPONENTS_TRACING_COMMON_TRACING_MESSAGES_H_
diff --git a/components/translate/core/browser/BUILD.gn b/components/translate/core/browser/BUILD.gn index 2932340..1c1e2c2 100644 --- a/components/translate/core/browser/BUILD.gn +++ b/components/translate/core/browser/BUILD.gn
@@ -20,8 +20,6 @@ "translate_error_details.h", "translate_event_details.cc", "translate_event_details.h", - "translate_experiment.cc", - "translate_experiment.h", "translate_language_list.cc", "translate_language_list.h", "translate_manager.cc", @@ -96,7 +94,6 @@ "mock_translate_ranker.h", "translate_accept_languages_unittest.cc", "translate_browser_metrics_unittest.cc", - "translate_experiment_unittest.cc", "translate_language_list_unittest.cc", "translate_manager_unittest.cc", "translate_prefs_unittest.cc",
diff --git a/components/translate/core/browser/translate_experiment.cc b/components/translate/core/browser/translate_experiment.cc deleted file mode 100644 index 38622c6..0000000 --- a/components/translate/core/browser/translate_experiment.cc +++ /dev/null
@@ -1,75 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/translate/core/browser/translate_experiment.h" - -#include "base/command_line.h" -#include "base/logging.h" -#include "base/metrics/field_trial.h" -#include "base/strings/string_util.h" -#include "components/translate/core/browser/translate_download_manager.h" - -using base::CommandLine; - -namespace translate { - -namespace { - -const char kTranslateExperimentTrial[] = "TranslateUiLangTrial"; -const char kDisableTranslateExperiment[] = "disable-translate-experiment"; -const char kEnableTranslateExperiment[] = "enable-translate-experiment"; -const char kForceTranslateLanguage[] = "force-translate-language"; - -} // namespace - -// static -void TranslateExperiment::OverrideUiLanguage(const std::string& country, - std::string* ui_lang) { - DCHECK(ui_lang); - if (!InExperiment()) - return; - - // Forced target language takes precedence. - if (CommandLine::ForCurrentProcess()->HasSwitch(kForceTranslateLanguage)) { - *ui_lang = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - kForceTranslateLanguage); - return; - } - - // Otherwise, base the target language on the current country. - if (country == "my") - *ui_lang = "ms"; - else if (country == "id") - *ui_lang = "id"; - else if (country == "th") - *ui_lang = "th"; -} - -// static -bool TranslateExperiment::ShouldOverrideBlocking(const std::string& ui_language, - const std::string& language) { - return InExperiment() && (language == ui_language); -} - -// static -bool TranslateExperiment::InExperiment() { - // Note: It's important to query the field trial state first, to ensure that - // UMA reports the correct group. - const std::string group_name = - base::FieldTrialList::FindFullName(kTranslateExperimentTrial); - if (CommandLine::ForCurrentProcess()->HasSwitch(kDisableTranslateExperiment)) - return false; - // TODO(groby): Figure out if we can get rid of the enable branch completely. - // Or, if we allow enable, we have to gate this on country. I'd rather not, - // since this complicates the experiment. - if (CommandLine::ForCurrentProcess()->HasSwitch(kEnableTranslateExperiment)) - return true; - if (CommandLine::ForCurrentProcess()->HasSwitch(kForceTranslateLanguage)) - return true; - // Use StartsWith() for more flexibility (e.g. multiple Enabled groups). - return base::StartsWith(group_name, "Enabled", - base::CompareCase::INSENSITIVE_ASCII); -} - -} // namespace translate
diff --git a/components/translate/core/browser/translate_experiment.h b/components/translate/core/browser/translate_experiment.h deleted file mode 100644 index 8fce330..0000000 --- a/components/translate/core/browser/translate_experiment.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 COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_EXPERIMENT_H_ -#define COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_EXPERIMENT_H_ - -#include <string> - -#include "base/gtest_prod_util.h" - -namespace translate { - -class TranslateExperiment { - public: - // Replaces the UI language for experiment purposes, if the experiment is - // enabled. I.e. if the user participates in the experiment, and their UI - // language differs from the predominantly spoken language in the area, this - // changes |ui_lang| to the predominantly spoken language. - static void OverrideUiLanguage(const std::string& country, - std::string* ui_lang); - - // Check if a user-defined block needs to be overridden for |language|, i.e. - // if the user is in the experiment and |language| matches |ui_language|. - // This is necessary because the current Translate systems treats the UI - // language as auto-blocked. - static bool ShouldOverrideBlocking(const std::string& ui_language, - const std::string& language); - - private: - FRIEND_TEST_ALL_PREFIXES(TranslateExperimentTest, TestInExperiment); - - static bool InExperiment(); -}; - -} // namespace translate - -#endif // COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_EXPERIMENT_H_
diff --git a/components/translate/core/browser/translate_experiment_unittest.cc b/components/translate/core/browser/translate_experiment_unittest.cc deleted file mode 100644 index d17d6fab..0000000 --- a/components/translate/core/browser/translate_experiment_unittest.cc +++ /dev/null
@@ -1,101 +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 "components/translate/core/browser/translate_experiment.h" - -#include <string> - -#include "base/metrics/field_trial.h" -#include "base/test/scoped_command_line.h" -#include "components/variations/variations_associated_data.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace translate { -namespace { - -class TranslateExperimentTest : public testing::Test { - public: - void TearDown() override { - variations::testing::ClearAllVariationIDs(); - variations::testing::ClearAllVariationParams(); - } -}; - -TEST_F(TranslateExperimentTest, TestOverrideUiLanguage) { - // Experiment not enabled, so do nothing. - std::string ui_lang; - TranslateExperiment::OverrideUiLanguage("my", &ui_lang); - EXPECT_TRUE(ui_lang.empty()); - - // Enable the field trial. - base::FieldTrialList field_trial_list(nullptr); - base::FieldTrialList::CreateFieldTrial("TranslateUiLangTrial", "Enabled"); - - // Test language overrides. - TranslateExperiment::OverrideUiLanguage("my", &ui_lang); - EXPECT_EQ(ui_lang, "ms"); - TranslateExperiment::OverrideUiLanguage("id", &ui_lang); - EXPECT_EQ(ui_lang, "id"); - TranslateExperiment::OverrideUiLanguage("th", &ui_lang); - EXPECT_EQ(ui_lang, "th"); - - { - // Force translate language command-line switch. - base::test::ScopedCommandLine scoped_command_line; - scoped_command_line.GetProcessCommandLine()->AppendSwitchASCII( - "force-translate-language", "es"); - TranslateExperiment::OverrideUiLanguage("th", &ui_lang); - EXPECT_EQ(ui_lang, "es"); - } -} - -TEST_F(TranslateExperimentTest, TestShouldOverrideBlocking) { - // By default the experiments are disabled. - EXPECT_FALSE(TranslateExperiment::ShouldOverrideBlocking("en", "en")); - - // Enable the field trial. - base::FieldTrialList field_trial_list(nullptr); - base::FieldTrialList::CreateFieldTrial("TranslateUiLangTrial", "Enabled"); - - EXPECT_TRUE(TranslateExperiment::ShouldOverrideBlocking("en", "en")); - EXPECT_FALSE(TranslateExperiment::ShouldOverrideBlocking("en", "es")); -} - -} // namespace - -TEST_F(TranslateExperimentTest, TestInExperiment) { - // By default the experiments are disabled. - EXPECT_FALSE(TranslateExperiment::InExperiment()); - - { - // Experiment enabled using command-line switch. - base::test::ScopedCommandLine scoped_command_line; - scoped_command_line.GetProcessCommandLine()->AppendSwitch( - "enable-translate-experiment"); - EXPECT_TRUE(TranslateExperiment::InExperiment()); - } - - { - // Force translate language command-line switch. - base::test::ScopedCommandLine scoped_command_line; - scoped_command_line.GetProcessCommandLine()->AppendSwitchASCII( - "force-translate-language", "es"); - EXPECT_TRUE(TranslateExperiment::InExperiment()); - } - - // Enable the field trial. - base::FieldTrialList field_trial_list(nullptr); - base::FieldTrialList::CreateFieldTrial("TranslateUiLangTrial", "Enabled"); - EXPECT_TRUE(TranslateExperiment::InExperiment()); - - { - // Experiment disabled using command-line switch. - base::test::ScopedCommandLine scoped_command_line; - scoped_command_line.GetProcessCommandLine()->AppendSwitch( - "disable-translate-experiment"); - EXPECT_FALSE(TranslateExperiment::InExperiment()); - } -} - -} // namespace translate
diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc index 92f30c69..19bd76a 100644 --- a/components/translate/core/browser/translate_manager.cc +++ b/components/translate/core/browser/translate_manager.cc
@@ -26,7 +26,6 @@ #include "components/translate/core/browser/translate_download_manager.h" #include "components/translate/core/browser/translate_driver.h" #include "components/translate/core/browser/translate_error_details.h" -#include "components/translate/core/browser/translate_experiment.h" #include "components/translate/core/browser/translate_language_list.h" #include "components/translate/core/browser/translate_prefs.h" #include "components/translate/core/browser/translate_ranker.h" @@ -483,24 +482,16 @@ // static std::string TranslateManager::GetTargetLanguage(const TranslatePrefs* prefs) { - std::string language; + // Get target language from ULP if the ULP experiment is enabled. + std::string language = TranslateManager::GetTargetLanguageFromULP(prefs); + if (!language.empty()) + return language; - // Get the override UI language. - TranslateExperiment::OverrideUiLanguage(prefs->GetCountry(), &language); - - // If there are no override. - if (language.empty()) { - // Get the language from ULP. - language = TranslateManager::GetTargetLanguageFromULP(prefs); - if (!language.empty()) - return language; - - // Get the browser's user interface language. - language = TranslateDownloadManager::GetLanguageCode( - TranslateDownloadManager::GetInstance()->application_locale()); - // Map 'he', 'nb', 'fil' back to 'iw', 'no', 'tl' - translate::ToTranslateLanguageSynonym(&language); - } + // Get the browser's user interface language. + language = TranslateDownloadManager::GetLanguageCode( + TranslateDownloadManager::GetInstance()->application_locale()); + // Map 'he', 'nb', 'fil' back to 'iw', 'no', 'tl' + translate::ToTranslateLanguageSynonym(&language); if (TranslateDownloadManager::IsSupportedLanguage(language)) return language; @@ -513,6 +504,7 @@ if (TranslateDownloadManager::IsSupportedLanguage(lang_code)) return lang_code; } + return std::string(); }
diff --git a/components/translate/core/browser/translate_prefs.cc b/components/translate/core/browser/translate_prefs.cc index 4ebf62e..3437031 100644 --- a/components/translate/core/browser/translate_prefs.cc +++ b/components/translate/core/browser/translate_prefs.cc
@@ -18,7 +18,6 @@ #include "components/prefs/scoped_user_pref_update.h" #include "components/translate/core/browser/translate_accept_languages.h" #include "components/translate/core/browser/translate_download_manager.h" -#include "components/translate/core/browser/translate_experiment.h" #include "components/translate/core/browser/translate_pref_names.h" #include "components/translate/core/common/translate_util.h" @@ -491,13 +490,6 @@ TranslateAcceptLanguages::CanBeAcceptLanguage(language); bool is_accept_language = accept_languages->IsAcceptLanguage(language); - // For the translate language experiment, blocklists can be overridden. - const std::string& app_locale = - TranslateDownloadManager::GetInstance()->application_locale(); - std::string ui_lang = TranslateDownloadManager::GetLanguageCode(app_locale); - if (TranslateExperiment::ShouldOverrideBlocking(ui_lang, language)) - return true; - // Don't translate any user black-listed languages. Checking // |is_accept_language| is necessary because if the user eliminates the // language from the preference, it is natural to forget whether or not @@ -505,11 +497,8 @@ // is also necessary because some minor languages can't be selected in the // language preference even though the language is available in Translate // server. - if (IsBlockedLanguage(language) && - (is_accept_language || !can_be_accept_language)) - return false; - - return true; + return !IsBlockedLanguage(language) || + (!is_accept_language && can_be_accept_language); } bool TranslatePrefs::ShouldAutoTranslate(const std::string& original_language,
diff --git a/components/translate/core/browser/translate_prefs.h b/components/translate/core/browser/translate_prefs.h index 9582425..f3ee614d 100644 --- a/components/translate/core/browser/translate_prefs.h +++ b/components/translate/core/browser/translate_prefs.h
@@ -102,7 +102,7 @@ bool IsEnabled() const; // Sets the country that the application is run in. Determined by the - // VariationsService, can be left empty. Used by TranslateExperiment. + // VariationsService, can be left empty. Used by the TranslateRanker. void SetCountry(const std::string& country); std::string GetCountry() const;
diff --git a/components/user_manager/known_user.cc b/components/user_manager/known_user.cc index 5de67a0..5e0a156 100644 --- a/components/user_manager/known_user.cc +++ b/components/user_manager/known_user.cc
@@ -57,6 +57,10 @@ // Key of the boolean flag telling if user session has finished init yet. const char kProfileEverInitialized[] = "profile_ever_initialized"; +// Key of the boolean flag telling if a minimal user home migration has been +// attempted. +const char kMinimalMigrationAttempted[] = "minimal_migration_attempted"; + PrefService* GetLocalState() { if (!UserManager::IsInitialized()) return nullptr; @@ -484,6 +488,24 @@ return GetIntegerPref(account_id, kReauthReasonKey, out_value); } +bool WasUserHomeMinimalMigrationAttempted(const AccountId& account_id) { + bool minimal_migration_attempted; + const bool pref_set = GetBooleanPref(account_id, kMinimalMigrationAttempted, + &minimal_migration_attempted); + if (pref_set) + return minimal_migration_attempted; + + // If we haven't recorded that a minimal migration has been attempted, assume + // no. + return false; +} + +void SetUserHomeMinimalMigrationAttempted(const AccountId& account_id, + bool minimal_migration_attempted) { + SetBooleanPref(account_id, kMinimalMigrationAttempted, + minimal_migration_attempted); +} + void RemovePrefs(const AccountId& account_id) { PrefService* local_state = GetLocalState();
diff --git a/components/user_manager/known_user.h b/components/user_manager/known_user.h index da26caa..22d9c4bf 100644 --- a/components/user_manager/known_user.h +++ b/components/user_manager/known_user.h
@@ -148,6 +148,15 @@ bool USER_MANAGER_EXPORT FindReauthReason(const AccountId& account_id, int* out_value); +// Saves that a minimal migration was attempted for this user's cryptohome. +void USER_MANAGER_EXPORT +SetUserHomeMinimalMigrationAttempted(const AccountId& account_id, + bool minimal_migration_attempted); + +// Returns true if minimal migration was attempted for this user's cryptohome. +bool USER_MANAGER_EXPORT +WasUserHomeMinimalMigrationAttempted(const AccountId& account_id); + // Removes all user preferences associated with |account_id|. // Not exported as code should not be calling this outside this component // (with the exception of tests, so a test-only API is exposed).
diff --git a/components/user_manager/user_manager.h b/components/user_manager/user_manager.h index b3eb6682..0586d762e 100644 --- a/components/user_manager/user_manager.h +++ b/components/user_manager/user_manager.h
@@ -329,6 +329,9 @@ // Changes the child status and notifies observers. virtual void ChangeUserChildStatus(User* user, bool is_child) = 0; + // Resets this profile to be regarded as if it has never been initialized + // before. Used on profile wipe. + virtual void ResetProfileEverInitialized(const AccountId& account_id) = 0; // Returns true if supervised users allowed. virtual bool AreSupervisedUsersAllowed() const = 0;
diff --git a/components/user_manager/user_manager_base.cc b/components/user_manager/user_manager_base.cc index bd1f021..6ed0497 100644 --- a/components/user_manager/user_manager_base.cc +++ b/components/user_manager/user_manager_base.cc
@@ -1032,6 +1032,18 @@ observer.UserChangedChildStatus(user); } +void UserManagerBase::ResetProfileEverInitialized(const AccountId& account_id) { + User* user = FindUserAndModify(account_id); + if (!user) { + LOG(ERROR) << "User not found: " << account_id.GetUserEmail(); + return; // Ignore if there is no such user. + } + + user->set_profile_ever_initialized(false); + known_user::SetProfileEverInitialized(user->GetAccountId(), false); + GetLocalState()->CommitPendingWrite(); +} + void UserManagerBase::Initialize() { UserManager::Initialize(); CallUpdateLoginState();
diff --git a/components/user_manager/user_manager_base.h b/components/user_manager/user_manager_base.h index 2e44e71..da6898f 100644 --- a/components/user_manager/user_manager_base.h +++ b/components/user_manager/user_manager_base.h
@@ -111,6 +111,7 @@ const User& user, const gfx::ImageSkia& profile_image) override; void ChangeUserChildStatus(User* user, bool is_child) override; + void ResetProfileEverInitialized(const AccountId& account_id) override; void Initialize() override; // This method updates "User was added to the device in this session nad is
diff --git a/components/variations/service/variations_field_trial_creator.h b/components/variations/service/variations_field_trial_creator.h index 548267355..dceecfb 100644 --- a/components/variations/service/variations_field_trial_creator.h +++ b/components/variations/service/variations_field_trial_creator.h
@@ -27,7 +27,7 @@ VariationsFieldTrialCreator(PrefService* local_state, VariationsServiceClient* client, const UIStringOverrider& ui_string_overrider); - ~VariationsFieldTrialCreator(); + virtual ~VariationsFieldTrialCreator(); // Returns what variations will consider to be the latest country. Returns // empty if it is not available.
diff --git a/components/variations/service/variations_field_trial_creator_unittest.cc b/components/variations/service/variations_field_trial_creator_unittest.cc index 47fefb3..c5d83da 100644 --- a/components/variations/service/variations_field_trial_creator_unittest.cc +++ b/components/variations/service/variations_field_trial_creator_unittest.cc
@@ -80,7 +80,7 @@ SetCreateTrialsFromSeedCalledForTesting(true); } - ~TestVariationsFieldTrialCreator() { + ~TestVariationsFieldTrialCreator() override { delete client_; client_ = 0; }
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc index 011bb55..1032a546 100644 --- a/components/viz/service/display/gl_renderer.cc +++ b/components/viz/service/display/gl_renderer.cc
@@ -658,7 +658,7 @@ } static sk_sp<SkImage> WrapTexture( - const cc::ResourceProvider::ScopedReadLockGL& lock, + const cc::DisplayResourceProvider::ScopedReadLockGL& lock, GrContext* context, bool flip_texture) { // Wrap a given texture in a Ganesh backend texture. @@ -680,7 +680,7 @@ const gfx::RectF& dst_rect, const gfx::Vector2dF& scale, sk_sp<SkImageFilter> filter, - const cc::ResourceProvider::ScopedReadLockGL& source_texture_lock, + const cc::DisplayResourceProvider::ScopedReadLockGL& source_texture_lock, SkIPoint* offset, SkIRect* subset, bool flip_texture, @@ -948,8 +948,8 @@ if (!filter || !use_gr_context) return nullptr; - cc::ResourceProvider::ScopedReadLockGL lock(resource_provider_, - background_texture->id()); + cc::DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_, + background_texture->id()); bool flip_texture = true; sk_sp<SkImage> src_image = @@ -1274,8 +1274,9 @@ SkIRect subset; gfx::RectF src_rect(quad->rect); - cc::ResourceProvider::ScopedReadLockGL prefilter_contents_texture_lock( - resource_provider_, params->contents_texture->id()); + cc::DisplayResourceProvider::ScopedReadLockGL + prefilter_contents_texture_lock(resource_provider_, + params->contents_texture->id()); params->contents_color_space = prefilter_contents_texture_lock.color_space(); params->filter_image = ApplyImageFilter( @@ -2285,8 +2286,8 @@ gl_, &highp_threshold_cache_, settings_->highp_threshold_min, quad->shared_quad_state->visible_quad_layer_rect.bottom_right()); - cc::ResourceProvider::ScopedReadLockGL lock(resource_provider_, - quad->resource_id()); + cc::DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_, + quad->resource_id()); SetUseProgram(ProgramKey::VideoStream(tex_coord_precision), lock.color_space()); @@ -2447,8 +2448,8 @@ gl_, &highp_threshold_cache_, settings_->highp_threshold_min, quad->shared_quad_state->visible_quad_layer_rect.bottom_right()); - cc::ResourceProvider::ScopedReadLockGL lock(resource_provider_, - quad->resource_id()); + cc::DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_, + quad->resource_id()); const SamplerType sampler = SamplerTypeFromTextureTarget(lock.target()); bool need_tex_clamp_rect = !quad->resource_size_in_pixels().IsEmpty() && @@ -3282,7 +3283,7 @@ unsigned texture_id = 0; if (contents_resource_id) { pending_overlay_resources_.push_back( - base::MakeUnique<cc::ResourceProvider::ScopedReadLockGL>( + base::MakeUnique<cc::DisplayResourceProvider::ScopedReadLockGL>( resource_provider_, contents_resource_id)); texture_id = pending_overlay_resources_.back()->texture_id(); } @@ -3344,7 +3345,7 @@ for (const auto& contents_resource_id : dc_layer_overlay.resources) { if (contents_resource_id) { pending_overlay_resources_.push_back( - base::MakeUnique<cc::ResourceProvider::ScopedReadLockGL>( + base::MakeUnique<cc::DisplayResourceProvider::ScopedReadLockGL>( resource_provider_, contents_resource_id)); texture_ids[i] = pending_overlay_resources_.back()->texture_id(); ids_to_send = i + 1; @@ -3408,7 +3409,7 @@ DCHECK(texture_id || IsContextLost()); } else { pending_overlay_resources_.push_back( - base::MakeUnique<cc::ResourceProvider::ScopedReadLockGL>( + base::MakeUnique<cc::DisplayResourceProvider::ScopedReadLockGL>( resource_provider_, overlay.resource_id)); texture_id = pending_overlay_resources_.back()->texture_id(); } @@ -3580,7 +3581,7 @@ return; pending_overlay_resources_.push_back( - base::MakeUnique<cc::ResourceProvider::ScopedReadLockGL>( + base::MakeUnique<cc::DisplayResourceProvider::ScopedReadLockGL>( resource_provider_, resource->id())); unsigned texture_id = pending_overlay_resources_.back()->texture_id();
diff --git a/components/viz/service/display/gl_renderer.h b/components/viz/service/display/gl_renderer.h index 760554c..34e73cb 100644 --- a/components/viz/service/display/gl_renderer.h +++ b/components/viz/service/display/gl_renderer.h
@@ -280,7 +280,7 @@ int multiplier); using OverlayResourceLock = - std::unique_ptr<cc::ResourceProvider::ScopedReadLockGL>; + std::unique_ptr<cc::DisplayResourceProvider::ScopedReadLockGL>; using OverlayResourceLockList = std::vector<OverlayResourceLock>; // Resources that have been sent to the GPU process, but not yet swapped.
diff --git a/components/wallpaper/wallpaper_manager_base.cc b/components/wallpaper/wallpaper_manager_base.cc index 222bffd7..aed3b01 100644 --- a/components/wallpaper/wallpaper_manager_base.cc +++ b/components/wallpaper/wallpaper_manager_base.cc
@@ -565,8 +565,6 @@ // Falls back to custom wallpaper that uses AccountId as part of its file // path. // Note that account id is used instead of wallpaper_files_id here. - LOG(ERROR) << "Failed to load custom wallpaper from its original fallback " - "file path: " << valid_path.value(); const std::string& old_path = account_id.GetUserEmail(); // Migrated valid_path = GetCustomWallpaperPath(kOriginalWallpaperSubDir, WallpaperFilesId::FromString(old_path), @@ -574,13 +572,11 @@ } if (!base::PathExists(valid_path)) { - LOG(ERROR) << "Failed to load previously selected custom wallpaper. " - << "Fallback to default wallpaper. Expected wallpaper path: " - << wallpaper_path.value(); reply_task_runner->PostTask( FROM_HERE, - base::Bind(&WallpaperManagerBase::DoSetDefaultWallpaper, weak_ptr, - account_id, base::Passed(std::move(on_finish)))); + base::Bind(&WallpaperManagerBase::OnCustomWallpaperFileNotFound, + weak_ptr, account_id, wallpaper_path, update_wallpaper, + base::Passed(std::move(on_finish)))); } else { reply_task_runner->PostTask( FROM_HERE, base::Bind(&WallpaperManagerBase::StartLoad, weak_ptr, @@ -831,7 +827,7 @@ // In unexpected cases, revert to default wallpaper to fail safely. See // crosbug.com/38429. LOG(ERROR) << "Wallpaper reverts to default unexpected."; - DoSetDefaultWallpaper(account_id, std::move(on_finish)); + DoSetDefaultWallpaper(account_id, update_wallpaper, std::move(on_finish)); } } @@ -1010,4 +1006,25 @@ default_wallpaper_image_.reset(new user_manager::UserImage(image)); } +void WallpaperManagerBase::OnCustomWallpaperFileNotFound( + const AccountId& account_id, + const base::FilePath& expected_path, + bool update_wallpaper, + MovableOnDestroyCallbackHolder on_finish) { + user_manager::UserManager* user_manager = user_manager::UserManager::Get(); + const user_manager::User* user = user_manager->FindUser(account_id); + LOG(ERROR) << "Failed to load previously selected custom wallpaper. " + << "Fallback to default wallpaper. Expected wallpaper path: " + << expected_path.value() << ". Number of users on the device: " + << user_manager->GetUsers().size() + << ", Number of logged in users on the device: " + << user_manager->GetLoggedInUsers().size() + << ". Current user type: " << user->GetType() + << ", IsActiveUser=" << (user_manager->GetActiveUser() == user) + << ", IsPrimaryUser=" << (user_manager->GetPrimaryUser() == user) + << "."; + + DoSetDefaultWallpaper(account_id, update_wallpaper, std::move(on_finish)); +} + } // namespace wallpaper
diff --git a/components/wallpaper/wallpaper_manager_base.h b/components/wallpaper/wallpaper_manager_base.h index 711ae1f..0bcfbf0 100644 --- a/components/wallpaper/wallpaper_manager_base.h +++ b/components/wallpaper/wallpaper_manager_base.h
@@ -481,9 +481,11 @@ virtual void ScheduleSetUserWallpaper(const AccountId& account_id, bool delayed) = 0; - // Sets wallpaper to default. + // Sets wallpaper to default if |update_wallpaper| is true. Otherwise just + // load defaut wallpaper to cache. virtual void DoSetDefaultWallpaper( const AccountId& account_id, + bool update_wallpaper, MovableOnDestroyCallbackHolder on_finish) = 0; // Starts to load wallpaper at |wallpaper_path|. If |wallpaper_path| is @@ -533,18 +535,21 @@ virtual void SetDefaultWallpaperPathsFromCommandLine( base::CommandLine* command_line) = 0; - // Sets wallpaper to decoded default. + // Sets wallpaper to decoded default if |update_wallpaper| is true. virtual void OnDefaultWallpaperDecoded( const base::FilePath& path, const WallpaperLayout layout, + bool update_wallpaper, std::unique_ptr<user_manager::UserImage>* result, MovableOnDestroyCallbackHolder on_finish, std::unique_ptr<user_manager::UserImage> user_image) = 0; - // Start decoding given default wallpaper. + // Start decoding given default wallpaper and set it as wallpaper if + // |update_wallpaper| is true. virtual void StartLoadAndSetDefaultWallpaper( const base::FilePath& path, const WallpaperLayout layout, + bool update_wallpaper, MovableOnDestroyCallbackHolder on_finish, std::unique_ptr<user_manager::UserImage>* result_out) = 0; @@ -557,6 +562,12 @@ // Init default_wallpaper_image_ with 1x1 image of default color. virtual void CreateSolidDefaultWallpaper(); + // Callback function for WallpaperManagerBase::GetCustomWallpaperInternal(). + void OnCustomWallpaperFileNotFound(const AccountId& account_id, + const base::FilePath& expected_path, + bool update_wallpaper, + MovableOnDestroyCallbackHolder on_finish); + // The number of loaded wallpapers. int loaded_wallpapers_for_test_;
diff --git a/components/web_modal/web_contents_modal_dialog_manager.cc b/components/web_modal/web_contents_modal_dialog_manager.cc index 1128645..fe75ede 100644 --- a/components/web_modal/web_contents_modal_dialog_manager.cc +++ b/components/web_modal/web_contents_modal_dialog_manager.cc
@@ -4,6 +4,7 @@ #include "components/web_modal/web_contents_modal_dialog_manager.h" +#include <algorithm> #include <utility> #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" @@ -27,10 +28,10 @@ WebContentsModalDialogManagerDelegate* d) { delegate_ = d; - for (WebContentsModalDialogList::iterator it = child_dialogs_.begin(); - it != child_dialogs_.end(); it++) { - // Delegate can be NULL on Views/Win32 during tab drag. - (*it)->manager->HostChanged(d ? d->GetWebContentsModalDialogHost() : NULL); + for (const auto& dialog : child_dialogs_) { + // Delegate can be null on Views/Win32 during tab drag. + dialog.manager->HostChanged(d ? d->GetWebContentsModalDialogHost() + : nullptr); } } @@ -40,12 +41,12 @@ std::unique_ptr<SingleWebContentsDialogManager> manager) { if (delegate_) manager->HostChanged(delegate_->GetWebContentsModalDialogHost()); - child_dialogs_.push_back(new DialogState(dialog, std::move(manager))); + child_dialogs_.emplace_back(dialog, std::move(manager)); if (child_dialogs_.size() == 1) { BlockWebContentsInteraction(true); if (delegate_ && delegate_->IsWebContentsVisible(web_contents())) - child_dialogs_.back()->manager->Show(); + child_dialogs_.back().manager->Show(); } } @@ -55,7 +56,7 @@ void WebContentsModalDialogManager::FocusTopmostDialog() const { DCHECK(!child_dialogs_.empty()); - child_dialogs_.front()->manager->Focus(); + child_dialogs_.front().manager->Focus(); } content::WebContents* WebContentsModalDialogManager::GetWebContents() const { @@ -63,7 +64,11 @@ } void WebContentsModalDialogManager::WillClose(gfx::NativeWindow dialog) { - WebContentsModalDialogList::iterator dlg = FindDialogState(dialog); + WebContentsModalDialogList::iterator dlg = + std::find_if(child_dialogs_.begin(), child_dialogs_.end(), + [dialog](const DialogState& child_dialog) { + return child_dialog.dialog == dialog; + }); // The Views tab contents modal dialog calls WillClose twice. Ignore the // second invocation. @@ -71,11 +76,10 @@ return; bool removed_topmost_dialog = dlg == child_dialogs_.begin(); - std::unique_ptr<DialogState> deleter(*dlg); child_dialogs_.erase(dlg); if (!child_dialogs_.empty() && removed_topmost_dialog && !closing_all_dialogs_) { - child_dialogs_.front()->manager->Show(); + child_dialogs_.front().manager->Show(); } BlockWebContentsInteraction(!child_dialogs_.empty()); @@ -84,27 +88,18 @@ WebContentsModalDialogManager::WebContentsModalDialogManager( content::WebContents* web_contents) : content::WebContentsObserver(web_contents), - delegate_(NULL), - closing_all_dialogs_(false) { -} + delegate_(nullptr), + closing_all_dialogs_(false) {} WebContentsModalDialogManager::DialogState::DialogState( gfx::NativeWindow dialog, std::unique_ptr<SingleWebContentsDialogManager> mgr) - : dialog(dialog), manager(mgr.release()) {} + : dialog(dialog), manager(std::move(mgr)) {} -WebContentsModalDialogManager::DialogState::~DialogState() {} +WebContentsModalDialogManager::DialogState::DialogState(DialogState&& state) = + default; -WebContentsModalDialogManager::WebContentsModalDialogList::iterator -WebContentsModalDialogManager::FindDialogState(gfx::NativeWindow dialog) { - WebContentsModalDialogList::iterator i; - for (i = child_dialogs_.begin(); i != child_dialogs_.end(); ++i) { - if ((*i)->dialog == dialog) - break; - } - - return i; -} +WebContentsModalDialogManager::DialogState::~DialogState() = default; // TODO(gbillock): Move this to Views impl within Show()? It would // call WebContents* contents = native_delegate_->GetWebContents(); and @@ -117,7 +112,7 @@ return; } - // RenderViewHost may be NULL during shutdown. + // RenderViewHost may be null during shutdown. content::RenderViewHost* host = contents->GetRenderViewHost(); if (host) host->GetWidget()->SetIgnoreInputEvents(blocked); @@ -130,7 +125,7 @@ // Clear out any dialogs since we are leaving this page entirely. while (!child_dialogs_.empty()) { - child_dialogs_.front()->manager->Close(); + child_dialogs_.front().manager->Close(); } closing_all_dialogs_ = false; @@ -150,18 +145,18 @@ void WebContentsModalDialogManager::DidGetIgnoredUIEvent() { if (!child_dialogs_.empty()) { - child_dialogs_.front()->manager->Focus(); + child_dialogs_.front().manager->Focus(); } } void WebContentsModalDialogManager::WasShown() { if (!child_dialogs_.empty()) - child_dialogs_.front()->manager->Show(); + child_dialogs_.front().manager->Show(); } void WebContentsModalDialogManager::WasHidden() { if (!child_dialogs_.empty()) - child_dialogs_.front()->manager->Hide(); + child_dialogs_.front().manager->Hide(); } void WebContentsModalDialogManager::WebContentsDestroyed() {
diff --git a/components/web_modal/web_contents_modal_dialog_manager.h b/components/web_modal/web_contents_modal_dialog_manager.h index ce5df834..8c2de64 100644 --- a/components/web_modal/web_contents_modal_dialog_manager.h +++ b/components/web_modal/web_contents_modal_dialog_manager.h
@@ -79,17 +79,14 @@ struct DialogState { DialogState(gfx::NativeWindow dialog, std::unique_ptr<SingleWebContentsDialogManager> manager); + DialogState(DialogState&& state); ~DialogState(); gfx::NativeWindow dialog; std::unique_ptr<SingleWebContentsDialogManager> manager; }; - typedef base::circular_deque<DialogState*> WebContentsModalDialogList; - - // Utility function to get the dialog state for a dialog. - WebContentsModalDialogList::iterator FindDialogState( - gfx::NativeWindow dialog); + using WebContentsModalDialogList = base::circular_deque<DialogState>; // Blocks/unblocks interaction with renderer process. void BlockWebContentsInteraction(bool blocked);
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index d7ed629..da886ab 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -496,6 +496,10 @@ RunAriaTest(FILE_PATH_LITERAL("aria-grid.html")); } +IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, + AccessibilityAriaGridExtraWrapElems) { + RunAriaTest(FILE_PATH_LITERAL("aria-grid-extra-wrap-elems.html")); +} IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaGridCell) { RunAriaTest(FILE_PATH_LITERAL("aria-gridcell.html")); }
diff --git a/content/browser/android/overscroll_controller_android.cc b/content/browser/android/overscroll_controller_android.cc index bff182d6..a0885e4 100644 --- a/content/browser/android/overscroll_controller_android.cc +++ b/content/browser/android/overscroll_controller_android.cc
@@ -96,6 +96,30 @@ } // namespace +// static +std::unique_ptr<OverscrollControllerAndroid> +OverscrollControllerAndroid::CreateForTests( + ui::WindowAndroidCompositor* compositor, + float dpi_scale, + std::unique_ptr<ui::OverscrollGlow> glow_effect, + std::unique_ptr<ui::OverscrollRefresh> refresh_effect) { + return std::unique_ptr<OverscrollControllerAndroid>( + new OverscrollControllerAndroid(compositor, dpi_scale, + std::move(glow_effect), + std::move(refresh_effect))); +} + +OverscrollControllerAndroid::OverscrollControllerAndroid( + ui::WindowAndroidCompositor* compositor, + float dpi_scale, + std::unique_ptr<ui::OverscrollGlow> glow_effect, + std::unique_ptr<ui::OverscrollRefresh> refresh_effect) + : compositor_(compositor), + dpi_scale_(dpi_scale), + enabled_(true), + glow_effect_(std::move(glow_effect)), + refresh_effect_(std::move(refresh_effect)) {} + OverscrollControllerAndroid::OverscrollControllerAndroid( ui::OverscrollRefreshHandler* overscroll_refresh_handler, ui::WindowAndroidCompositor* compositor, @@ -190,10 +214,10 @@ refresh_effect_) { // The effect should only be allowed if both the causal touch events go // unconsumed and the generated scroll events go unconsumed. - bool consumed = - ack_result == INPUT_EVENT_ACK_STATE_CONSUMED || - event.data.scroll_update.previous_update_in_sequence_prevented; - refresh_effect_->OnScrollUpdateAck(consumed); + if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED || + event.data.scroll_update.previous_update_in_sequence_prevented) { + refresh_effect_->Reset(); + } } } @@ -202,25 +226,54 @@ if (!enabled_) return; - if (refresh_effect_ && (refresh_effect_->IsActive() || - refresh_effect_->IsAwaitingScrollUpdateAck())) { - // An active (or potentially active) refresh effect should always pre-empt - // the passive glow effect. - return; + if (refresh_effect_) { + if (params.scroll_boundary_behavior.y != + cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeAuto) + refresh_effect_->Reset(); + else + refresh_effect_->OnOverscrolled(); + + if (refresh_effect_->IsActive() || + refresh_effect_->IsAwaitingScrollUpdateAck()) { + // An active (or potentially active) refresh effect should always pre-empt + // the passive glow effect. + return; + } } // When use-zoom-for-dsf is enabled, each value of params was already scaled // by the device scale factor. float scale_factor = IsUseZoomForDSFEnabled() ? 1.f : dpi_scale_; - if (glow_effect_ && - glow_effect_->OnOverscrolled( - base::TimeTicks::Now(), - gfx::ScaleVector2d(params.accumulated_overscroll, scale_factor), - gfx::ScaleVector2d(params.latest_overscroll_delta, scale_factor), - gfx::ScaleVector2d(params.current_fling_velocity, scale_factor), - gfx::ScaleVector2d( - params.causal_event_viewport_point.OffsetFromOrigin(), - scale_factor))) { + gfx::Vector2dF accumulated_overscroll = + gfx::ScaleVector2d(params.accumulated_overscroll, scale_factor); + gfx::Vector2dF latest_overscroll_delta = + gfx::ScaleVector2d(params.latest_overscroll_delta, scale_factor); + gfx::Vector2dF current_fling_velocity = + gfx::ScaleVector2d(params.current_fling_velocity, scale_factor); + gfx::Vector2dF overscroll_location = gfx::ScaleVector2d( + params.causal_event_viewport_point.OffsetFromOrigin(), scale_factor); + + if (params.scroll_boundary_behavior.x == + cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeNone) { + accumulated_overscroll.set_x(0); + latest_overscroll_delta.set_x(0); + current_fling_velocity.set_x(0); + } + + if (params.scroll_boundary_behavior.y == + cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeNone) { + accumulated_overscroll.set_y(0); + latest_overscroll_delta.set_y(0); + current_fling_velocity.set_y(0); + } + + if (glow_effect_ && glow_effect_->OnOverscrolled( + base::TimeTicks::Now(), accumulated_overscroll, + latest_overscroll_delta, current_fling_velocity, + overscroll_location)) { SetNeedsAnimate(); } }
diff --git a/content/browser/android/overscroll_controller_android.h b/content/browser/android/overscroll_controller_android.h index f049bdc..b905156 100644 --- a/content/browser/android/overscroll_controller_android.h +++ b/content/browser/android/overscroll_controller_android.h
@@ -10,6 +10,7 @@ #include "base/android/scoped_java_ref.h" #include "base/macros.h" #include "base/time/time.h" +#include "content/common/content_export.h" #include "content/common/input/input_event_ack_state.h" #include "ui/android/overscroll_glow.h" #include "ui/android/overscroll_refresh.h" @@ -34,12 +35,20 @@ // Glue class for handling all inputs into Android-specific overscroll effects, // both the passive overscroll glow and the active overscroll pull-to-refresh. // Note that all input coordinates (both for events and overscroll) are in DIPs. -class OverscrollControllerAndroid : public ui::OverscrollGlowClient { +class CONTENT_EXPORT OverscrollControllerAndroid + : public ui::OverscrollGlowClient { public: OverscrollControllerAndroid( ui::OverscrollRefreshHandler* overscroll_refresh_handler, ui::WindowAndroidCompositor* compositor, float dpi_scale); + + static std::unique_ptr<OverscrollControllerAndroid> CreateForTests( + ui::WindowAndroidCompositor* compositor, + float dpi_scale, + std::unique_ptr<ui::OverscrollGlow> glow_effect, + std::unique_ptr<ui::OverscrollRefresh> refresh_effect); + ~OverscrollControllerAndroid() override; // Returns true if |event| is consumed by an overscroll effect, in which @@ -66,6 +75,13 @@ void Disable(); private: + // This method should only be called from CreateForTests. + OverscrollControllerAndroid( + ui::WindowAndroidCompositor* compositor, + float dpi_scale, + std::unique_ptr<ui::OverscrollGlow> glow_effect, + std::unique_ptr<ui::OverscrollRefresh> refresh_effect); + // OverscrollGlowClient implementation. std::unique_ptr<ui::EdgeEffectBase> CreateEdgeEffect() override;
diff --git a/content/browser/android/overscroll_controller_android_unittest.cc b/content/browser/android/overscroll_controller_android_unittest.cc new file mode 100644 index 0000000..a48d6e4 --- /dev/null +++ b/content/browser/android/overscroll_controller_android_unittest.cc
@@ -0,0 +1,183 @@ +// 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 "content/browser/android/overscroll_controller_android.h" +#include <memory> +#include "base/macros.h" +#include "base/memory/ptr_util.h" +#include "cc/layers/layer.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/android/overscroll_glow.h" +#include "ui/android/overscroll_refresh.h" +#include "ui/android/resources/resource_manager_impl.h" +#include "ui/android/window_android_compositor.h" +#include "ui/events/blink/did_overscroll_params.h" + +using ui::EdgeEffectBase; +using ui::ResourceManager; +using ui::OverscrollGlow; +using ui::OverscrollGlowClient; +using ui::OverscrollRefresh; +using ui::WindowAndroidCompositor; +using ::testing::_; +using ::testing::Return; + +namespace content { + +namespace { + +class MockCompositor : public WindowAndroidCompositor { + public: + void AttachLayerForReadback(scoped_refptr<cc::Layer>) override {} + void RequestCopyOfOutputOnRootLayer( + std::unique_ptr<viz::CopyOutputRequest>) override {} + void SetNeedsAnimate() override {} + MOCK_METHOD0(GetResourceManager, ResourceManager&()); + MOCK_METHOD0(GetFrameSinkId, viz::FrameSinkId()); + void AddChildFrameSink(const viz::FrameSinkId& frame_sink_id) override {} + void RemoveChildFrameSink(const viz::FrameSinkId& frame_sink_id) override {} +}; + +class MockGlowClient : public OverscrollGlowClient { + public: + MOCK_METHOD0(CreateEdgeEffect, std::unique_ptr<EdgeEffectBase>()); +}; + +class MockGlow : public OverscrollGlow { + public: + MockGlow() : OverscrollGlow(new MockGlowClient()) {} + MOCK_METHOD5(OnOverscrolled, + bool(base::TimeTicks, + gfx::Vector2dF, + gfx::Vector2dF, + gfx::Vector2dF, + gfx::Vector2dF)); +}; + +class MockRefresh : public OverscrollRefresh { + public: + MockRefresh() : OverscrollRefresh() {} + MOCK_METHOD0(OnOverscrolled, void()); + MOCK_METHOD0(Reset, void()); + MOCK_CONST_METHOD0(IsActive, bool()); + MOCK_CONST_METHOD0(IsAwaitingScrollUpdateAck, bool()); +}; + +class OverscrollControllerAndroidUnitTest : public testing::Test { + public: + OverscrollControllerAndroidUnitTest() { + std::unique_ptr<MockGlow> glow_ptr = base::MakeUnique<MockGlow>(); + std::unique_ptr<MockRefresh> refresh_ptr = base::MakeUnique<MockRefresh>(); + compositor_ = base::MakeUnique<MockCompositor>(); + glow_ = glow_ptr.get(); + refresh_ = refresh_ptr.get(); + controller_ = OverscrollControllerAndroid::CreateForTests( + compositor_.get(), 560, std::move(glow_ptr), std::move(refresh_ptr)); + } + + ui::DidOverscrollParams CreateVerticalOverscrollParams() { + ui::DidOverscrollParams params; + params.accumulated_overscroll = gfx::Vector2dF(0, 1); + params.latest_overscroll_delta = gfx::Vector2dF(0, 1); + params.current_fling_velocity = gfx::Vector2dF(0, 1); + params.causal_event_viewport_point = gfx::PointF(100, 100); + return params; + } + + protected: + MockGlow* glow_; + MockRefresh* refresh_; + std::unique_ptr<MockCompositor> compositor_; + std::unique_ptr<OverscrollControllerAndroid> controller_; +}; + +TEST_F(OverscrollControllerAndroidUnitTest, + ScrollBoundaryBehaviorAutoAllowsGlowAndNavigation) { + ui::DidOverscrollParams params = CreateVerticalOverscrollParams(); + params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior:: + ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeAuto; + + EXPECT_CALL(*refresh_, OnOverscrolled()); + EXPECT_CALL(*refresh_, IsActive()).WillOnce(Return(true)); + EXPECT_CALL(*refresh_, IsAwaitingScrollUpdateAck()).Times(0); + EXPECT_CALL(*glow_, OnOverscrolled(_, _, _, _, _)).Times(0); + + controller_->OnOverscrolled(params); + testing::Mock::VerifyAndClearExpectations(&refresh_); +} + +TEST_F(OverscrollControllerAndroidUnitTest, + ScrollBoundaryBehaviorContainPreventsNavigation) { + ui::DidOverscrollParams params = CreateVerticalOverscrollParams(); + params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior:: + ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeContain; + + EXPECT_CALL(*refresh_, OnOverscrolled()).Times(0); + EXPECT_CALL(*refresh_, Reset()); + EXPECT_CALL(*refresh_, IsActive()).WillOnce(Return(false)); + EXPECT_CALL(*refresh_, IsAwaitingScrollUpdateAck()).WillOnce(Return(false)); + EXPECT_CALL(*glow_, + OnOverscrolled(_, gfx::Vector2dF(0, 560), gfx::Vector2dF(0, 560), + gfx::Vector2dF(0, 560), _)); + + controller_->OnOverscrolled(params); + testing::Mock::VerifyAndClearExpectations(refresh_); + testing::Mock::VerifyAndClearExpectations(glow_); + + // Test that the "contain" set on x-axis would not affect navigation. + params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior:: + ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeAuto; + params.scroll_boundary_behavior.x = cc::ScrollBoundaryBehavior:: + ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeContain; + + EXPECT_CALL(*refresh_, OnOverscrolled()); + EXPECT_CALL(*refresh_, Reset()).Times(0); + EXPECT_CALL(*refresh_, IsActive()).WillOnce(Return(true)); + EXPECT_CALL(*refresh_, IsAwaitingScrollUpdateAck()).Times(0); + EXPECT_CALL(*glow_, OnOverscrolled(_, _, _, _, _)).Times(0); + + controller_->OnOverscrolled(params); + testing::Mock::VerifyAndClearExpectations(refresh_); + testing::Mock::VerifyAndClearExpectations(glow_); +} + +TEST_F(OverscrollControllerAndroidUnitTest, + ScrollBoundaryBehaviorNonePreventsNavigationAndGlow) { + ui::DidOverscrollParams params = CreateVerticalOverscrollParams(); + params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior:: + ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeNone; + + EXPECT_CALL(*refresh_, OnOverscrolled()).Times(0); + EXPECT_CALL(*refresh_, Reset()); + EXPECT_CALL(*refresh_, IsActive()).WillOnce(Return(false)); + EXPECT_CALL(*refresh_, IsAwaitingScrollUpdateAck()).WillOnce(Return(false)); + EXPECT_CALL(*glow_, OnOverscrolled(_, gfx::Vector2dF(), gfx::Vector2dF(), + gfx::Vector2dF(), _)); + + controller_->OnOverscrolled(params); + testing::Mock::VerifyAndClearExpectations(refresh_); + testing::Mock::VerifyAndClearExpectations(glow_); + + // Test that the "none" set on y-axis would not affect glow on x-axis. + params.accumulated_overscroll = gfx::Vector2dF(1, 1); + params.latest_overscroll_delta = gfx::Vector2dF(1, 1); + params.current_fling_velocity = gfx::Vector2dF(1, 1); + + EXPECT_CALL(*refresh_, OnOverscrolled()).Times(0); + EXPECT_CALL(*refresh_, Reset()); + EXPECT_CALL(*refresh_, IsActive()).WillOnce(Return(false)); + EXPECT_CALL(*refresh_, IsAwaitingScrollUpdateAck()).WillOnce(Return(false)); + EXPECT_CALL(*glow_, + OnOverscrolled(_, gfx::Vector2dF(560, 0), gfx::Vector2dF(560, 0), + gfx::Vector2dF(560, 0), _)); + + controller_->OnOverscrolled(params); + testing::Mock::VerifyAndClearExpectations(refresh_); + testing::Mock::VerifyAndClearExpectations(glow_); +} + +} // namespace + +} // namespace content \ No newline at end of file
diff --git a/content/browser/appcache/appcache_response_unittest.cc b/content/browser/appcache/appcache_response_unittest.cc index c8cdaa0..223b6c2 100644 --- a/content/browser/appcache/appcache_response_unittest.cc +++ b/content/browser/appcache/appcache_response_unittest.cc
@@ -139,12 +139,12 @@ test_finished_event_->Signal(); } - void PushNextTask(base::Closure task) { + void PushNextTask(base::OnceClosure task) { task_stack_.push( std::pair<base::OnceClosure, bool>(std::move(task), false)); } - void PushNextTaskAsImmediate(const base::Closure& task) { + void PushNextTaskAsImmediate(base::OnceClosure task) { task_stack_.push(std::pair<base::OnceClosure, bool>(std::move(task), true)); } @@ -181,8 +181,8 @@ IOBuffer* body, int body_len) { DCHECK(body); scoped_refptr<IOBuffer> body_ref(body); - PushNextTask(base::Bind(&AppCacheResponseTest::WriteResponseBody, - base::Unretained(this), body_ref, body_len)); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteResponseBody, + base::Unretained(this), body_ref, body_len)); WriteResponseHead(head); } @@ -329,10 +329,10 @@ service_->storage()->CreateResponseReader(GURL(), kNoSuchResponseId)); // Push tasks in reverse order - PushNextTask(base::Bind(&AppCacheResponseTest::ReadNonExistentData, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::ReadNonExistentInfo, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadNonExistentData, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadNonExistentInfo, + base::Unretained(this))); ScheduleNextTask(); } @@ -359,8 +359,9 @@ // LoadResponseInfo_Miss ---------------------------------------------------- void LoadResponseInfo_Miss() { - PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Miss_Verify, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheResponseTest::LoadResponseInfo_Miss_Verify, + base::Unretained(this))); service_->storage()->LoadResponseInfo(GURL(), kNoSuchResponseId, storage_delegate_.get()); } @@ -378,8 +379,9 @@ // a. headers // b. body // 2. Use LoadResponseInfo to read the response headers back out - PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Hit_Step2, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheResponseTest::LoadResponseInfo_Hit_Step2, + base::Unretained(this))); writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id(); WriteBasicResponse(); @@ -387,8 +389,9 @@ void LoadResponseInfo_Hit_Step2() { writer_.reset(); - PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Hit_Verify, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheResponseTest::LoadResponseInfo_Hit_Verify, + base::Unretained(this))); service_->storage()->LoadResponseInfo(GURL(), written_response_id_, storage_delegate_.get()); } @@ -418,26 +421,29 @@ // 7. Check metadata was deleted. // Push tasks in reverse order. - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, - base::Unretained(this), "")); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, - base::Unretained(this), "")); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, - base::Unretained(this), "Second")); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, - base::Unretained(this), "Second")); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, - base::Unretained(this), "Metadata First")); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, - base::Unretained(this), "Metadata First")); - PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_ResetWriter, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Metadata_VerifyMetadata, + base::Unretained(this), "")); + PushNextTask( + base::BindOnce(&AppCacheResponseTest::Metadata_LoadResponseInfo, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Metadata_WriteMetadata, + base::Unretained(this), "")); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Metadata_VerifyMetadata, + base::Unretained(this), "Second")); + PushNextTask( + base::BindOnce(&AppCacheResponseTest::Metadata_LoadResponseInfo, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Metadata_WriteMetadata, + base::Unretained(this), "Second")); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Metadata_VerifyMetadata, + base::Unretained(this), "Metadata First")); + PushNextTask( + base::BindOnce(&AppCacheResponseTest::Metadata_LoadResponseInfo, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Metadata_WriteMetadata, + base::Unretained(this), "Metadata First")); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Metadata_ResetWriter, + base::Unretained(this))); writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id(); WriteBasicResponse(); @@ -495,14 +501,15 @@ GetHttpResponseInfoSize(head) + kNumBlocks * kBlockSize; // Push tasks in reverse order. - PushNextTask(base::Bind(&AppCacheResponseTest::Verify_AmountWritten, - base::Unretained(this), expected_amount_written)); + PushNextTask(base::BindOnce(&AppCacheResponseTest::Verify_AmountWritten, + base::Unretained(this), + expected_amount_written)); for (int i = 0; i < kNumBlocks; ++i) { - PushNextTask(base::Bind(&AppCacheResponseTest::WriteOneBlock, - base::Unretained(this), kNumBlocks - i)); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteOneBlock, + base::Unretained(this), kNumBlocks - i)); } - PushNextTask(base::Bind(&AppCacheResponseTest::WriteResponseHead, - base::Unretained(this), head)); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteResponseHead, + base::Unretained(this), head)); writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id(); @@ -528,22 +535,23 @@ // 6. Attempt to read beyond EOF of a range. // Push tasks in reverse order - PushNextTask(base::Bind(&AppCacheResponseTest::ReadRangeFullyBeyondEOF, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::ReadRangePartiallyBeyondEOF, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::ReadPastEOF, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::ReadRange, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::ReadPastEOF, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::ReadAllAtOnce, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::ReadInBlocks, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::WriteOutBlocks, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadRangeFullyBeyondEOF, + base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheResponseTest::ReadRangePartiallyBeyondEOF, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadPastEOF, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadRange, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadPastEOF, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadAllAtOnce, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadInBlocks, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteOutBlocks, + base::Unretained(this))); // Get them going. ScheduleNextTask(); @@ -553,8 +561,8 @@ writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id(); for (int i = 0; i < kNumBlocks; ++i) { - PushNextTask(base::Bind(&AppCacheResponseTest::WriteOneBlock, - base::Unretained(this), kNumBlocks - i)); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteOneBlock, + base::Unretained(this), kNumBlocks - i)); } ScheduleNextTask(); } @@ -571,15 +579,15 @@ reader_.reset(service_->storage()->CreateResponseReader( GURL(), written_response_id_)); for (int i = 0; i < kNumBlocks; ++i) { - PushNextTask(base::Bind(&AppCacheResponseTest::ReadOneBlock, - base::Unretained(this), kNumBlocks - i)); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadOneBlock, + base::Unretained(this), kNumBlocks - i)); } ScheduleNextTask(); } void ReadOneBlock(int block_number) { - PushNextTask(base::Bind(&AppCacheResponseTest::VerifyOneBlock, - base::Unretained(this), block_number)); + PushNextTask(base::BindOnce(&AppCacheResponseTest::VerifyOneBlock, + base::Unretained(this), block_number)); ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); } @@ -589,8 +597,8 @@ } void ReadAllAtOnce() { - PushNextTask(base::Bind(&AppCacheResponseTest::VerifyAllAtOnce, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::VerifyAllAtOnce, + base::Unretained(this))); reader_.reset(service_->storage()->CreateResponseReader( GURL(), written_response_id_)); int big_size = kNumBlocks * kBlockSize; @@ -615,8 +623,8 @@ } void ReadRange() { - PushNextTask(base::Bind(&AppCacheResponseTest::VerifyRange, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::VerifyRange, + base::Unretained(this))); reader_.reset(service_->storage()->CreateResponseReader( GURL(), written_response_id_)); reader_->SetReadRange(kBlockSize, kBlockSize); @@ -629,8 +637,8 @@ } void ReadRangePartiallyBeyondEOF() { - PushNextTask(base::Bind(&AppCacheResponseTest::VerifyRangeBeyondEOF, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::VerifyRangeBeyondEOF, + base::Unretained(this))); reader_.reset(service_->storage()->CreateResponseReader( GURL(), written_response_id_)); reader_->SetReadRange(kBlockSize, kNumBlocks * kBlockSize); @@ -712,10 +720,10 @@ should_delete_writer_in_completion_callback_ = true; writer_deletion_count_down_ = kNumBlocks; - PushNextTask(base::Bind(&AppCacheResponseTest::ReadInBlocks, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::WriteOutBlocks, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadInBlocks, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteOutBlocks, + base::Unretained(this))); ScheduleNextTask(); } @@ -724,12 +732,12 @@ // 1. Write a few blocks normally. // 2. Start a write, delete with it pending. // 3. Start a read, delete with it pending. - PushNextTask(base::Bind(&AppCacheResponseTest::ReadThenDelete, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::WriteThenDelete, - base::Unretained(this))); - PushNextTask(base::Bind(&AppCacheResponseTest::WriteOutBlocks, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::ReadThenDelete, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteThenDelete, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheResponseTest::WriteOutBlocks, + base::Unretained(this))); ScheduleNextTask(); }
diff --git a/content/browser/appcache/appcache_storage_impl_unittest.cc b/content/browser/appcache/appcache_storage_impl_unittest.cc index e9bc382..dd59d62 100644 --- a/content/browser/appcache/appcache_storage_impl_unittest.cc +++ b/content/browser/appcache/appcache_storage_impl_unittest.cc
@@ -456,7 +456,9 @@ test_finished_event_->Signal(); } - void PushNextTask(base::Closure task) { task_stack_.push(std::move(task)); } + void PushNextTask(base::OnceClosure task) { + task_stack_.push(std::move(task)); + } void ScheduleNextTask() { DCHECK(io_thread->task_runner()->BelongsToCurrentThread()); @@ -494,8 +496,8 @@ void LoadCache_Miss() { // Attempt to load a cache that doesn't exist. Should // complete asynchronously. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_LoadCache_Miss, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheStorageImplTest::Verify_LoadCache_Miss, + base::Unretained(this))); storage()->LoadCache(111, delegate()); EXPECT_NE(111, delegate()->loaded_cache_id_); @@ -545,8 +547,8 @@ void CreateGroupInPopulatedOrigin() { // Attempt to load a group that doesn't exist, one should // be created for us, but not stored. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_CreateGroup, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheStorageImplTest::Verify_CreateGroup, + base::Unretained(this))); // Since the origin has groups, storage class will have to // consult the database and completion will be async. @@ -579,8 +581,9 @@ // Attempt to load a cache that is not currently in use // and does require loading from disk. This // load should complete asynchronously. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_LoadCache_Far_Hit, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheStorageImplTest::Verify_LoadCache_Far_Hit, + base::Unretained(this))); // Setup some preconditions. Create a group and newest cache that // appear to be "stored" and "not currently in use". @@ -610,8 +613,9 @@ EXPECT_FALSE(delegate()->loaded_group_.get()); // Conduct the group load test, also complete asynchronously. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_LoadGroup_Far_Hit, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheStorageImplTest::Verify_LoadGroup_Far_Hit, + base::Unretained(this))); storage()->LoadOrCreateGroup(kManifestUrl, delegate()); } @@ -631,8 +635,8 @@ void StoreNewGroup() { // Store a group and its newest cache. Should complete asynchronously. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_StoreNewGroup, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheStorageImplTest::Verify_StoreNewGroup, + base::Unretained(this))); // Setup some preconditions. Create a group and newest cache that // appear to be "unstored". @@ -677,8 +681,9 @@ void StoreExistingGroup() { // Store a group and its newest cache. Should complete asynchronously. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_StoreExistingGroup, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheStorageImplTest::Verify_StoreExistingGroup, + base::Unretained(this))); // Setup some preconditions. Create a group and old complete cache // that appear to be "stored" @@ -737,7 +742,7 @@ cache_->AddEntry(kEntryUrl, AppCacheEntry(AppCacheEntry::MASTER, 1, 100)); cache_->set_update_time(now); - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_StoreExistingGroupExistingCache, base::Unretained(this), now)); @@ -784,8 +789,8 @@ void FailStoreGroup() { // Store a group and its newest cache. Should complete asynchronously. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_FailStoreGroup, - base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheStorageImplTest::Verify_FailStoreGroup, + base::Unretained(this))); // Setup some preconditions. Create a group and newest cache that // appear to be "unstored" and big enough to exceed the 5M limit. @@ -823,8 +828,9 @@ void MakeGroupObsolete() { // Make a group obsolete, should complete asynchronously. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_MakeGroupObsolete, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheStorageImplTest::Verify_MakeGroupObsolete, + base::Unretained(this))); // Setup some preconditions. Create a group and newest cache that // appears to be "stored" and "currently in use". @@ -925,9 +931,9 @@ // MarkEntryAsForeignWithLoadInProgress ------------------------------- void MarkEntryAsForeignWithLoadInProgress() { - PushNextTask(base::Bind( - &AppCacheStorageImplTest::Verify_MarkEntryAsForeignWithLoadInProgress, - base::Unretained(this))); + PushNextTask(base::BindOnce( + &AppCacheStorageImplTest::Verify_MarkEntryAsForeignWithLoadInProgress, + base::Unretained(this))); // Setup some preconditions. Create a cache with an entry // in storage, but not in the working set. @@ -970,8 +976,9 @@ // FindNoMainResponse ------------------------------- void FindNoMainResponse() { - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_FindNoMainResponse, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheStorageImplTest::Verify_FindNoMainResponse, + base::Unretained(this))); // Conduct the test. storage()->FindResponseForMainRequest(kEntryUrl, GURL(), delegate()); @@ -1002,9 +1009,9 @@ } void BasicFindMainResponse(bool drop_from_working_set) { - PushNextTask(base::Bind( - &AppCacheStorageImplTest::Verify_BasicFindMainResponse, - base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheStorageImplTest::Verify_BasicFindMainResponse, + base::Unretained(this))); // Setup some preconditions. Create a complete cache with an entry // in storage. @@ -1052,7 +1059,7 @@ } void BasicFindMainFallbackResponse(bool drop_from_working_set) { - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_BasicFindMainFallbackResponse, base::Unretained(this))); @@ -1130,7 +1137,7 @@ } void BasicFindMainInterceptResponse(bool drop_from_working_set) { - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_BasicFindMainInterceptResponse, base::Unretained(this))); @@ -1242,7 +1249,7 @@ } // First test something that does not match the pattern. - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindInterceptPatternMatchNegative, base::Unretained(this))); storage()->FindResponseForMainRequest( @@ -1262,7 +1269,7 @@ EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); // Then test something that matches. - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindInterceptPatternMatchPositive, base::Unretained(this))); storage()->FindResponseForMainRequest( @@ -1329,7 +1336,7 @@ } // First test something that does not match the pattern. - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindFallbackPatternMatchNegative, base::Unretained(this))); storage()->FindResponseForMainRequest( @@ -1349,7 +1356,7 @@ EXPECT_EQ(0, delegate()->found_fallback_entry_.types()); // Then test something that matches. - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindFallbackPatternMatchPositive, base::Unretained(this))); storage()->FindResponseForMainRequest( @@ -1371,7 +1378,7 @@ // FindMainResponseWithMultipleHits ------------------------------- void FindMainResponseWithMultipleHits() { - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits, base::Unretained(this))); @@ -1445,7 +1452,7 @@ // Conduct another test preferring kManifestUrl delegate_.reset(new MockStorageDelegate(this)); - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits2, base::Unretained(this))); storage()->FindResponseForMainRequest(kEntryUrl, kManifestUrl, delegate()); @@ -1463,7 +1470,7 @@ // Conduct the another test preferring kManifestUrl2 delegate_.reset(new MockStorageDelegate(this)); - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits3, base::Unretained(this))); storage()->FindResponseForMainRequest(kEntryUrl, kManifestUrl2, delegate()); @@ -1481,7 +1488,7 @@ // Conduct another test with no preferred manifest that hits the fallback. delegate_.reset(new MockStorageDelegate(this)); - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits4, base::Unretained(this))); storage()->FindResponseForMainRequest( @@ -1502,7 +1509,7 @@ // Conduct another test preferring kManifestUrl2 that hits the fallback. delegate_.reset(new MockStorageDelegate(this)); - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_FindMainResponseWithMultipleHits5, base::Unretained(this))); storage()->FindResponseForMainRequest( @@ -1579,8 +1586,9 @@ } // We should not find anything for the foreign entry. - PushNextTask(base::Bind(&AppCacheStorageImplTest::Verify_ExclusionNotFound, - base::Unretained(this), kEntryUrl, 1)); + PushNextTask( + base::BindOnce(&AppCacheStorageImplTest::Verify_ExclusionNotFound, + base::Unretained(this), kEntryUrl, 1)); storage()->FindResponseForMainRequest(kEntryUrl, GURL(), delegate()); } @@ -1608,7 +1616,7 @@ if (phase == 2) { // We should not find anything for the online namespace nested within // the fallback namespace. - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheStorageImplTest::Verify_ExclusionNotFound, base::Unretained(this), kOnlineNamespaceWithinFallback, 3)); storage()->FindResponseForMainRequest( @@ -1797,10 +1805,8 @@ request_->Start(); } - PushNextTask(base::Bind( - &AppCacheStorageImplTest::Verify_Reinitialized, - base::Unretained(this), - test_case)); + PushNextTask(base::BindOnce(&AppCacheStorageImplTest::Verify_Reinitialized, + base::Unretained(this), test_case)); } void Verify_Reinitialized(ReinitTestCase test_case) {
diff --git a/content/browser/appcache/appcache_url_request_job_unittest.cc b/content/browser/appcache/appcache_url_request_job_unittest.cc index 80cf2f15..9afca067 100644 --- a/content/browser/appcache/appcache_url_request_job_unittest.cc +++ b/content/browser/appcache/appcache_url_request_job_unittest.cc
@@ -318,7 +318,7 @@ std::pair<base::OnceClosure, bool>(std::move(task), false)); } - void PushNextTaskAsImmediate(base::Closure task) { + void PushNextTaskAsImmediate(base::OnceClosure task) { task_stack_.push(std::pair<base::OnceClosure, bool>(std::move(task), true)); } @@ -350,8 +350,8 @@ IOBuffer* body, int body_len) { DCHECK(body); scoped_refptr<IOBuffer> body_ref(body); - PushNextTask(base::Bind(&AppCacheURLRequestJobTest::WriteResponseBody, - base::Unretained(this), body_ref, body_len)); + PushNextTask(base::BindOnce(&AppCacheURLRequestJobTest::WriteResponseBody, + base::Unretained(this), body_ref, body_len)); WriteResponseHead(head); } @@ -614,7 +614,7 @@ // 2. Use net::URLRequest to retrieve it. // 3. Verify we received what we expected to receive. - PushNextTask(base::Bind( + PushNextTask(base::BindOnce( &AppCacheURLRequestJobTest::VerifyDeliverSmallAppCachedResponse, base::Unretained(this))); PushNextTask( @@ -687,12 +687,12 @@ // 2. Use net::URLRequest to retrieve it. // 3. Verify we received what we expected to receive. - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::VerifyDeliverLargeAppCachedResponse, - base::Unretained(this))); - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::RequestAppCachedResource, - base::Unretained(this), true)); + PushNextTask(base::BindOnce( + &AppCacheURLRequestJobTest::VerifyDeliverLargeAppCachedResponse, + base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheURLRequestJobTest::RequestAppCachedResource, + base::Unretained(this), true)); writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id(); @@ -732,11 +732,11 @@ // 1. Write a small response to response storage. // 2. Use net::URLRequest to retrieve it a subset using a range request // 3. Verify we received what we expected to receive. - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::VerifyDeliverPartialResponse, - base::Unretained(this))); - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::MakeRangeRequest, base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheURLRequestJobTest::VerifyDeliverPartialResponse, + base::Unretained(this))); + PushNextTask(base::BindOnce(&AppCacheURLRequestJobTest::MakeRangeRequest, + base::Unretained(this))); writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id(); WriteBasicResponse(); @@ -798,11 +798,11 @@ // 2. Use net::URLRequest to retrieve it. // 3. Cancel the request after data starts coming in. - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::VerifyCancel, base::Unretained(this))); - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::RequestAppCachedResource, - base::Unretained(this), true)); + PushNextTask(base::BindOnce(&AppCacheURLRequestJobTest::VerifyCancel, + base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheURLRequestJobTest::RequestAppCachedResource, + base::Unretained(this), true)); writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id(); @@ -826,11 +826,11 @@ // 2. Use net::URLRequest to retrieve it. // 3. Cancel the request after data starts coming in. - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::VerifyCancel, base::Unretained(this))); - PushNextTask(base::Bind( - &AppCacheURLRequestJobTest::RequestAppCachedResource, - base::Unretained(this), true)); + PushNextTask(base::BindOnce(&AppCacheURLRequestJobTest::VerifyCancel, + base::Unretained(this))); + PushNextTask( + base::BindOnce(&AppCacheURLRequestJobTest::RequestAppCachedResource, + base::Unretained(this), true)); writer_.reset(service_->storage()->CreateResponseWriter(GURL())); written_response_id_ = writer_->response_id();
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc index d2f4f26..e1eabbf 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc
@@ -1555,7 +1555,8 @@ device_monitor_linux_.reset( new media::DeviceMonitorLinux(io_thread_->task_runner())); #elif defined(OS_MACOSX) - device_monitor_mac_.reset(new media::DeviceMonitorMac()); + device_monitor_mac_.reset( + new media::DeviceMonitorMac(audio_manager_->GetTaskRunner())); #endif // RDH needs the IO thread to be created @@ -1583,7 +1584,8 @@ { TRACE_EVENT0("startup", "BrowserMainLoop::BrowserThreadsStarted:InitMediaStreamManager"); - media_stream_manager_.reset(new MediaStreamManager(audio_system_.get())); + media_stream_manager_.reset(new MediaStreamManager( + audio_system_.get(), audio_manager_->GetTaskRunner())); } {
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc index 279dcd52..ccc28ea8 100644 --- a/content/browser/frame_host/navigation_request.cc +++ b/content/browser/frame_host/navigation_request.cc
@@ -47,6 +47,7 @@ #include "content/public/common/resource_request_body.h" #include "content/public/common/resource_response.h" #include "content/public/common/url_constants.h" +#include "content/public/common/url_utils.h" #include "content/public/common/web_preferences.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h" @@ -448,7 +449,7 @@ CreateNavigationHandle(); - if (ShouldMakeNetworkRequestForURL(common_params_.url) && + if (IsURLHandledByNetworkStack(common_params_.url) && !navigation_handle_->IsSameDocument()) { // It's safe to use base::Unretained because this NavigationRequest owns // the NavigationHandle where the callback will be stored. @@ -997,7 +998,7 @@ } void NavigationRequest::CommitNavigation() { - DCHECK(response_ || !ShouldMakeNetworkRequestForURL(common_params_.url) || + DCHECK(response_ || !IsURLHandledByNetworkStack(common_params_.url) || navigation_handle_->IsSameDocument()); DCHECK(!common_params_.url.SchemeIs(url::kJavaScriptScheme));
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index e380eb1..7e577c8 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -3285,7 +3285,7 @@ DCHECK( (response && (body.get() || handle.is_valid())) || common_params.url.SchemeIs(url::kDataScheme) || - !ShouldMakeNetworkRequestForURL(common_params.url) || + !IsURLHandledByNetworkStack(common_params.url) || FrameMsg_Navigate_Type::IsSameDocument(common_params.navigation_type) || IsRendererDebugURL(common_params.url)); UpdatePermissionsForNavigation(common_params, request_params); @@ -3326,7 +3326,7 @@ common_params, request_params)); // If a network request was made, update the Previews state. - if (ShouldMakeNetworkRequestForURL(common_params.url) && + if (IsURLHandledByNetworkStack(common_params.url) && !FrameMsg_Navigate_Type::IsSameDocument(common_params.navigation_type)) { last_navigation_previews_state_ = common_params.previews_state; }
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index b390df8e..799d292 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -49,6 +49,7 @@ #include "content/public/common/content_switches.h" #include "content/public/common/referrer.h" #include "content/public/common/url_constants.h" +#include "content/public/common/url_utils.h" namespace content { @@ -1923,7 +1924,7 @@ // go cross-process. Check it first. bool can_renderer_initiate_transfer = render_frame_host_->IsRenderFrameLive() && - ShouldMakeNetworkRequestForURL(request.common_params().url) && + IsURLHandledByNetworkStack(request.common_params().url) && IsRendererTransferNeededForNavigation(render_frame_host_.get(), request.common_params().url);
diff --git a/content/browser/frame_host/render_widget_host_view_guest_unittest.cc b/content/browser/frame_host/render_widget_host_view_guest_unittest.cc index 921518cc..32d4746 100644 --- a/content/browser/frame_host/render_widget_host_view_guest_unittest.cc +++ b/content/browser/frame_host/render_widget_host_view_guest_unittest.cc
@@ -19,7 +19,6 @@ #include "content/browser/browser_plugin/browser_plugin_guest.h" #include "content/browser/compositor/test/no_transport_image_transport_factory.h" #include "content/browser/gpu/compositor_util.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/common/view_messages.h" @@ -29,6 +28,7 @@ #include "content/public/test/test_browser_context.h" #include "content/test/dummy_render_widget_host_delegate.h" #include "content/test/fake_renderer_compositor_frame_sink.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_render_view_host.h" #include "content/test/test_web_contents.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc index 4c9caf31..4388cef 100644 --- a/content/browser/gpu/gpu_data_manager_impl_private.cc +++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -34,7 +34,7 @@ #include "content/public/common/web_preferences.h" #include "gpu/command_buffer/service/gpu_preferences.h" #include "gpu/command_buffer/service/gpu_switches.h" -#include "gpu/config/gpu_driver_bug_list_autogen.h" +#include "gpu/config/gpu_driver_bug_list.h" #include "gpu/config/gpu_driver_bug_workaround_type.h" #include "gpu/config/gpu_finch_features.h" #include "gpu/config/gpu_info_collector.h" @@ -220,20 +220,16 @@ } } -void UpdateDriverBugListStats(const gpu::GpuDriverBugList* bug_list, - const gpu::GpuFeatureInfo& gpu_feature_info) { - if (!bug_list || bug_list->max_entry_id() == 0) { - // Driver bug list was not loaded. No need to go further. - return; - } - +void UpdateDriverBugListStats(const gpu::GpuFeatureInfo& gpu_feature_info) { // Use entry 0 to capture the total number of times that data was recorded // in this histogram in order to have a convenient denominator to compute // driver bug list percentages for the rest of the entries. UMA_HISTOGRAM_SPARSE_SLOWLY("GPU.DriverBugTestResultsPerEntry", 0); - if (gpu_feature_info.enabled_gpu_driver_bug_workarounds.size() > 0) { - DCHECK_GT(gpu_feature_info.applied_gpu_driver_bug_list_entries.size(), 0u); + if (!gpu_feature_info.applied_gpu_driver_bug_list_entries.empty()) { + std::unique_ptr<gpu::GpuDriverBugList> bug_list( + gpu::GpuDriverBugList::Create()); + DCHECK(bug_list.get() && bug_list->max_entry_id() > 0); std::vector<uint32_t> entry_ids = bug_list->GetEntryIDsFromIndices( gpu_feature_info.applied_gpu_driver_bug_list_entries); DCHECK_EQ(gpu_feature_info.applied_gpu_driver_bug_list_entries.size(), @@ -331,8 +327,7 @@ // Prevent all further initialization. finalized_ = true; - gpu::GpuControlListData gpu_driver_bug_list_data; - InitializeImpl(gpu_blacklist_data, gpu_driver_bug_list_data, gpu_info); + InitializeImpl(gpu_blacklist_data, gpu_info); } bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { @@ -361,7 +356,16 @@ } bool GpuDataManagerImplPrivate::IsDriverBugWorkaroundActive(int feature) const { - return (gpu_driver_bugs_.count(feature) == 1); + switch (feature) { + // TODO(zmo): Remove these use cases and obsolete this function. + case gpu::DISABLE_OVERLAY_CA_LAYERS: + case gpu::DONT_DISABLE_WEBGL_WHEN_COMPOSITOR_CONTEXT_LOST: + case gpu::WAKE_UP_GPU_BEFORE_DRAWING: + return gpu_feature_info_.IsWorkaroundEnabled(feature); + default: + NOTREACHED(); + return false; + } } size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const { @@ -650,14 +654,7 @@ gpu::kSoftwareRenderingListEntryCount, gpu::kSoftwareRenderingListEntries}; } - gpu::GpuControlListData gpu_driver_bug_list_data; - if (!force_software_gl && - !command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { - gpu_driver_bug_list_data = {gpu::kGpuDriverBugListVersion, - gpu::kGpuDriverBugListEntryCount, - gpu::kGpuDriverBugListEntries}; - } - InitializeImpl(gpu_blacklist_data, gpu_driver_bug_list_data, gpu_info); + InitializeImpl(gpu_blacklist_data, gpu_info); if (in_process_gpu_) { command_line->AppendSwitch(switches::kDisableGpuWatchdog); @@ -685,13 +682,6 @@ UpdateBlacklistedFeatures(features); } - if (gpu_driver_bug_list_) { - gpu_driver_bugs_ = gpu_driver_bug_list_->MakeDecision( - gpu::GpuControlList::kOsAny, os_version, gpu_info_); - } - gpu::GpuDriverBugList::AppendWorkaroundsFromCommandLine( - &gpu_driver_bugs_, *base::CommandLine::ForCurrentProcess()); - // We have to update GpuFeatureType before notify all the observers. NotifyGpuInfoUpdate(); } @@ -717,7 +707,7 @@ const gpu::GpuFeatureInfo& gpu_feature_info) { if (!use_swiftshader_) { gpu_feature_info_ = gpu_feature_info; - UpdateDriverBugListStats(gpu_driver_bug_list_.get(), gpu_feature_info); + UpdateDriverBugListStats(gpu_feature_info); NotifyGpuInfoUpdate(); } } @@ -745,16 +735,6 @@ std::string use_gl = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( switches::kUseGL); - if (gpu_driver_bugs_.find(gpu::DISABLE_D3D11) != gpu_driver_bugs_.end()) - command_line->AppendSwitch(switches::kDisableD3D11); - if (gpu_driver_bugs_.find(gpu::DISABLE_ES3_GL_CONTEXT) != - gpu_driver_bugs_.end()) { - command_line->AppendSwitch(switches::kDisableES3GLContext); - } - if (gpu_driver_bugs_.find(gpu::DISABLE_DIRECT_COMPOSITION) != - gpu_driver_bugs_.end()) { - command_line->AppendSwitch(switches::kDisableDirectComposition); - } if (use_swiftshader_) { command_line->AppendSwitchASCII( switches::kUseGL, gl::kGLImplementationSwiftShaderForWebGLName); @@ -774,11 +754,6 @@ command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode); } - if (gpu_driver_bugs_.find(gpu::CREATE_DEFAULT_GL_CONTEXT) != - gpu_driver_bugs_.end()) { - command_line->AppendSwitch(switches::kCreateDefaultGLContext); - } - #if defined(USE_OZONE) if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableDrmAtomic)) { @@ -834,6 +809,10 @@ switches::kGpuActiveDeviceID, base::StringPrintf("0x%04x", maybe_active_gpu_device.device_id)); } + + if (gpu_info_.amd_switchable) { + command_line->AppendSwitch(switches::kAMDSwitchable); + } } void GpuDataManagerImplPrivate::UpdateRendererWebPrefs( @@ -922,8 +901,12 @@ } std::string GpuDataManagerImplPrivate::GetDriverBugListVersion() const { - if (gpu_driver_bug_list_) - return gpu_driver_bug_list_->version(); + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableGpuDriverBugWorkarounds)) { + std::unique_ptr<gpu::GpuDriverBugList> bug_list( + gpu::GpuDriverBugList::Create()); + return bug_list->version(); + } return "0"; } @@ -931,21 +914,20 @@ base::ListValue* reasons) const { if (gpu_blacklist_) gpu_blacklist_->GetReasons(reasons, "disabledFeatures"); - if (gpu_driver_bug_list_) { - gpu_driver_bug_list_->GetReasons( - reasons, "workarounds", - gpu_feature_info_.applied_gpu_driver_bug_list_entries); + if (!gpu_feature_info_.applied_gpu_driver_bug_list_entries.empty()) { + std::unique_ptr<gpu::GpuDriverBugList> bug_list( + gpu::GpuDriverBugList::Create()); + bug_list->GetReasons(reasons, "workarounds", + gpu_feature_info_.applied_gpu_driver_bug_list_entries); } } std::vector<std::string> GpuDataManagerImplPrivate::GetDriverBugWorkarounds() const { std::vector<std::string> workarounds; - for (std::set<int>::const_iterator it = gpu_driver_bugs_.begin(); - it != gpu_driver_bugs_.end(); ++it) { - workarounds.push_back( - gpu::GpuDriverBugWorkaroundTypeToString( - static_cast<gpu::GpuDriverBugWorkaroundType>(*it))); + for (auto workaround : gpu_feature_info_.enabled_gpu_driver_bug_workarounds) { + workarounds.push_back(gpu::GpuDriverBugWorkaroundTypeToString( + static_cast<gpu::GpuDriverBugWorkaroundType>(workaround))); } return workarounds; } @@ -1156,7 +1138,6 @@ void GpuDataManagerImplPrivate::InitializeImpl( const gpu::GpuControlListData& gpu_blacklist_data, - const gpu::GpuControlListData& gpu_driver_bug_list_data, const gpu::GPUInfo& gpu_info) { const bool log_gpu_control_list_decisions = base::CommandLine::ForCurrentProcess()->HasSwitch( @@ -1167,12 +1148,6 @@ if (log_gpu_control_list_decisions) gpu_blacklist_->EnableControlListLogging("gpu_blacklist"); } - if (gpu_driver_bug_list_data.entry_count) { - gpu_driver_bug_list_ = - gpu::GpuDriverBugList::Create(gpu_driver_bug_list_data); - if (log_gpu_control_list_decisions) - gpu_driver_bug_list_->EnableControlListLogging("gpu_driver_bug_list"); - } gpu_info_ = gpu_info; UpdateGpuInfo(gpu_info);
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.h b/content/browser/gpu/gpu_data_manager_impl_private.h index 9684a56c..333a74d6 100644 --- a/content/browser/gpu/gpu_data_manager_impl_private.h +++ b/content/browser/gpu/gpu_data_manager_impl_private.h
@@ -24,7 +24,6 @@ #include "build/build_config.h" #include "content/browser/gpu/gpu_data_manager_impl.h" #include "gpu/config/gpu_blacklist.h" -#include "gpu/config/gpu_driver_bug_list.h" namespace base { class CommandLine; @@ -193,7 +192,6 @@ explicit GpuDataManagerImplPrivate(GpuDataManagerImpl* owner); void InitializeImpl(const gpu::GpuControlListData& gpu_blacklist_data, - const gpu::GpuControlListData& gpu_driver_bug_list_data, const gpu::GPUInfo& gpu_info); void RunPostInitTasks(); @@ -235,12 +233,9 @@ // Eventually |blacklisted_features_| should be folded in to this. gpu::GpuFeatureInfo gpu_feature_info_; - std::set<int> gpu_driver_bugs_; - gpu::GPUInfo gpu_info_; std::unique_ptr<gpu::GpuBlacklist> gpu_blacklist_; - std::unique_ptr<gpu::GpuDriverBugList> gpu_driver_bug_list_; const scoped_refptr<GpuDataManagerObserverList> observer_list_;
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index 40ffc80..e1879c6 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -112,10 +112,8 @@ // Command-line switches to propagate to the GPU process. static const char* const kSwitchNames[] = { - switches::kCreateDefaultGLContext, switches::kDisableAcceleratedVideoDecode, switches::kDisableBreakpad, - switches::kDisableES3GLContext, switches::kDisableGpuRasterization, switches::kDisableGpuSandbox, switches::kDisableGpuWatchdog,
diff --git a/content/browser/loader/navigation_url_loader_network_service.cc b/content/browser/loader/navigation_url_loader_network_service.cc index 9e11659..8a9139cc 100644 --- a/content/browser/loader/navigation_url_loader_network_service.cc +++ b/content/browser/loader/navigation_url_loader_network_service.cc
@@ -513,6 +513,7 @@ if (ssl_info && ssl_info->cert) NavigationResourceHandler::GetSSLStatusForRequest(*ssl_info, &ssl_status_); response_ = std::move(response); + ssl_info_ = ssl_info; } void NavigationURLLoaderNetworkService::OnReceiveRedirect( @@ -544,19 +545,19 @@ void NavigationURLLoaderNetworkService::OnComplete( const ResourceRequestCompletionStatus& completion_status) { - if (completion_status.error_code != net::OK) { - TRACE_EVENT_ASYNC_END2("navigation", "Navigation timeToResponseStarted", - this, "&NavigationURLLoaderNetworkService", this, - "success", false); - } + if (completion_status.error_code == net::OK) + return; + + TRACE_EVENT_ASYNC_END2("navigation", "Navigation timeToResponseStarted", this, + "&NavigationURLLoaderNetworkService", this, "success", + false); // TODO(https://crbug.com/757633): Pass real values in the case of cert // errors. - base::Optional<net::SSLInfo> ssl_info = base::nullopt; bool should_ssl_errors_be_fatal = true; delegate_->OnRequestFailed(completion_status.exists_in_cache, - completion_status.error_code, ssl_info, + completion_status.error_code, ssl_info_, should_ssl_errors_be_fatal); }
diff --git a/content/browser/loader/navigation_url_loader_network_service.h b/content/browser/loader/navigation_url_loader_network_service.h index 80cd5fa0..79db21b 100644 --- a/content/browser/loader/navigation_url_loader_network_service.h +++ b/content/browser/loader/navigation_url_loader_network_service.h
@@ -53,6 +53,7 @@ NavigationURLLoaderDelegate* delegate_; scoped_refptr<ResourceResponse> response_; + base::Optional<net::SSLInfo> ssl_info_; SSLStatus ssl_status_; // Lives on the IO thread.
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc index ac97abf..a7acc5b2 100644 --- a/content/browser/loader/resource_loader.cc +++ b/content/browser/loader/resource_loader.cc
@@ -52,7 +52,8 @@ ResourceRequestInfoImpl* info, net::URLRequest* request, ResourceResponse* response, - const net::HttpRawRequestHeaders& raw_request_headers) { + const net::HttpRawRequestHeaders& raw_request_headers, + const net::HttpResponseHeaders* raw_response_headers) { response->head.request_time = request->request_time(); response->head.response_time = request->response_time(); response->head.headers = request->response_headers(); @@ -72,7 +73,7 @@ response->head.previews_state = request_info->GetPreviewsState(); if (info->ShouldReportRawHeaders()) { response->head.devtools_info = - BuildDevToolsInfo(*request, raw_request_headers); + BuildDevToolsInfo(*request, raw_request_headers, raw_response_headers); } response->head.effective_connection_type = @@ -342,7 +343,10 @@ scoped_refptr<ResourceResponse> response = new ResourceResponse(); PopulateResourceResponse(info, request_.get(), response.get(), - raw_request_headers_); + raw_request_headers_, raw_response_headers_.get()); + raw_request_headers_ = net::HttpRawRequestHeaders(); + raw_response_headers_ = nullptr; + delegate_->DidReceiveRedirect(this, redirect_info.new_url, response.get()); // Can't used ScopedDeferral here, because on sync completion, need to set @@ -573,6 +577,8 @@ request_->SetRequestHeadersCallback( base::Bind(&net::HttpRawRequestHeaders::Assign, base::Unretained(&raw_request_headers_))); + request_->SetResponseHeadersCallback(base::Bind( + &ResourceLoader::SetRawResponseHeaders, base::Unretained(this))); } request_->Start(); @@ -640,7 +646,9 @@ ResourceRequestInfoImpl* info = GetRequestInfo(); scoped_refptr<ResourceResponse> response = new ResourceResponse(); PopulateResourceResponse(info, request_.get(), response.get(), - raw_request_headers_); + raw_request_headers_, raw_response_headers_.get()); + raw_request_headers_ = net::HttpRawRequestHeaders(); + raw_response_headers_ = nullptr; delegate_->DidReceiveResponse(this, response.get()); @@ -821,4 +829,9 @@ } } +void ResourceLoader::SetRawResponseHeaders( + scoped_refptr<const net::HttpResponseHeaders> headers) { + raw_response_headers_ = headers; +} + } // namespace content
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h index 924c368..259d498 100644 --- a/content/browser/loader/resource_loader.h +++ b/content/browser/loader/resource_loader.h
@@ -22,6 +22,7 @@ #include "url/gurl.h" namespace net { +class HttpResponseHeaders; class X509Certificate; } @@ -114,6 +115,8 @@ void ResponseCompleted(); void CallDidFinishLoading(); void RecordHistograms(); + void SetRawResponseHeaders( + scoped_refptr<const net::HttpResponseHeaders> headers); bool is_deferred() const { return deferred_stage_ != DEFERRED_NONE; } @@ -180,6 +183,7 @@ int read_buffer_size_; net::HttpRawRequestHeaders raw_request_headers_; + scoped_refptr<const net::HttpResponseHeaders> raw_response_headers_; base::ThreadChecker thread_checker_;
diff --git a/content/browser/loader/resource_scheduler.cc b/content/browser/loader/resource_scheduler.cc index a081f56..4294b4d 100644 --- a/content/browser/loader/resource_scheduler.cc +++ b/content/browser/loader/resource_scheduler.cc
@@ -9,16 +9,17 @@ #include <string> #include <utility> +#include "base/bind.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/metrics/field_trial.h" #include "base/metrics/field_trial_params.h" #include "base/metrics/histogram_macros.h" #include "base/optional.h" +#include "base/sequenced_task_runner.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "base/supports_user_data.h" -#include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" #include "content/common/resource_messages.h" #include "content/public/browser/resource_request_info.h" @@ -60,6 +61,8 @@ "NetworkSchedulerYielding", base::FEATURE_DISABLED_BY_DEFAULT}; const char kMaxRequestsBeforeYieldingParam[] = "MaxRequestsBeforeYieldingParam"; const int kMaxRequestsBeforeYieldingDefault = 5; +const char kYieldMsParam[] = "MaxYieldMs"; +const int kYieldMsDefault = 0; // Based on the field trial parameters, this feature will override the value of // the maximum number of delayable requests allowed in flight. The number of @@ -292,7 +295,7 @@ // If can't start the request synchronously, post a task to start the // request. if (start_mode == START_ASYNC) { - base::ThreadTaskRunnerHandle::Get()->PostTask( + scheduler_->task_runner()->PostTask( FROM_HERE, base::BindOnce(&ScheduledResourceRequest::Start, weak_ptr_factory_.GetWeakPtr(), START_SYNC)); @@ -405,24 +408,16 @@ // Each client represents a tab. class ResourceScheduler::Client { public: - Client(bool priority_requests_delayable, - bool head_priority_requests_delayable, - bool yielding_scheduler_enabled, - int max_requests_before_yielding, - const net::NetworkQualityEstimator* const network_quality_estimator, + Client(const net::NetworkQualityEstimator* const network_quality_estimator, ResourceScheduler* resource_scheduler) : is_loaded_(false), has_html_body_(false), using_spdy_proxy_(false), in_flight_delayable_count_(0), total_layout_blocking_count_(0), - priority_requests_delayable_(priority_requests_delayable), - head_priority_requests_delayable_(head_priority_requests_delayable), num_skipped_scans_due_to_scheduled_start_(0), started_requests_since_yielding_(0), did_scheduler_yield_(false), - yielding_scheduler_enabled_(yielding_scheduler_enabled), - max_requests_before_yielding_(max_requests_before_yielding), network_quality_estimator_(network_quality_estimator), max_delayable_requests_( resource_scheduler->throttle_delayable_.GetMaxDelayableRequests( @@ -677,8 +672,9 @@ attributes |= kAttributeLayoutBlocking; } else if (request->url_request()->priority() < kDelayablePriorityThreshold) { - if (priority_requests_delayable_ || - (head_priority_requests_delayable_ && !has_html_body_)) { + if (resource_scheduler_->priority_requests_delayable() || + (resource_scheduler_->head_priority_requests_delayable() && + !has_html_body_)) { // Resources below the delayable priority threshold that are considered // delayable. attributes |= kAttributeDelayable; @@ -714,15 +710,19 @@ void StartRequest(ScheduledResourceRequest* request, StartMode start_mode, RequestStartTrigger trigger) { - started_requests_since_yielding_ += 1; - if (started_requests_since_yielding_ == 1) { - // This is the first started request since last yielding. Post a task to - // reset the counter and start any yielded tasks if necessary. We post - // this now instead of when we first yield so that if there is a pause - // between requests the counter is reset. - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&Client::ResumeIfYielded, - weak_ptr_factory_.GetWeakPtr())); + if (resource_scheduler_->yielding_scheduler_enabled()) { + started_requests_since_yielding_ += 1; + if (started_requests_since_yielding_ == 1) { + // This is the first started request since last yielding. Post a task to + // reset the counter and start any yielded tasks if necessary. We post + // this now instead of when we first yield so that if there is a pause + // between requests the counter is reset. + resource_scheduler_->task_runner()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&Client::ResumeIfYielded, + weak_ptr_factory_.GetWeakPtr()), + resource_scheduler_->yield_time()); + } } // Only log on requests that were blocked by the ResourceScheduler. @@ -794,28 +794,28 @@ const net::HostPortPair& host_port_pair = request->host_port_pair(); bool priority_delayable = - priority_requests_delayable_ || - (head_priority_requests_delayable_ && !has_html_body_); + resource_scheduler_->priority_requests_delayable() || + (resource_scheduler_->head_priority_requests_delayable() && + !has_html_body_); if (!priority_delayable) { if (using_spdy_proxy_ && url_request.url().SchemeIs(url::kHttpScheme)) - return ShouldStartOrYieldRequest(); + return ShouldStartOrYieldRequest(request); url::SchemeHostPort scheme_host_port(url_request.url()); net::HttpServerProperties& http_server_properties = *url_request.context()->http_server_properties(); - // TODO(willchan): We should really improve this algorithm as described in // crbug.com/164101. Also, theoretically we should not count a // request-priority capable request against the delayable requests limit. if (http_server_properties.SupportsRequestPriority(scheme_host_port)) - return ShouldStartOrYieldRequest(); + return ShouldStartOrYieldRequest(request); } // Non-delayable requests. if (!RequestAttributesAreSet(request->attributes(), kAttributeDelayable)) - return ShouldStartOrYieldRequest(); + return START_REQUEST; // Delayable requests. DCHECK_GE(in_flight_requests_.size(), in_flight_delayable_count_); @@ -858,7 +858,7 @@ } } - return ShouldStartOrYieldRequest(); + return START_REQUEST; } // It is common for a burst of messages to come from the renderer which @@ -873,7 +873,7 @@ void ScheduleLoadAnyStartablePendingRequests(RequestStartTrigger trigger) { if (num_skipped_scans_due_to_scheduled_start_ == 0) { TRACE_EVENT0("loading", "ScheduleLoadAnyStartablePendingRequests"); - base::ThreadTaskRunnerHandle::Get()->PostTask( + resource_scheduler_->task_runner()->PostTask( FROM_HERE, base::BindOnce(&Client::LoadAnyStartablePendingRequests, weak_ptr_factory_.GetWeakPtr(), trigger)); } @@ -891,11 +891,18 @@ // For a request that is ready to start, return START_REQUEST if the // scheduler doesn't need to yield, else YIELD_SCHEDULER. - ShouldStartReqResult ShouldStartOrYieldRequest() const { + ShouldStartReqResult ShouldStartOrYieldRequest( + ScheduledResourceRequest* request) const { DCHECK_GE(started_requests_since_yielding_, 0); - if (!yielding_scheduler_enabled_ || - started_requests_since_yielding_ < max_requests_before_yielding_) { + // Don't yield if: + // 1. The yielding scheduler isn't enabled + // 2. The resource is high priority + // 3. There haven't been enough recent requests to warrant yielding. + if (!resource_scheduler_->yielding_scheduler_enabled() || + request->url_request()->priority() >= kDelayablePriorityThreshold || + started_requests_since_yielding_ < + resource_scheduler_->max_requests_before_yielding()) { return START_REQUEST; } return YIELD_SCHEDULER; @@ -959,14 +966,6 @@ // The number of layout-blocking in-flight requests. size_t total_layout_blocking_count_; - // True if requests to servers that support priorities (e.g., H2/QUIC) can - // be delayed. - bool priority_requests_delayable_; - - // True if requests to servers that support priorities (e.g., H2/QUIC) can - // be delayed while the parser is in head. - bool head_priority_requests_delayable_; - // The number of LoadAnyStartablePendingRequests scans that were skipped due // to smarter task scheduling around reprioritization. int num_skipped_scans_due_to_scheduled_start_; @@ -979,12 +978,6 @@ // ResumeIfYielded task was run. bool did_scheduler_yield_; - // Whether or not to periodically yield when starting lots of requests. - bool yielding_scheduler_enabled_; - - // The number of requests that can start before yielding. - int max_requests_before_yielding_; - // Network quality estimator for network aware resource scheudling. This may // be null. const net::NetworkQualityEstimator* const network_quality_estimator_; @@ -1010,7 +1003,12 @@ max_requests_before_yielding_(base::GetFieldTrialParamByFeatureAsInt( kNetworkSchedulerYielding, kMaxRequestsBeforeYieldingParam, - kMaxRequestsBeforeYieldingDefault)) { + kMaxRequestsBeforeYieldingDefault)), + yield_time_(base::TimeDelta::FromMilliseconds( + base::GetFieldTrialParamByFeatureAsInt(kNetworkSchedulerYielding, + kYieldMsParam, + kYieldMsDefault))), + task_runner_(base::ThreadTaskRunnerHandle::Get()) { // Don't run the two experiments together. if (priority_requests_delayable_ && head_priority_requests_delayable_) priority_requests_delayable_ = false; @@ -1075,8 +1073,6 @@ DCHECK(!base::ContainsKey(client_map_, client_id)); Client* client = new Client( - priority_requests_delayable_, head_priority_requests_delayable_, - yielding_scheduler_enabled_, max_requests_before_yielding_, network_quality_estimator, this); client_map_[client_id] = client; }
diff --git a/content/browser/loader/resource_scheduler.h b/content/browser/loader/resource_scheduler.h index 9e34b0a3..fdae214 100644 --- a/content/browser/loader/resource_scheduler.h +++ b/content/browser/loader/resource_scheduler.h
@@ -11,17 +11,24 @@ #include <map> #include <memory> #include <set> +#include <utility> #include <vector> #include "base/compiler_specific.h" #include "base/feature_list.h" #include "base/macros.h" +#include "base/memory/ref_counted.h" #include "base/sequence_checker.h" +#include "base/time/time.h" #include "content/common/content_export.h" #include "net/base/priority_queue.h" #include "net/base/request_priority.h" #include "net/nqe/effective_connection_type.h" +namespace base { +class SequencedTaskRunner; +} + namespace net { class URLRequest; class NetworkQualityEstimator; @@ -132,6 +139,34 @@ return ThrottleDelayble::GetMaxRequestsForBDPRanges(); } + bool priority_requests_delayable() const { + return priority_requests_delayable_; + } + bool head_priority_requests_delayable() const { + return head_priority_requests_delayable_; + } + bool yielding_scheduler_enabled() const { + return yielding_scheduler_enabled_; + } + int max_requests_before_yielding() const { + return max_requests_before_yielding_; + } + base::TimeDelta yield_time() const { return yield_time_; } + base::SequencedTaskRunner* task_runner() { return task_runner_.get(); } + + // Testing setters + void SetMaxRequestsBeforeYieldingForTesting( + int max_requests_before_yielding) { + max_requests_before_yielding_ = max_requests_before_yielding; + } + void SetYieldTimeForTesting(base::TimeDelta yield_time) { + yield_time_ = yield_time; + } + void SetTaskRunnerForTesting( + scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner) { + task_runner_ = std::move(sequenced_task_runner); + } + private: class Client; class RequestQueue; @@ -230,9 +265,13 @@ // start resource requests. bool yielding_scheduler_enabled_; int max_requests_before_yielding_; + base::TimeDelta yield_time_; const ThrottleDelayble throttle_delayable_; + // The TaskRunner to post tasks on. Can be overridden for tests. + scoped_refptr<base::SequencedTaskRunner> task_runner_; + SEQUENCE_CHECKER(sequence_checker_); DISALLOW_COPY_AND_ASSIGN(ResourceScheduler);
diff --git a/content/browser/loader/resource_scheduler_unittest.cc b/content/browser/loader/resource_scheduler_unittest.cc index 879ff97..38f9147 100644 --- a/content/browser/loader/resource_scheduler_unittest.cc +++ b/content/browser/loader/resource_scheduler_unittest.cc
@@ -12,6 +12,7 @@ #include <vector> #include "base/memory/ptr_util.h" +#include "base/memory/ref_counted.h" #include "base/metrics/field_trial.h" #include "base/metrics/field_trial_param_associator.h" #include "base/metrics/field_trial_params.h" @@ -20,6 +21,7 @@ #include "base/test/histogram_tester.h" #include "base/test/mock_entropy_provider.h" #include "base/test/scoped_feature_list.h" +#include "base/test/test_mock_time_task_runner.h" #include "base/timer/mock_timer.h" #include "base/timer/timer.h" #include "content/public/browser/resource_context.h" @@ -63,9 +65,33 @@ const char kHeadPrioritySupportedRequestsDelayable[] = "HeadPriorityRequestsDelayable"; const char kNetworkSchedulerYielding[] = "NetworkSchedulerYielding"; -const int kMaxRequestsBeforeYielding = 5; const size_t kMaxNumDelayableRequestsPerHostPerClient = 6; +void ConfigureYieldFieldTrial( + int max_requests_before_yielding, + int max_yield_ms, + base::test::ScopedFeatureList* scoped_feature_list) { + const std::string kTrialName = "TrialName"; + const std::string kGroupName = "GroupName"; // Value not used + const std::string kNetworkSchedulerYielding = "NetworkSchedulerYielding"; + + scoped_refptr<base::FieldTrial> trial = + base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); + + std::map<std::string, std::string> params; + params["MaxRequestsBeforeYieldingParam"] = + base::IntToString(max_requests_before_yielding); + params["MaxYieldMs"] = base::IntToString(max_yield_ms); + base::FieldTrialParamAssociator::GetInstance()->AssociateFieldTrialParams( + kTrialName, kGroupName, params); + + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); + feature_list->RegisterFieldTrialOverride( + kNetworkSchedulerYielding, base::FeatureList::OVERRIDE_ENABLE_FEATURE, + trial.get()); + scoped_feature_list->InitWithFeatureList(std::move(feature_list)); +} + class TestRequest : public ResourceThrottle::Delegate { public: TestRequest(std::unique_ptr<net::URLRequest> url_request, @@ -525,115 +551,186 @@ EXPECT_TRUE(lowest2->started()); } -TEST_F(ResourceSchedulerTest, SchedulerYieldsWithFeatureEnabled) { +TEST_F(ResourceSchedulerTest, SchedulerYieldsOnSpdy) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitFromCommandLine(kNetworkSchedulerYielding, ""); InitializeScheduler(); - // Use spdy so that we don't throttle. + // The second low-priority request should yield. + scheduler_->SetMaxRequestsBeforeYieldingForTesting(1); + + // Set a custom yield time. + scheduler_->SetYieldTimeForTesting(base::TimeDelta::FromMilliseconds(42)); + + // Use a testing task runner so that we can control time. + auto task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>(); + scheduler_->SetTaskRunnerForTesting(task_runner); + http_server_properties_.SetSupportsSpdy( url::SchemeHostPort("https", "spdyhost", 443), true); - // Add enough async requests that the last one should yield. - std::vector<std::unique_ptr<TestRequest>> requests; - for (int i = 0; i < kMaxRequestsBeforeYielding + 1; ++i) - requests.push_back(NewRequest("http://host/higher", net::HIGHEST)); + std::unique_ptr<TestRequest> request( + NewRequest("https://spdyhost/low", net::LOWEST)); + std::unique_ptr<TestRequest> request2( + NewRequest("https://spdyhost/low", net::LOWEST)); + std::unique_ptr<TestRequest> request3( + NewRequest("https://spdyhost/low", net::LOWEST)); - // Verify that the number of requests before yielding started. - for (int i = 0; i < kMaxRequestsBeforeYielding; ++i) - EXPECT_TRUE(requests[i]->started()); + // Just before the yield task runs, only the first request should have + // started. + task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(41)); + EXPECT_TRUE(request->started()); + EXPECT_FALSE(request2->started()); + EXPECT_FALSE(request3->started()); - // The next async request should have yielded. - EXPECT_FALSE(requests[kMaxRequestsBeforeYielding]->started()); + // Yield is done, run the next task. + task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); + EXPECT_TRUE(request2->started()); + EXPECT_FALSE(request3->started()); - // Verify that with time the yielded request eventually runs. - base::RunLoop().RunUntilIdle(); - EXPECT_TRUE(requests[kMaxRequestsBeforeYielding]->started()); + // Just before the yield task runs, only the first two requests should have + // started. + task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(41)); + EXPECT_FALSE(request3->started()); + + // Yield is done, run the next task. + task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); + EXPECT_TRUE(request3->started()); } -TEST_F(ResourceSchedulerTest, SchedulerDoesNotYieldForSyncRequests) { +// Same as SchedulerYieldsOnSpdy but uses FieldTrial Parameters for +// configuration. +TEST_F(ResourceSchedulerTest, SchedulerYieldFieldTrialParams) { base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitFromCommandLine(kNetworkSchedulerYielding, ""); + + ConfigureYieldFieldTrial(1 /* requests before yielding */, + 42 /* yield time */, &scoped_feature_list); InitializeScheduler(); - // Use spdy so that we don't throttle. + // Make sure the parameters were properly set. + EXPECT_EQ(42, scheduler_->yield_time().InMilliseconds()); + EXPECT_EQ(1, scheduler_->max_requests_before_yielding()); + + // Use a testing task runner so that we can control time. + auto task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>(); + scheduler_->SetTaskRunnerForTesting(task_runner); + http_server_properties_.SetSupportsSpdy( url::SchemeHostPort("https", "spdyhost", 443), true); - // Add enough async requests that the last one should yield. - std::vector<std::unique_ptr<TestRequest>> requests; - for (int i = 0; i < kMaxRequestsBeforeYielding + 1; ++i) - requests.push_back(NewRequest("http://host/higher", net::HIGHEST)); + std::unique_ptr<TestRequest> request( + NewRequest("https://spdyhost/low", net::LOWEST)); + std::unique_ptr<TestRequest> request2( + NewRequest("https://spdyhost/low", net::LOWEST)); - // Add a sync requests. - requests.push_back(NewSyncRequest("http://host/higher", net::HIGHEST)); + // Just before the yield task runs, only the first request should have + // started. + task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(41)); + EXPECT_TRUE(request->started()); + EXPECT_FALSE(request2->started()); - // Verify that the number of requests before yielding started. - for (int i = 0; i < kMaxRequestsBeforeYielding; ++i) - EXPECT_TRUE(requests[i]->started()); - - // The next async request should have yielded. - EXPECT_FALSE(requests[kMaxRequestsBeforeYielding]->started()); - - // The next sync request should have started even though async is yielding. - EXPECT_TRUE(requests[kMaxRequestsBeforeYielding + 1]->started()); - - // Verify that with time the yielded request eventually runs. - base::RunLoop().RunUntilIdle(); - EXPECT_TRUE(requests[kMaxRequestsBeforeYielding]->started()); + // Yield is done, run the next task. + task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(1)); + EXPECT_TRUE(request2->started()); } -TEST_F(ResourceSchedulerTest, SchedulerDoesNotYieldForAlternativeSchemes) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitFromCommandLine(kNetworkSchedulerYielding, ""); - InitializeScheduler(); - - // Use spdy so that we don't throttle. - http_server_properties_.SetSupportsSpdy( - url::SchemeHostPort("https", "spdyhost", 443), true); - - // Add enough async requests that the last one should yield. - std::vector<std::unique_ptr<TestRequest>> requests; - for (int i = 0; i < kMaxRequestsBeforeYielding + 1; ++i) - requests.push_back(NewRequest("http://host/higher", net::HIGHEST)); - - // Add a non-http request. - requests.push_back(NewRequest("zzz://host/higher", net::HIGHEST)); - - // Verify that the number of requests before yielding started. - for (int i = 0; i < kMaxRequestsBeforeYielding; ++i) - EXPECT_TRUE(requests[i]->started()); - - // The next async request should have yielded. - EXPECT_FALSE(requests[kMaxRequestsBeforeYielding]->started()); - - // The non-http(s) request should have started even though async is - // yielding. - EXPECT_TRUE(requests[kMaxRequestsBeforeYielding + 1]->started()); - - // Verify that with time the yielded request eventually runs. - base::RunLoop().RunUntilIdle(); - EXPECT_TRUE(requests[kMaxRequestsBeforeYielding]->started()); -} - -TEST_F(ResourceSchedulerTest, SchedulerDoesNotYieldWithFeatureDisabled) { +TEST_F(ResourceSchedulerTest, YieldingDisabled) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitFromCommandLine("", kNetworkSchedulerYielding); InitializeScheduler(); + // We're setting a yield parameter, but no yielding will happen since it's + // disabled. + scheduler_->SetMaxRequestsBeforeYieldingForTesting(1); + + http_server_properties_.SetSupportsSpdy( + url::SchemeHostPort("https", "spdyhost", 443), true); + + std::unique_ptr<TestRequest> request( + NewRequest("https://spdyhost/low", net::LOWEST)); + std::unique_ptr<TestRequest> request2( + NewRequest("https://spdyhost/low", net::LOWEST)); + EXPECT_TRUE(request->started()); + EXPECT_TRUE(request2->started()); +} + +TEST_F(ResourceSchedulerTest, SchedulerDoesNotYieldH1) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitFromCommandLine(kNetworkSchedulerYielding, ""); + InitializeScheduler(); + + // Use a testing task runner so that we can control time. + auto task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>(); + scheduler_->SetTaskRunnerForTesting(task_runner); + + // Yield after each request. + scheduler_->SetMaxRequestsBeforeYieldingForTesting(1); + scheduler_->SetYieldTimeForTesting(base::TimeDelta::FromMilliseconds(42)); + + std::unique_ptr<TestRequest> request( + NewRequest("https://host/low", net::LOWEST)); + std::unique_ptr<TestRequest> request2( + NewRequest("https://host/low", net::LOWEST)); + + EXPECT_TRUE(request->started()); + EXPECT_FALSE(request2->started()); + + // Finish the first task so that the second can start. + request = nullptr; + + // Run tasks without advancing time, if there were yielding the next task + // wouldn't start. + task_runner->RunUntilIdle(); + + // The next task started, so there was no yielding. + EXPECT_TRUE(request2->started()); +} + +TEST_F(ResourceSchedulerTest, SchedulerDoesNotYieldAltSchemes) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitFromCommandLine(kNetworkSchedulerYielding, ""); + InitializeScheduler(); + + // Yield after each request. + scheduler_->SetMaxRequestsBeforeYieldingForTesting(1); + scheduler_->SetYieldTimeForTesting(base::TimeDelta::FromMilliseconds(42)); + + std::unique_ptr<TestRequest> request( + NewRequest("yyy://host/low", net::LOWEST)); + std::unique_ptr<TestRequest> request2( + NewRequest("zzz://host/low", net::LOWEST)); + + EXPECT_TRUE(request->started()); + EXPECT_TRUE(request2->started()); +} + +TEST_F(ResourceSchedulerTest, SchedulerDoesNotYieldSyncRequests) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitFromCommandLine(kNetworkSchedulerYielding, ""); + InitializeScheduler(); + + // The second low-priority request should yield. + scheduler_->SetMaxRequestsBeforeYieldingForTesting(1); + // Use spdy so that we don't throttle. http_server_properties_.SetSupportsSpdy( url::SchemeHostPort("https", "spdyhost", 443), true); - // Add enough async requests that the last one would yield if yielding were - // enabled. - std::vector<std::unique_ptr<TestRequest>> requests; - for (int i = 0; i < kMaxRequestsBeforeYielding + 1; ++i) - requests.push_back(NewRequest("http://host/higher", net::HIGHEST)); + std::unique_ptr<TestRequest> request( + NewRequest("https://spdyhost/low", net::LOWEST)); + std::unique_ptr<TestRequest> request2( + NewRequest("https://spdyhost/low", net::LOWEST)); // yields - // Verify that none of the requests yield. - for (int i = 0; i < kMaxRequestsBeforeYielding + 1; ++i) - EXPECT_TRUE(requests[i]->started()); + // Add a synchronous request, it shouldn't yield. + std::unique_ptr<TestRequest> sync_request( + NewSyncRequest("http://spdyhost/low", net::LOWEST)); + + EXPECT_TRUE(request->started()); + EXPECT_FALSE(request2->started()); + EXPECT_TRUE(sync_request->started()); // The sync request started. + + base::RunLoop().RunUntilIdle(); + EXPECT_TRUE(request2->started()); } TEST_F(ResourceSchedulerTest, OneLowLoadsUntilBodyInsertedExceptSpdy) {
diff --git a/content/browser/media/android/browser_surface_view_manager.h b/content/browser/media/android/browser_surface_view_manager.h index a15e52e3..08039ef 100644 --- a/content/browser/media/android/browser_surface_view_manager.h +++ b/content/browser/media/android/browser_surface_view_manager.h
@@ -21,7 +21,7 @@ // BrowserSurfaceViewManager creates and owns a ContentVideoView on behalf of // a fullscreen media player. Its SurfaceView is registered so that a decoder // in the GPU process can look it up and render to it. -class CONTENT_EXPORT BrowserSurfaceViewManager +class CONTENT_EXPORT BrowserSurfaceViewManager final : public ContentVideoView::Client { public: explicit BrowserSurfaceViewManager(RenderFrameHost* render_frame_host);
diff --git a/content/browser/renderer_host/cursor_manager_unittest.cc b/content/browser/renderer_host/cursor_manager_unittest.cc index ce61e0d..86ed91c 100644 --- a/content/browser/renderer_host/cursor_manager_unittest.cc +++ b/content/browser/renderer_host/cursor_manager_unittest.cc
@@ -6,7 +6,6 @@ #include "base/test/scoped_task_environment.h" #include "build/build_config.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" @@ -15,6 +14,7 @@ #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_context.h" #include "content/test/dummy_render_widget_host_delegate.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_render_view_host.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/renderer_host/media/audio_input_device_manager.cc b/content/browser/renderer_host/media/audio_input_device_manager.cc index 7e765da..26193ebf9 100644 --- a/content/browser/renderer_host/media/audio_input_device_manager.cc +++ b/content/browser/renderer_host/media/audio_input_device_manager.cc
@@ -54,10 +54,10 @@ AudioInputDeviceManager::~AudioInputDeviceManager() { } -const StreamDeviceInfo* AudioInputDeviceManager::GetOpenedDeviceInfoById( +const MediaStreamDevice* AudioInputDeviceManager::GetOpenedDeviceById( int session_id) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - StreamDeviceList::iterator device = GetDevice(session_id); + MediaStreamDevices::iterator device = GetDevice(session_id); if (device == devices_.end()) return nullptr; @@ -117,10 +117,10 @@ void AudioInputDeviceManager::Close(int session_id) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - StreamDeviceList::iterator device = GetDevice(session_id); + MediaStreamDevices::iterator device = GetDevice(session_id); if (device == devices_.end()) return; - const MediaStreamType stream_type = device->device.type; + const MediaStreamType stream_type = device->type; if (session_id != kFakeOpenSessionId) devices_.erase(device); @@ -211,21 +211,22 @@ UMA_HISTOGRAM_TIMES("Media.AudioInputDeviceManager.OpenOnDeviceThreadTime", base::TimeTicks::Now() - start_time); - StreamDeviceInfo info(device.type, device.name, device.id); - info.session_id = session_id; - info.device.input = input_params.IsValid() - ? input_params - : media::AudioParameters::UnavailableDeviceParams(); - info.device.matched_output_device_id = matched_output_device_id; - info.device.matched_output = + MediaStreamDevice media_stream_device(device.type, device.id, device.name); + media_stream_device.session_id = session_id; + media_stream_device.input = + input_params.IsValid() + ? input_params + : media::AudioParameters::UnavailableDeviceParams(); + media_stream_device.matched_output_device_id = matched_output_device_id; + media_stream_device.matched_output = matched_output_params.IsValid() ? matched_output_params : media::AudioParameters::UnavailableDeviceParams(); - devices_.push_back(info); + devices_.push_back(media_stream_device); for (auto& listener : listeners_) - listener.Opened(info.device.type, session_id); + listener.Opened(media_stream_device.type, session_id); } void AudioInputDeviceManager::ClosedOnIOThread(MediaStreamType stream_type, @@ -235,13 +236,12 @@ listener.Closed(stream_type, session_id); } - -AudioInputDeviceManager::StreamDeviceList::iterator -AudioInputDeviceManager::GetDevice(int session_id) { - for (StreamDeviceList::iterator i(devices_.begin()); i != devices_.end(); - ++i) { - if (i->session_id == session_id) - return i; +MediaStreamDevices::iterator AudioInputDeviceManager::GetDevice( + int session_id) { + for (MediaStreamDevices::iterator it = devices_.begin(); it != devices_.end(); + ++it) { + if (it->session_id == session_id) + return it; } return devices_.end();
diff --git a/content/browser/renderer_host/media/audio_input_device_manager.h b/content/browser/renderer_host/media/audio_input_device_manager.h index 85bf2b78..c5880c0 100644 --- a/content/browser/renderer_host/media/audio_input_device_manager.h +++ b/content/browser/renderer_host/media/audio_input_device_manager.h
@@ -5,10 +5,10 @@ // AudioInputDeviceManager manages the audio input devices. In particular it // communicates with MediaStreamManager and AudioInputRendererHost on the // browser IO thread, handles queries like -// enumerate/open/close/GetOpenedDeviceInfoById from MediaStreamManager and -// GetOpenedDeviceInfoById from AudioInputRendererHost. +// enumerate/open/close/GetOpenedDeviceById from MediaStreamManager and +// GetOpenedDeviceById from AudioInputRendererHost. // The work for enumerate/open/close is handled asynchronously on Media Stream -// device thread, while GetOpenedDeviceInfoById is synchronous on the IO thread. +// device thread, while GetOpenedDeviceById is synchronous on the IO thread. #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_INPUT_DEVICE_MANAGER_H_ #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_AUDIO_INPUT_DEVICE_MANAGER_H_ @@ -23,7 +23,6 @@ #include "build/build_config.h" #include "content/browser/renderer_host/media/media_stream_provider.h" #include "content/common/content_export.h" -#include "content/common/media/media_stream_options.h" #include "content/public/common/media_stream_request.h" namespace media { @@ -43,9 +42,9 @@ explicit AudioInputDeviceManager(media::AudioSystem* audio_system); - // Gets the opened device info by |session_id|. Returns NULL if the device + // Gets the opened device by |session_id|. Returns NULL if the device // is not opened, otherwise the opened device. Called on IO thread. - const StreamDeviceInfo* GetOpenedDeviceInfoById(int session_id); + const MediaStreamDevice* GetOpenedDeviceById(int session_id); // MediaStreamProvider implementation. void RegisterListener(MediaStreamProviderListener* listener) override; @@ -91,7 +90,6 @@ #endif private: - typedef std::vector<StreamDeviceInfo> StreamDeviceList; ~AudioInputDeviceManager() override; // Callback called on IO thread when device is opened. @@ -108,12 +106,12 @@ // Helper to return iterator to the device referenced by |session_id|. If no // device is found, it will return devices_.end(). - StreamDeviceList::iterator GetDevice(int session_id); + MediaStreamDevices::iterator GetDevice(int session_id); // Only accessed on Browser::IO thread. base::ObserverList<MediaStreamProviderListener> listeners_; int next_capture_session_id_; - StreamDeviceList devices_; + MediaStreamDevices devices_; #if defined(OS_CHROMEOS) // Keeps count of how many streams are using keyboard mic.
diff --git a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc index e23191fc..17a745b 100644 --- a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc +++ b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
@@ -44,8 +44,6 @@ const StreamDeviceInfoArray&)); MOCK_METHOD2(Aborted, void(MediaStreamType, int)); - StreamDeviceInfoArray devices_; - private: DISALLOW_COPY_AND_ASSIGN(MockAudioInputDeviceManagerListener); }; @@ -75,10 +73,10 @@ base::RunLoop().RunUntilIdle(); // Use fake devices. - devices_.emplace_back(MEDIA_DEVICE_AUDIO_CAPTURE, "Fake Device 1", - "fake_device_1"); - devices_.emplace_back(MEDIA_DEVICE_AUDIO_CAPTURE, "Fake Device 2", - "fake_device_2"); + devices_.emplace_back(MEDIA_DEVICE_AUDIO_CAPTURE, "fake_device_1", + "Fake Device 1"); + devices_.emplace_back(MEDIA_DEVICE_AUDIO_CAPTURE, "fake_device_2", + "Fake Device 2"); } void SetUp() override { @@ -113,7 +111,7 @@ std::unique_ptr<media::AudioSystem> audio_system_; scoped_refptr<AudioInputDeviceManager> manager_; std::unique_ptr<MockAudioInputDeviceManagerListener> audio_input_listener_; - StreamDeviceInfoArray devices_; + MediaStreamDevices devices_; private: DISALLOW_COPY_AND_ASSIGN(MAYBE_AudioInputDeviceManagerTest); @@ -125,10 +123,10 @@ InSequence s; - for (StreamDeviceInfoArray::const_iterator iter = devices_.begin(); + for (MediaStreamDevices::const_iterator iter = devices_.begin(); iter != devices_.end(); ++iter) { // Opens/closes the devices. - int session_id = manager_->Open(iter->device); + int session_id = manager_->Open(*iter); // Expected mock call with expected return value. EXPECT_CALL(*audio_input_listener_, @@ -157,10 +155,10 @@ std::unique_ptr<int[]> session_id(new int[devices_.size()]); // Opens the devices in a loop. - for (StreamDeviceInfoArray::const_iterator iter = devices_.begin(); + for (MediaStreamDevices::const_iterator iter = devices_.begin(); iter != devices_.end(); ++iter, ++index) { // Opens the devices. - session_id[index] = manager_->Open(iter->device); + session_id[index] = manager_->Open(*iter); // Expected mock call with expected returned value. EXPECT_CALL(*audio_input_listener_, @@ -215,8 +213,8 @@ InSequence s; // Opens and closes the default device twice. - int first_session_id = manager_->Open(devices_.front().device); - int second_session_id = manager_->Open(devices_.front().device); + int first_session_id = manager_->Open(devices_.front()); + int second_session_id = manager_->Open(devices_.front()); // Expected mock calls with expected returned values. EXPECT_NE(first_session_id, second_session_id); @@ -250,22 +248,22 @@ int index = 0; std::unique_ptr<int[]> session_id(new int[devices_.size()]); - // Loops through the devices and calls Open()/Close()/GetOpenedDeviceInfoById + // Loops through the devices and calls Open()/Close()/GetOpenedDeviceById // for each device. - for (StreamDeviceInfoArray::const_iterator iter = devices_.begin(); + for (MediaStreamDevices::const_iterator iter = devices_.begin(); iter != devices_.end(); ++iter, ++index) { // Note that no DeviceStopped() notification for Event Handler as we have // stopped the device before calling close. - session_id[index] = manager_->Open(iter->device); + session_id[index] = manager_->Open(*iter); EXPECT_CALL(*audio_input_listener_, Opened(MEDIA_DEVICE_AUDIO_CAPTURE, session_id[index])) .Times(1); WaitForOpenCompletion(); - const StreamDeviceInfo* info = manager_->GetOpenedDeviceInfoById( - session_id[index]); - DCHECK(info); - EXPECT_EQ(iter->device.id, info->device.id); + const MediaStreamDevice* device = + manager_->GetOpenedDeviceById(session_id[index]); + DCHECK(device); + EXPECT_EQ(iter->id, device->id); manager_->Close(session_id[index]); EXPECT_CALL(*audio_input_listener_, Closed(MEDIA_DEVICE_AUDIO_CAPTURE, session_id[index])) @@ -279,8 +277,8 @@ InSequence s; // Opens the first device. - StreamDeviceInfoArray::const_iterator iter = devices_.begin(); - int session_id = manager_->Open(iter->device); + MediaStreamDevices::const_iterator iter = devices_.begin(); + int session_id = manager_->Open(*iter); EXPECT_CALL(*audio_input_listener_, Opened(MEDIA_DEVICE_AUDIO_CAPTURE, session_id)) .Times(1); @@ -289,9 +287,9 @@ // Access a non-opened device. // This should fail and return an empty StreamDeviceInfo. int invalid_session_id = session_id + 1; - const StreamDeviceInfo* info = - manager_->GetOpenedDeviceInfoById(invalid_session_id); - DCHECK(!info); + const MediaStreamDevice* device = + manager_->GetOpenedDeviceById(invalid_session_id); + DCHECK(!device); manager_->Close(session_id); EXPECT_CALL(*audio_input_listener_, @@ -312,12 +310,12 @@ base::MakeUnique<media::AudioThreadImpl>()); // Devices to request from AudioInputDeviceManager. - devices_.emplace_back(MEDIA_TAB_AUDIO_CAPTURE, "Tab capture", - "tab_capture"); - devices_.emplace_back(MEDIA_DESKTOP_AUDIO_CAPTURE, "Desktop capture", - "desktop_capture"); - devices_.emplace_back(MEDIA_DEVICE_AUDIO_CAPTURE, "Fake Device", - "fake_device"); + devices_.emplace_back(MEDIA_TAB_AUDIO_CAPTURE, "tab_capture", + "Tab capture"); + devices_.emplace_back(MEDIA_DESKTOP_AUDIO_CAPTURE, "desktop_capture", + "Desktop capture"); + devices_.emplace_back(MEDIA_DEVICE_AUDIO_CAPTURE, "fake_device", + "Fake Device"); } private: @@ -331,22 +329,19 @@ InSequence s; for (const auto& device_request : devices_) { - int session_id = manager_->Open(device_request.device); + int session_id = manager_->Open(device_request); - EXPECT_CALL(*audio_input_listener_, - Opened(device_request.device.type, session_id)) + EXPECT_CALL(*audio_input_listener_, Opened(device_request.type, session_id)) .Times(1); WaitForOpenCompletion(); // Expects that device parameters stored by the manager are valid. - const StreamDeviceInfo* device_info = - manager_->GetOpenedDeviceInfoById(session_id); - EXPECT_TRUE(device_info->device.input.IsValid()); - EXPECT_TRUE(device_info->device.matched_output.IsValid()); + const MediaStreamDevice* device = manager_->GetOpenedDeviceById(session_id); + EXPECT_TRUE(device->input.IsValid()); + EXPECT_TRUE(device->matched_output.IsValid()); manager_->Close(session_id); - EXPECT_CALL(*audio_input_listener_, - Closed(device_request.device.type, session_id)) + EXPECT_CALL(*audio_input_listener_, Closed(device_request.type, session_id)) .Times(1); base::RunLoop().RunUntilIdle();
diff --git a/content/browser/renderer_host/media/audio_input_renderer_host.cc b/content/browser/renderer_host/media/audio_input_renderer_host.cc index d76891e..a75809a 100644 --- a/content/browser/renderer_host/media/audio_input_renderer_host.cc +++ b/content/browser/renderer_host/media/audio_input_renderer_host.cc
@@ -26,6 +26,7 @@ #include "content/browser/renderer_host/media/audio_input_sync_writer.h" #include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/webrtc/webrtc_internals.h" +#include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents_media_capture_id.h" #include "media/audio/audio_device_description.h" #include "media/base/audio_bus.h" @@ -52,6 +53,18 @@ DVLOG(1) << message; } +void NotifyProcessHostStreamAdded(int render_process_id) { + auto* process_host = RenderProcessHost::FromID(render_process_id); + if (process_host) + process_host->OnMediaStreamAdded(); +} + +void NotifyProcessHostStreamRemoved(int render_process_id) { + auto* process_host = RenderProcessHost::FromID(render_process_id); + if (process_host) + process_host->OnMediaStreamRemoved(); +} + } // namespace struct AudioInputRendererHost::AudioEntry { @@ -315,19 +328,19 @@ } // Check if we have the permission to open the device and which device to use. - const StreamDeviceInfo* info = - media_stream_manager_->audio_input_device_manager() - ->GetOpenedDeviceInfoById(session_id); - if (!info) { + const MediaStreamDevice* device = + media_stream_manager_->audio_input_device_manager()->GetOpenedDeviceById( + session_id); + if (!device) { SendErrorMessage(stream_id, PERMISSION_DENIED); DLOG(WARNING) << "No permission has been granted to input stream with " << "session_id=" << session_id; return; } - const MediaStreamType& type = info->device.type; - const std::string& device_id = info->device.id; - const std::string& device_name = info->device.name; + const MediaStreamType& type = device->type; + const std::string& device_id = device->id; + const std::string& device_name = device->name; media::AudioParameters audio_params(config.params); if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kUseFakeDeviceForMediaStream)) { @@ -405,6 +418,11 @@ MediaInternals::GetInstance()->SetWebContentsTitleForAudioLogEntry( stream_id, render_process_id_, render_frame_id, audio_log_.get()); + // Prevent process backgrounding while audio input is active: + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::BindOnce(&NotifyProcessHostStreamAdded, render_process_id_)); + #if BUILDFLAG(ENABLE_WEBRTC) BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, @@ -483,6 +501,10 @@ base::BindOnce(&AudioInputRendererHost::DeleteEntry, this, entry)); entry->pending_close = true; audio_log_->OnClosed(entry->stream_id); + + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::BindOnce(&NotifyProcessHostStreamRemoved, render_process_id_)); } }
diff --git a/content/browser/renderer_host/media/audio_input_renderer_host_unittest.cc b/content/browser/renderer_host/media/audio_input_renderer_host_unittest.cc index 499f33c..f6bc81f 100644 --- a/content/browser/renderer_host/media/audio_input_renderer_host_unittest.cc +++ b/content/browser/renderer_host/media/audio_input_renderer_host_unittest.cc
@@ -269,8 +269,8 @@ audio_manager_.reset(new media::FakeAudioManager( base::MakeUnique<media::TestAudioThread>(), &log_factory_)); audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); - media_stream_manager_ = - base::MakeUnique<MediaStreamManager>(audio_system_.get()); + media_stream_manager_ = base::MakeUnique<MediaStreamManager>( + audio_system_.get(), audio_manager_->GetTaskRunner()); airh_ = new AudioInputRendererHostWithInterception( kRenderProcessId, kRendererPid, media::AudioManager::Get(), media_stream_manager_.get(), AudioMirroringManager::GetInstance(),
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler.cc b/content/browser/renderer_host/media/audio_output_authorization_handler.cc index b19c9978..dd9d8544 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler.cc +++ b/content/browser/renderer_host/media/audio_output_authorization_handler.cc
@@ -125,16 +125,16 @@ // output device is found, reuse the input device permissions. if (media::AudioDeviceDescription::UseSessionIdToSelectDevice(session_id, device_id)) { - const StreamDeviceInfo* info = + const MediaStreamDevice* device = media_stream_manager_->audio_input_device_manager() - ->GetOpenedDeviceInfoById(session_id); - if (info && !info->device.matched_output_device_id.empty()) { + ->GetOpenedDeviceById(session_id); + if (device && !device->matched_output_device_id.empty()) { media::AudioParameters params( media::AudioParameters::AUDIO_PCM_LOW_LATENCY, - info->device.matched_output.channel_layout(), - info->device.matched_output.sample_rate(), 16, - info->device.matched_output.frames_per_buffer()); - params.set_effects(info->device.matched_output.effects()); + device->matched_output.channel_layout(), + device->matched_output.sample_rate(), 16, + device->matched_output.frames_per_buffer()); + params.set_effects(device->matched_output.effects()); // We don't need the origin for authorization in this case, but it's used // for hashing the device id before sending it back to the renderer. @@ -144,7 +144,7 @@ render_frame_id), base::BindOnce(&AudioOutputAuthorizationHandler::HashDeviceId, weak_factory_.GetWeakPtr(), std::move(cb), - info->device.matched_output_device_id, params)); + device->matched_output_device_id, params)); return; } // Otherwise, the default device is used.
diff --git a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc index acf34d7..684afb7c 100644 --- a/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc +++ b/content/browser/renderer_host/media/audio_output_authorization_handler_unittest.cc
@@ -102,8 +102,8 @@ audio_manager_ = base::MakeUnique<media::FakeAudioManager>( base::MakeUnique<media::AudioThreadImpl>(), &log_factory_); audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); - media_stream_manager_ = - base::MakeUnique<MediaStreamManager>(audio_system_.get()); + media_stream_manager_ = base::MakeUnique<MediaStreamManager>( + audio_system_.get(), audio_manager_->GetTaskRunner()); // Make sure everything is done initializing: SyncWithAllThreads();
diff --git a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc index 90e042c3..ab76c47a 100644 --- a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc +++ b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
@@ -214,8 +214,8 @@ audio_manager_ = base::MakeUnique<FakeAudioManagerWithAssociations>(&log_factory_); audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); - media_stream_manager_ = - base::MakeUnique<MediaStreamManager>(audio_system_.get()); + media_stream_manager_ = base::MakeUnique<MediaStreamManager>( + audio_system_.get(), audio_manager_->GetTaskRunner()); auth_run_loop_ = base::MakeUnique<base::RunLoop>(); host_ = base::MakeRefCounted<MockAudioRendererHost>( auth_run_loop_.get(), process()->GetID(), audio_manager_.get(),
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc index 0e102d74..7cc37705 100644 --- a/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc +++ b/content/browser/renderer_host/media/media_devices_dispatcher_host_unittest.cc
@@ -106,7 +106,8 @@ base::ThreadTaskRunnerHandle::Get()); media_stream_manager_ = base::MakeUnique<MediaStreamManager>( - audio_system_.get(), std::move(video_capture_provider)); + audio_system_.get(), audio_manager_->GetTaskRunner(), + std::move(video_capture_provider)); host_ = base::MakeUnique<MediaDevicesDispatcherHost>( kProcessId, kRenderId, browser_context_.GetMediaDeviceIDSalt(), media_stream_manager_.get());
diff --git a/content/browser/renderer_host/media/media_devices_manager.cc b/content/browser/renderer_host/media/media_devices_manager.cc index 34f51a7f..e6690a4 100644 --- a/content/browser/renderer_host/media/media_devices_manager.cc +++ b/content/browser/renderer_host/media/media_devices_manager.cc
@@ -273,17 +273,10 @@ // TODO(erikchen): Remove ScopedTracker below once crbug.com/458404 is // fixed. - tracked_objects::ScopedTracker tracking_profile2( - FROM_HERE_WITH_EXPLICIT_FUNCTION( - "458404 MediaDevicesManager::GetTaskRunner")); - const scoped_refptr<base::SingleThreadTaskRunner> task_runner = - audio_system_->GetTaskRunner(); - // TODO(erikchen): Remove ScopedTracker below once crbug.com/458404 is - // fixed. tracked_objects::ScopedTracker tracking_profile3( FROM_HERE_WITH_EXPLICIT_FUNCTION( "458404 MediaDevicesManager::DeviceMonitorMac::StartMonitoring")); - browser_main_loop->device_monitor_mac()->StartMonitoring(task_runner); + browser_main_loop->device_monitor_mac()->StartMonitoring(); } #endif @@ -362,9 +355,8 @@ } audio_system_->GetDeviceDescriptions( - base::BindOnce(&MediaDevicesManager::AudioDevicesEnumerated, - weak_factory_.GetWeakPtr(), type), - is_input); + is_input, base::BindOnce(&MediaDevicesManager::AudioDevicesEnumerated, + weak_factory_.GetWeakPtr(), type)); } void MediaDevicesManager::VideoInputDevicesEnumerated(
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc index cff4f3e..18e6e96 100644 --- a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
@@ -251,7 +251,8 @@ mock_video_capture_provider_ = mock_video_capture_provider.get(); // Create our own MediaStreamManager. media_stream_manager_ = base::MakeUnique<MediaStreamManager>( - audio_system_.get(), std::move(mock_video_capture_provider)); + audio_system_.get(), audio_manager_->GetTaskRunner(), + std::move(mock_video_capture_provider)); host_ = base::MakeUnique<MockMediaStreamDispatcherHost>( browser_context_.GetMediaDeviceIDSalt(),
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index e19f03c8..5f0fb79 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -400,11 +400,14 @@ msm->AddLogMessageOnIOThread(message); } -MediaStreamManager::MediaStreamManager(media::AudioSystem* audio_system) - : MediaStreamManager(audio_system, nullptr) {} +MediaStreamManager::MediaStreamManager( + media::AudioSystem* audio_system, + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner) + : MediaStreamManager(audio_system, std::move(audio_task_runner), nullptr) {} MediaStreamManager::MediaStreamManager( media::AudioSystem* audio_system, + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner, std::unique_ptr<VideoCaptureProvider> video_capture_provider) : audio_system_(audio_system), #if defined(OS_WIN) @@ -416,7 +419,7 @@ if (!video_capture_provider) { scoped_refptr<base::SingleThreadTaskRunner> device_task_runner = - audio_system_->GetTaskRunner(); + std::move(audio_task_runner); #if defined(OS_WIN) // Use an STA Video Capture Thread to try to avoid crashes on enumeration of // buggy third party Direct Show modules, http://crbug.com/428958. @@ -1330,10 +1333,10 @@ // TODO(xians): Handle the tab capture sample rate/channel layout // in AudioInputDeviceManager::Open(). if (device_info.device.type != content::MEDIA_TAB_AUDIO_CAPTURE) { - const StreamDeviceInfo* info = - audio_input_device_manager_->GetOpenedDeviceInfoById( + const MediaStreamDevice* device = + audio_input_device_manager_->GetOpenedDeviceById( device_info.session_id); - device_info.device.input = info->device.input; + device_info.device.input = device->input; // Since the audio input device manager will set the input // parameters to the default settings (including supported effects), @@ -1344,7 +1347,7 @@ EnableHotwordEffect(request->controls, &effects); device_info.device.input.set_effects(effects); - device_info.device.matched_output = info->device.matched_output; + device_info.device.matched_output = device->matched_output; } } if (RequestDone(*request))
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h index 3594098..0e6450a 100644 --- a/content/browser/renderer_host/media/media_stream_manager.h +++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -86,12 +86,15 @@ // logging from webrtcLoggingPrivate API. Safe to call from any thread. static void SendMessageToNativeLog(const std::string& message); - explicit MediaStreamManager(media::AudioSystem* audio_system); + MediaStreamManager( + media::AudioSystem* audio_system, + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner); // |audio_system| is required but defaults will be used if either // |video_capture_system| or |device_task_runner| are null. - explicit MediaStreamManager( + MediaStreamManager( media::AudioSystem* audio_system, + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner, std::unique_ptr<VideoCaptureProvider> video_capture_provider); ~MediaStreamManager() override;
diff --git a/content/browser/renderer_host/media/media_stream_manager_unittest.cc b/content/browser/renderer_host/media/media_stream_manager_unittest.cc index f0e968a..e553472 100644 --- a/content/browser/renderer_host/media/media_stream_manager_unittest.cc +++ b/content/browser/renderer_host/media/media_stream_manager_unittest.cc
@@ -168,8 +168,8 @@ : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { audio_manager_.reset(new MockAudioManager()); audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); - media_stream_manager_ = - base::MakeUnique<MediaStreamManager>(audio_system_.get()); + media_stream_manager_ = base::MakeUnique<MediaStreamManager>( + audio_system_.get(), audio_manager_->GetTaskRunner()); base::RunLoop().RunUntilIdle(); }
diff --git a/content/browser/renderer_host/media/video_capture_unittest.cc b/content/browser/renderer_host/media/video_capture_unittest.cc index f87d522..276f0cf 100644 --- a/content/browser/renderer_host/media/video_capture_unittest.cc +++ b/content/browser/renderer_host/media/video_capture_unittest.cc
@@ -130,8 +130,8 @@ switches::kUseFakeDeviceForMediaStream); base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kUseFakeUIForMediaStream); - media_stream_manager_ = - base::MakeUnique<MediaStreamManager>(audio_system_.get()); + media_stream_manager_ = base::MakeUnique<MediaStreamManager>( + audio_system_.get(), audio_manager_->GetTaskRunner()); // Create a Host and connect it to a simulated IPC channel. host_.reset(new VideoCaptureHost(0 /* render_process_id */,
diff --git a/content/browser/renderer_host/render_process_host_browsertest.cc b/content/browser/renderer_host/render_process_host_browsertest.cc index 09908460..b42768d 100644 --- a/content/browser/renderer_host/render_process_host_browsertest.cc +++ b/content/browser/renderer_host/render_process_host_browsertest.cc
@@ -462,6 +462,8 @@ #define KillProcessZerosAudioStreams DISABLED_KillProcessZerosAudioStreams #endif IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, KillProcessZerosAudioStreams) { + // TODO(maxmorin): This test only uses an output stream. There should be a + // similar test for input streams. embedded_test_server()->ServeFilesFromSourceDirectory( media::GetTestDataPath()); ASSERT_TRUE(embedded_test_server()->Start()); @@ -525,6 +527,10 @@ #define StopResetsVideoCaptureStreams DISABLED_StopResetsVideoCaptureStreams #define KillProcessZerosVideoCaptureStreams \ DISABLED_KillProcessZerosVideoCaptureStreams +#define GetUserMediaAudioOnlyIncrementsMediaStreams \ + DISABLED_GetUserMediaAudioOnlyIncrementsMediaStreams +#define KillProcessZerosAudioCaptureStreams \ + DISABLED_KillProcessZerosAudioCaptureStreams #endif // BUILDFLAG(ENABLE_WEBRTC) // Tests that video capture stream count increments when getUserMedia() is @@ -605,5 +611,70 @@ rph->RemoveObserver(this); } +// Tests that media stream count increments when getUserMedia() is +// called with audio only. +IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, + GetUserMediaAudioOnlyIncrementsMediaStreams) { + ASSERT_TRUE(embedded_test_server()->Start()); + NavigateToURL(shell(), + embedded_test_server()->GetURL("/media/getusermedia.html")); + RenderProcessHostImpl* rph = static_cast<RenderProcessHostImpl*>( + shell()->web_contents()->GetMainFrame()->GetProcess()); + std::string result; + EXPECT_TRUE(ExecuteScriptAndExtractString( + shell(), "getUserMediaAndExpectSuccess({video: false, audio: true});", + &result)) + << "Failed to execute javascript."; + EXPECT_EQ(1, rph->get_media_stream_count_for_testing()); +} + +// Tests that media stream counts (used for process priority +// calculations) are properly set and cleared during media playback and renderer +// terminations for audio only streams. +IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, + KillProcessZerosAudioCaptureStreams) { + ASSERT_TRUE(embedded_test_server()->Start()); + NavigateToURL(shell(), + embedded_test_server()->GetURL("/media/getusermedia.html")); + RenderProcessHostImpl* rph = static_cast<RenderProcessHostImpl*>( + shell()->web_contents()->GetMainFrame()->GetProcess()); + std::string result; + EXPECT_TRUE(ExecuteScriptAndExtractString( + shell(), "getUserMediaAndExpectSuccess({video: false, audio: true});", + &result)) + << "Failed to execute javascript."; + EXPECT_EQ(1, rph->get_media_stream_count_for_testing()); + + host_destructions_ = 0; + process_exits_ = 0; + rph->AddObserver(this); + + mojom::TestServicePtr service; + BindInterface(rph, &service); + + { + // Force a bad message event to occur which will terminate the renderer. + base::RunLoop run_loop; + set_process_exit_callback(media::BindToCurrentLoop(run_loop.QuitClosure())); + service->DoSomething(base::BindOnce(&base::DoNothing)); + run_loop.Run(); + } + + { + // Cycle UI and IO loop once to ensure OnChannelClosing() has been delivered + // to audio stream owners and they get a chance to notify of stream closure. + base::RunLoop run_loop; + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, + media::BindToCurrentLoop(run_loop.QuitClosure())); + run_loop.Run(); + } + + EXPECT_EQ(0, rph->get_media_stream_count_for_testing()); + EXPECT_EQ(1, process_exits_); + EXPECT_EQ(0, host_destructions_); + if (!host_destructions_) + rph->RemoveObserver(this); +} + } // namespace } // namespace content
diff --git a/content/browser/renderer_host/render_view_host_unittest.cc b/content/browser/renderer_host/render_view_host_unittest.cc index 3bebdd6e..132ed24e 100644 --- a/content/browser/renderer_host/render_view_host_unittest.cc +++ b/content/browser/renderer_host/render_view_host_unittest.cc
@@ -10,7 +10,6 @@ #include "content/browser/child_process_security_policy_impl.h" #include "content/browser/frame_host/render_frame_host_impl.h" #include "content/browser/frame_host/render_frame_message_filter.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_view_host_delegate_view.h" #include "content/browser/renderer_host/render_widget_helper.h" #include "content/common/frame_messages.h" @@ -23,6 +22,7 @@ #include "content/public/common/drop_data.h" #include "content/public/common/url_constants.h" #include "content/public/test/mock_render_process_host.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_content_browser_client.h" #include "content/test/test_render_view_host.h" #include "content/test/test_web_contents.h"
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc b/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc index d5d386d..68306a45 100644 --- a/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc
@@ -6,11 +6,11 @@ #include "base/run_loop.h" #include "base/test/scoped_task_environment.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_context.h" #include "content/test/dummy_render_widget_host_delegate.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_render_view_host.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc index 168e9b2..077cf8e 100644 --- a/content/browser/renderer_host/render_widget_host_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -23,7 +23,6 @@ #include "content/browser/renderer_host/input/legacy_input_router_impl.h" #include "content/browser/renderer_host/input/mock_widget_input_handler.h" #include "content/browser/renderer_host/input/touch_emulator.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_view_host_delegate_view.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" @@ -39,6 +38,7 @@ #include "content/public/test/test_browser_context.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/test/fake_renderer_compositor_frame_sink.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_render_view_host.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index 2ce5362..122f0ac 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -44,7 +44,6 @@ #include "content/browser/renderer_host/delegated_frame_host_client_aura.h" #include "content/browser/renderer_host/input/input_router.h" #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/overscroll_controller.h" #include "content/browser/renderer_host/overscroll_controller_delegate.h" #include "content/browser/renderer_host/render_view_host_factory.h" @@ -66,6 +65,7 @@ #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_context.h" #include "content/test/fake_renderer_compositor_frame_sink.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_render_view_host.h" #include "content/test/test_web_contents.h" #include "ipc/ipc_message.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc b/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc index 23bdcf77..ae65a4f 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc
@@ -24,7 +24,6 @@ #include "content/browser/compositor/test/no_transport_image_transport_factory.h" #include "content/browser/gpu/compositor_util.h" #include "content/browser/renderer_host/frame_connector_delegate.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/common/view_messages.h" @@ -33,6 +32,7 @@ #include "content/public/test/test_browser_context.h" #include "content/test/dummy_render_widget_host_delegate.h" #include "content/test/fake_renderer_compositor_frame_sink.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_render_view_host.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/compositor/compositor.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm index ce453723..56d457dd 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper_unittest.mm
@@ -14,12 +14,12 @@ #include "base/threading/thread_task_runner_handle.h" #include "content/browser/compositor/test/no_transport_image_transport_factory.h" #include "content/browser/gpu/compositor_util.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/common/input_messages.h" #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_context.h" +#include "content/test/mock_widget_impl.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm index 97ca4ff2..0e01de7 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -24,7 +24,6 @@ #include "content/browser/compositor/test/no_transport_image_transport_factory.h" #include "content/browser/frame_host/render_widget_host_view_guest.h" #include "content/browser/gpu/compositor_util.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/text_input_manager.h" #include "content/common/input_messages.h" @@ -37,6 +36,7 @@ #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_context.h" #include "content/public/test/test_utils.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_render_view_host.h" #include "gpu/ipc/common/gpu_messages.h" #include "gpu/ipc/service/image_transport_surface.h"
diff --git a/content/browser/renderer_host/text_input_client_mac_unittest.mm b/content/browser/renderer_host/text_input_client_mac_unittest.mm index e8cee18..2cda8306 100644 --- a/content/browser/renderer_host/text_input_client_mac_unittest.mm +++ b/content/browser/renderer_host/text_input_client_mac_unittest.mm
@@ -12,7 +12,6 @@ #include "base/single_thread_task_runner.h" #include "base/test/scoped_task_environment.h" #include "base/threading/thread.h" -#include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_impl.h" @@ -20,6 +19,7 @@ #include "content/common/text_input_client_messages.h" #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_context.h" +#include "content/test/mock_widget_impl.h" #include "ipc/ipc_test_sink.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h"
diff --git a/content/browser/security_exploit_browsertest.cc b/content/browser/security_exploit_browsertest.cc index 90b2d3ae..241fcb55 100644 --- a/content/browser/security_exploit_browsertest.cc +++ b/content/browser/security_exploit_browsertest.cc
@@ -41,6 +41,7 @@ #include "content/public/test/test_utils.h" #include "content/shell/browser/shell.h" #include "content/test/content_browser_test_utils_internal.h" +#include "content/test/mock_widget_impl.h" #include "content/test/test_content_browser_client.h" #include "ipc/ipc_security_test_util.h" #include "net/dns/mock_host_resolver.h" @@ -178,18 +179,6 @@ } // namespace -class WidgetImpl : public mojom::Widget { - public: - explicit WidgetImpl(mojo::InterfaceRequest<mojom::Widget> request) - : binding_(this, std::move(request)) {} - - void GetWidgetInputHandler( - mojom::WidgetInputHandlerRequest request) override {} - - private: - mojo::Binding<mojom::Widget> binding_; -}; - // The goal of these tests will be to "simulate" exploited renderer processes, // which can send arbitrary IPC messages and confuse browser process internal // state, leading to security bugs. We are trying to verify that the browser @@ -311,8 +300,8 @@ EXPECT_NE(MSG_ROUTING_NONE, duplicate_routing_id); mojom::WidgetPtr widget; - std::unique_ptr<WidgetImpl> widget_impl = - base::MakeUnique<WidgetImpl>(mojo::MakeRequest(&widget)); + std::unique_ptr<MockWidgetImpl> widget_impl = + base::MakeUnique<MockWidgetImpl>(mojo::MakeRequest(&widget)); // Since this test executes on the UI thread and hopping threads might cause // different timing in the test, let's simulate a CreateNewWidget call coming
diff --git a/content/child/loader/cors_url_loader.cc b/content/child/loader/cors_url_loader.cc index ae94d0d6..8823f5b 100644 --- a/content/child/loader/cors_url_loader.cc +++ b/content/child/loader/cors_url_loader.cc
@@ -24,6 +24,10 @@ mojom::URLLoaderClientPtr network_client; network_client_binding_.Bind(mojo::MakeRequest(&network_client)); + // Binding |this| as an unretained pointer is safe because + // |network_client_binding_| shares this object's lifetime. + network_client_binding_.set_connection_error_handler(base::BindOnce( + &CORSURLLoader::OnUpstreamConnectionError, base::Unretained(this))); network_loader_factory_->CreateLoaderAndStart( mojo::MakeRequest(&network_loader_), routing_id, request_id, options, resource_request, std::move(network_client), traffic_annotation); @@ -84,4 +88,13 @@ forwarding_client_->OnComplete(status); } +void CORSURLLoader::OnUpstreamConnectionError() { + // |network_client_binding_| has experienced a connection error and will no + // longer call any of the mojom::URLLoaderClient methods above. The client + // pipe to the downstream client is closed to inform it of this failure. The + // client should respond by closing its mojom::URLLoader pipe which will cause + // this object to be destroyed. + forwarding_client_.reset(); +} + } // namespace content
diff --git a/content/child/loader/cors_url_loader.h b/content/child/loader/cors_url_loader.h index e1cce9db..2e3989b0 100644 --- a/content/child/loader/cors_url_loader.h +++ b/content/child/loader/cors_url_loader.h
@@ -31,37 +31,31 @@ ~CORSURLLoader() override; // mojom::URLLoader overrides: - void FollowRedirect() override; - void SetPriority(net::RequestPriority priority, int intra_priority_value) override; // mojom::URLLoaderClient overrides: - void OnReceiveResponse(const ResourceResponseHead& head, const base::Optional<net::SSLInfo>& ssl_info, mojom::DownloadedTempFilePtr downloaded_file) override; - void OnReceiveRedirect(const net::RedirectInfo& redirect_info, const ResourceResponseHead& head) override; - void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override; - void OnUploadProgress(int64_t current_position, int64_t total_size, base::OnceCallback<void()> callback) override; - void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override; - void OnTransferSizeUpdated(int32_t transfer_size_diff) override; - void OnStartLoadingResponseBody( mojo::ScopedDataPipeConsumerHandle body) override; - void OnComplete( const ResourceRequestCompletionStatus& completion_status) override; + // Called when there is a connection error on the upstream pipe used for the + // actual request. + void OnUpstreamConnectionError(); + private: // This raw URLLoaderFactory pointer is shared with the CORSURLLoaderFactory // that created and owns this object.
diff --git a/content/common/accessibility_messages.h b/content/common/accessibility_messages.h index f2cbf5a..dfa018a2 100644 --- a/content/common/accessibility_messages.h +++ b/content/common/accessibility_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_ +#define CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_ + // IPC messages for accessibility. -// Multiply-included message file, hence no include guard. #include "content/common/ax_content_node_data.h" #include "content/common/content_export.h" @@ -212,3 +214,5 @@ IPC_MESSAGE_ROUTED2(AccessibilityHostMsg_SnapshotResponse, int /* callback_id */, content::AXContentTreeUpdate) + +#endif // CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_
diff --git a/content/common/all_messages.h b/content/common/all_messages.h index 8f33d436d..31cc3ab 100644 --- a/content/common/all_messages.h +++ b/content/common/all_messages.h
@@ -12,5 +12,9 @@ #include "content/common/content_message_generator.h" #if BUILDFLAG(ENABLE_PLUGINS) +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" // nogncheck +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif #endif
diff --git a/content/common/android/sync_compositor_messages.h b/content/common/android/sync_compositor_messages.h index b94022a..e692af0 100644 --- a/content/common/android/sync_compositor_messages.h +++ b/content/common/android/sync_compositor_messages.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ +#define CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ + #include <stddef.h> #include "base/memory/shared_memory_handle.h" @@ -16,8 +19,8 @@ #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/scroll_offset.h" -#ifndef CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ -#define CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ +#ifndef INTERNAL_CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ +#define INTERNAL_CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ namespace content { @@ -75,9 +78,7 @@ } // namespace content -#endif // CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ - -// Multiply-included message file, hence no include guard. +#endif // INTERNAL_CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ #undef IPC_MESSAGE_EXPORT #define IPC_MESSAGE_EXPORT CONTENT_EXPORT @@ -171,3 +172,5 @@ IPC_MESSAGE_ROUTED2(SyncCompositorHostMsg_ReturnFrame, uint32_t /* layer_tree_frame_sink_id */, base::Optional<cc::CompositorFrame>); + +#endif // CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_
diff --git a/content/common/appcache_messages.h b/content/common/appcache_messages.h index 95964f7..23bb677d 100644 --- a/content/common/appcache_messages.h +++ b/content/common/appcache_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, hence no include guard. +#ifndef CONTENT_COMMON_APPCACHE_MESSAGES_H_ +#define CONTENT_COMMON_APPCACHE_MESSAGES_H_ #include "ipc/ipc_message_macros.h" @@ -160,3 +161,5 @@ IPC_MESSAGE_CONTROL2(AppCacheMsg_ContentBlocked, int /* host_id */, GURL /* manifest_url */) + +#endif // CONTENT_COMMON_APPCACHE_MESSAGES_H_
diff --git a/content/common/browser_plugin/browser_plugin_messages.h b/content/common/browser_plugin/browser_plugin_messages.h index 1258423..2cdec7c 100644 --- a/content/common/browser_plugin/browser_plugin_messages.h +++ b/content/common/browser_plugin/browser_plugin_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message header, no traditional include guard. +#ifndef CONTENT_COMMON_BROWSER_PLUGIN_BROWSER_PLUGIN_MESSAGES_H_ +#define CONTENT_COMMON_BROWSER_PLUGIN_BROWSER_PLUGIN_MESSAGES_H_ #include <string> @@ -206,3 +207,5 @@ IPC_MESSAGE_CONTROL2(BrowserPluginMsg_SetTooltipText, int /* browser_plugin_instance_id */, base::string16 /* tooltip_text */) + +#endif // CONTENT_COMMON_BROWSER_PLUGIN_BROWSER_PLUGIN_MESSAGES_H_
diff --git a/content/common/cache_storage/cache_storage_messages.h b/content/common/cache_storage/cache_storage_messages.h index 5f2584f..5bf579ec 100644 --- a/content/common/cache_storage/cache_storage_messages.h +++ b/content/common/cache_storage/cache_storage_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Message definition file, included multiple times, hence no include guard. +#ifndef CONTENT_COMMON_CACHE_STORAGE_CACHE_STORAGE_MESSAGES_H_ +#define CONTENT_COMMON_CACHE_STORAGE_CACHE_STORAGE_MESSAGES_H_ #include <string> #include <vector> @@ -191,3 +192,5 @@ int /* thread_id */, int /* request_id */, blink::WebServiceWorkerCacheError) + +#endif // CONTENT_COMMON_CACHE_STORAGE_CACHE_STORAGE_MESSAGES_H_
diff --git a/content/common/child_process_messages.h b/content/common/child_process_messages.h index 90227084..ca6b355 100644 --- a/content/common/child_process_messages.h +++ b/content/common/child_process_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_CHILD_PROCESS_MESSAGES_H_ +#define CONTENT_COMMON_CHILD_PROCESS_MESSAGES_H_ + // Common IPC messages used for child processes. -// Multiply-included message file, hence no include guard. #include <stdint.h> @@ -178,3 +180,5 @@ base::PlatformThreadId, base::ThreadPriority) #endif + +#endif // CONTENT_COMMON_CHILD_PROCESS_MESSAGES_H_
diff --git a/content/common/clipboard_messages.h b/content/common/clipboard_messages.h index f026d7c..3b3d1be 100644 --- a/content/common/clipboard_messages.h +++ b/content/common/clipboard_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, so no include guard. +#ifndef CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ +#define CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ #include <stdint.h> @@ -23,15 +24,15 @@ #include "url/ipc/url_param_traits.h" // Singly-included section for types and/or struct declarations. -#ifndef CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ -#define CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ +#ifndef INTERNAL_CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ +#define INTERNAL_CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ // Custom data consists of arbitrary MIME types an untrusted sender wants to // write to the clipboard. Note that exposing a general interface to do this is // dangerous--an untrusted sender could cause a DoS or code execution. typedef std::map<base::string16, base::string16> CustomDataMap; -#endif // CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ +#endif // INTERNAL_CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ #undef IPC_MESSAGE_EXPORT #define IPC_MESSAGE_EXPORT CONTENT_EXPORT @@ -112,3 +113,5 @@ IPC_MESSAGE_CONTROL1(ClipboardHostMsg_FindPboardWriteStringAsync, base::string16 /* text */) #endif + +#endif // CONTENT_COMMON_CLIPBOARD_MESSAGES_H_
diff --git a/content/common/content_message_generator.h b/content/common/content_message_generator.h index 9386b8f..efc110e 100644 --- a/content/common/content_message_generator.h +++ b/content/common/content_message_generator.h
@@ -4,54 +4,212 @@ // Multiply-included file, hence no include guard. +#undef CONTENT_COMMON_CHILD_PROCESS_MESSAGES_H_ #include "content/common/child_process_messages.h" +#ifndef CONTENT_COMMON_CHILD_PROCESS_MESSAGES_H_ +#error "Failed to include content/common/child_process_messages.h" +#endif #include "build/build_config.h" +#undef CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_ #include "content/common/accessibility_messages.h" +#ifndef CONTENT_COMMON_ACCESSIBILITY_MESSAGES_H_ +#error "Failed to include content/common/accessibility_messages.h" +#endif +#undef CONTENT_COMMON_APPCACHE_MESSAGES_H_ #include "content/common/appcache_messages.h" +#ifndef CONTENT_COMMON_APPCACHE_MESSAGES_H_ +#error "Failed to include content/common/appcache_messages.h" +#endif +#undef CONTENT_COMMON_BROWSER_PLUGIN_BROWSER_PLUGIN_MESSAGES_H_ #include "content/common/browser_plugin/browser_plugin_messages.h" +#ifndef CONTENT_COMMON_BROWSER_PLUGIN_BROWSER_PLUGIN_MESSAGES_H_ +#error \ + "Failed to include content/common/browser_plugin/browser_plugin_messages.h" +#endif +#undef CONTENT_COMMON_CACHE_STORAGE_CACHE_STORAGE_MESSAGES_H_ #include "content/common/cache_storage/cache_storage_messages.h" +#ifndef CONTENT_COMMON_CACHE_STORAGE_CACHE_STORAGE_MESSAGES_H_ +#error "Failed to include content/common/cache_storage/cache_storage_messages.h" +#endif +#undef CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ #include "content/common/clipboard_messages.h" +#ifndef CONTENT_COMMON_CLIPBOARD_MESSAGES_H_ +#error "Failed to include content/common/clipboard_messages.h" +#endif +#undef CONTENT_COMMON_DATABASE_MESSAGES_H_ #include "content/common/database_messages.h" +#ifndef CONTENT_COMMON_DATABASE_MESSAGES_H_ +#error "Failed to include content/common/database_messages.h" +#endif +#undef CONTENT_COMMON_DEVTOOLS_MESSAGES_H_ #include "content/common/devtools_messages.h" +#ifndef CONTENT_COMMON_DEVTOOLS_MESSAGES_H_ +#error "Failed to include content/common/devtools_messages.h" +#endif +#undef CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MESSAGES_H_ #include "content/common/dom_storage/dom_storage_messages.h" +#ifndef CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MESSAGES_H_ +#error "Failed to include content/common/dom_storage/dom_storage_messages.h" +#endif +#undef CONTENT_COMMON_DRAG_MESSAGES_H_ #include "content/common/drag_messages.h" +#ifndef CONTENT_COMMON_DRAG_MESSAGES_H_ +#error "Failed to include content/common/drag_messages.h" +#endif #include "content/common/drag_traits.h" +#undef CONTENT_COMMON_FILE_UTILITIES_MESSAGES_H_ #include "content/common/file_utilities_messages.h" +#ifndef CONTENT_COMMON_FILE_UTILITIES_MESSAGES_H_ +#error "Failed to include content/common/file_utilities_messages.h" +#endif +#undef CONTENT_COMMON_FILEAPI_FILE_SYSTEM_MESSAGES_H_ #include "content/common/fileapi/file_system_messages.h" +#ifndef CONTENT_COMMON_FILEAPI_FILE_SYSTEM_MESSAGES_H_ +#error "Failed to include content/common/fileapi/file_system_messages.h" +#endif +#undef CONTENT_COMMON_FILEAPI_WEBBLOB_MESSAGES_H_ #include "content/common/fileapi/webblob_messages.h" +#ifndef CONTENT_COMMON_FILEAPI_WEBBLOB_MESSAGES_H_ +#error "Failed to include content/common/fileapi/webblob_messages.h" +#endif +#undef CONTENT_COMMON_FRAME_MESSAGES_H_ #include "content/common/frame_messages.h" +#ifndef CONTENT_COMMON_FRAME_MESSAGES_H_ +#error "Failed to include content/common/frame_messages.h" +#endif +#undef CONTENT_COMMON_INPUT_MESSAGES_H_ #include "content/common/input_messages.h" +#ifndef CONTENT_COMMON_INPUT_MESSAGES_H_ +#error "Failed to include content/common/input_messages.h" +#endif +#undef CONTENT_COMMON_MEDIA_AEC_DUMP_MESSAGES_H_ #include "content/common/media/aec_dump_messages.h" +#ifndef CONTENT_COMMON_MEDIA_AEC_DUMP_MESSAGES_H_ +#error "Failed to include content/common/media/aec_dump_messages.h" +#endif +#undef CONTENT_COMMON_MEDIA_AUDIO_MESSAGES_H_ #include "content/common/media/audio_messages.h" +#ifndef CONTENT_COMMON_MEDIA_AUDIO_MESSAGES_H_ +#error "Failed to include content/common/media/audio_messages.h" +#endif +#undef CONTENT_COMMON_MEDIA_MEDIA_PLAYER_DELEGATE_MESSAGES_H_ #include "content/common/media/media_player_delegate_messages.h" +#ifndef CONTENT_COMMON_MEDIA_MEDIA_PLAYER_DELEGATE_MESSAGES_H_ +#error "Failed to include content/common/media/media_player_delegate_messages.h" +#endif +#undef CONTENT_COMMON_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_MESSAGES_H_ #include "content/common/media/media_stream_track_metrics_host_messages.h" +#ifndef CONTENT_COMMON_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_MESSAGES_H_ +#error \ + "Failed to include content/common/media/media_stream_track_metrics_host_messages.h" +#endif +#undef CONTENT_COMMON_MEDIA_MIDI_MESSAGES_H_ #include "content/common/media/midi_messages.h" +#ifndef CONTENT_COMMON_MEDIA_MIDI_MESSAGES_H_ +#error "Failed to include content/common/media/midi_messages.h" +#endif +#undef CONTENT_COMMON_MEDIA_PEER_CONNECTION_TRACKER_MESSAGES_H_ #include "content/common/media/peer_connection_tracker_messages.h" +#ifndef CONTENT_COMMON_MEDIA_PEER_CONNECTION_TRACKER_MESSAGES_H_ +#error \ + "Failed to include content/common/media/peer_connection_tracker_messages.h" +#endif +#undef CONTENT_COMMON_PAGE_MESSAGES_H_ #include "content/common/page_messages.h" +#ifndef CONTENT_COMMON_PAGE_MESSAGES_H_ +#error "Failed to include content/common/page_messages.h" +#endif +#undef CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ #include "content/common/platform_notification_messages.h" +#ifndef CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ +#error "Failed to include content/common/platform_notification_messages.h" +#endif +#undef CONTENT_COMMON_QUOTA_MESSAGES_H_ #include "content/common/quota_messages.h" +#ifndef CONTENT_COMMON_QUOTA_MESSAGES_H_ +#error "Failed to include content/common/quota_messages.h" +#endif +#undef CONTENT_COMMON_RENDER_PROCESS_MESSAGES_H_ #include "content/common/render_process_messages.h" +#ifndef CONTENT_COMMON_RENDER_PROCESS_MESSAGES_H_ +#error "Failed to include content/common/render_process_messages.h" +#endif +#undef CONTENT_COMMON_RESOURCE_MESSAGES_H_ #include "content/common/resource_messages.h" +#ifndef CONTENT_COMMON_RESOURCE_MESSAGES_H_ +#error "Failed to include content/common/resource_messages.h" +#endif +#undef CONTENT_COMMON_SERVICE_WORKER_EMBEDDED_WORKER_MESSAGES_H_ #include "content/common/service_worker/embedded_worker_messages.h" +#ifndef CONTENT_COMMON_SERVICE_WORKER_EMBEDDED_WORKER_MESSAGES_H_ +#error \ + "Failed to include content/common/service_worker/embedded_worker_messages.h" +#endif +#undef CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_MESSAGES_H_ #include "content/common/service_worker/service_worker_messages.h" +#ifndef CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_MESSAGES_H_ +#error \ + "Failed to include content/common/service_worker/service_worker_messages.h" +#endif +#undef CONTENT_COMMON_SPEECH_RECOGNITION_MESSAGES_H_ #include "content/common/speech_recognition_messages.h" +#ifndef CONTENT_COMMON_SPEECH_RECOGNITION_MESSAGES_H_ +#error "Failed to include content/common/speech_recognition_messages.h" +#endif +#undef CONTENT_COMMON_TEXT_INPUT_CLIENT_MESSAGES_H_ #include "content/common/text_input_client_messages.h" +#ifndef CONTENT_COMMON_TEXT_INPUT_CLIENT_MESSAGES_H_ +#error "Failed to include content/common/text_input_client_messages.h" +#endif +#undef CONTENT_COMMON_VIEW_MESSAGES_H_ #include "content/common/view_messages.h" +#ifndef CONTENT_COMMON_VIEW_MESSAGES_H_ +#error "Failed to include content/common/view_messages.h" +#endif +#undef CONTENT_COMMON_WORKER_MESSAGES_H_ #include "content/common/worker_messages.h" +#ifndef CONTENT_COMMON_WORKER_MESSAGES_H_ +#error "Failed to include content/common/worker_messages.h" +#endif #include "media/media_features.h" #if BUILDFLAG(ENABLE_WEBRTC) +#undef CONTENT_COMMON_P2P_MESSAGES_H_ #include "content/common/p2p_messages.h" +#ifndef CONTENT_COMMON_P2P_MESSAGES_H_ +#error "Failed to include content/common/p2p_messages.h" +#endif #endif #if defined(OS_ANDROID) +#undef CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ #include "content/common/android/sync_compositor_messages.h" +#ifndef CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_ +#error "Failed to include content/common/android/sync_compositor_messages.h" +#endif +#undef CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_ #include "content/common/gin_java_bridge_messages.h" +#ifndef CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_ +#error "Failed to include content/common/gin_java_bridge_messages.h" +#endif +#undef CONTENT_COMMON_MEDIA_MEDIA_PLAYER_MESSAGES_ANDROID_H_ #include "content/common/media/media_player_messages_android.h" +#ifndef CONTENT_COMMON_MEDIA_MEDIA_PLAYER_MESSAGES_ANDROID_H_ +#error "Failed to include content/common/media/media_player_messages_android.h" +#endif +#undef CONTENT_COMMON_MEDIA_SURFACE_VIEW_MANAGER_MESSAGES_ANDROID_H_ #include "content/common/media/surface_view_manager_messages_android.h" +#ifndef CONTENT_COMMON_MEDIA_SURFACE_VIEW_MANAGER_MESSAGES_ANDROID_H_ +#error \ + "Failed to include content/common/media/surface_view_manager_messages_android.h" +#endif #endif // defined(OS_ANDROID) #if defined(OS_WIN) +#undef CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ #include "content/common/dwrite_font_proxy_messages.h" +#ifndef CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ +#error "Failed to include content/common/dwrite_font_proxy_messages.h" +#endif #endif // defined(OS_WIN)
diff --git a/content/common/database_messages.h b/content/common/database_messages.h index 5f39cc5..25143b2 100644 --- a/content/common/database_messages.h +++ b/content/common/database_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, no include guard. +#ifndef CONTENT_COMMON_DATABASE_MESSAGES_H_ +#define CONTENT_COMMON_DATABASE_MESSAGES_H_ #include <stdint.h> @@ -83,3 +84,5 @@ url::Origin /* origin */, base::string16 /* database name */, int /* error */) + +#endif // CONTENT_COMMON_DATABASE_MESSAGES_H_
diff --git a/content/common/devtools_messages.h b/content/common/devtools_messages.h index d8fef04..49360f7 100644 --- a/content/common/devtools_messages.h +++ b/content/common/devtools_messages.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_DEVTOOLS_MESSAGES_H_ +#define CONTENT_COMMON_DEVTOOLS_MESSAGES_H_ + // Developer tools consist of the following parts: // // DevToolsAgent lives in the renderer of an inspected page and provides access @@ -38,7 +41,6 @@ // // This file describes developer tools message types. -// Multiply-included message file, no standard include guard. #include <map> #include <string> @@ -135,3 +137,5 @@ // Transport from Inspector frontend to frontend host. IPC_MESSAGE_ROUTED1(DevToolsHostMsg_DispatchOnEmbedder, std::string /* message */) + +#endif // CONTENT_COMMON_DEVTOOLS_MESSAGES_H_
diff --git a/content/common/dom_storage/dom_storage_messages.h b/content/common/dom_storage/dom_storage_messages.h index dc552833..af19165 100644 --- a/content/common/dom_storage/dom_storage_messages.h +++ b/content/common/dom_storage/dom_storage_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, no traditional include guard. +#ifndef CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MESSAGES_H_ +#define CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MESSAGES_H_ #include <stdint.h> @@ -99,3 +100,5 @@ // Used to flush the ipc message queue. IPC_SYNC_MESSAGE_CONTROL0_0(DOMStorageHostMsg_FlushMessages) + +#endif // CONTENT_COMMON_DOM_STORAGE_DOM_STORAGE_MESSAGES_H_
diff --git a/content/common/drag_messages.h b/content/common/drag_messages.h index d1b50db..9d790d0e 100644 --- a/content/common/drag_messages.h +++ b/content/common/drag_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_DRAG_MESSAGES_H_ +#define CONTENT_COMMON_DRAG_MESSAGES_H_ + // IPC messages for drag and drop. -// Multiply-included message file, hence no include guard. #include <vector> @@ -68,3 +70,5 @@ // |is_drop_target| is true if the mouse is over a valid drop target. IPC_MESSAGE_ROUTED1(DragHostMsg_UpdateDragCursor, blink::WebDragOperation /* drag_operation */) + +#endif // CONTENT_COMMON_DRAG_MESSAGES_H_
diff --git a/content/common/dwrite_font_proxy_messages.h b/content/common/dwrite_font_proxy_messages.h index 027ce33..e8534eb 100644 --- a/content/common/dwrite_font_proxy_messages.h +++ b/content/common/dwrite_font_proxy_messages.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ +#define CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ + #include <stdint.h> #include <utility> @@ -16,13 +19,13 @@ #define IPC_MESSAGE_EXPORT CONTENT_EXPORT #define IPC_MESSAGE_START DWriteFontProxyMsgStart -#ifndef CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ -#define CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ +#ifndef INTERNAL_CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ +#define INTERNAL_CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ // The macros can't handle a complex template declaration, so we typedef it. typedef std::pair<base::string16, base::string16> DWriteStringPair; -#endif // CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ +#endif // INTERNAL_CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_ IPC_STRUCT_BEGIN(DWriteFontStyle) IPC_STRUCT_MEMBER(uint16_t, font_weight) @@ -76,3 +79,5 @@ uint32_t /* reading_direction */, base::string16 /* base_family_name - optional */, MapCharactersResult /* out */) + +#endif // CONTENT_COMMON_DWRITE_FONT_PROXY_MESSAGES_H_
diff --git a/content/common/file_utilities_messages.h b/content/common/file_utilities_messages.h index 09e37b0..fae0aef 100644 --- a/content/common/file_utilities_messages.h +++ b/content/common/file_utilities_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, so no include guard. +#ifndef CONTENT_COMMON_FILE_UTILITIES_MESSAGES_H_ +#define CONTENT_COMMON_FILE_UTILITIES_MESSAGES_H_ #include "content/public/common/common_param_traits.h" #include "ipc/ipc_message_macros.h" @@ -17,3 +18,5 @@ base::FilePath /* path */, base::File::Info /* result */, base::File::Error /* status */) + +#endif // CONTENT_COMMON_FILE_UTILITIES_MESSAGES_H_
diff --git a/content/common/fileapi/file_system_messages.h b/content/common/fileapi/file_system_messages.h index 894823e..a7812f3 100644 --- a/content/common/fileapi/file_system_messages.h +++ b/content/common/fileapi/file_system_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_FILEAPI_FILE_SYSTEM_MESSAGES_H_ +#define CONTENT_COMMON_FILEAPI_FILE_SYSTEM_MESSAGES_H_ + // IPC messages for the file system. -// Multiply-included message file, hence no include guard. #include <stdint.h> @@ -163,3 +165,5 @@ IPC_SYNC_MESSAGE_CONTROL1_1(FileSystemHostMsg_SyncGetPlatformPath, GURL /* file path */, base::FilePath /* platform_path */) + +#endif // CONTENT_COMMON_FILEAPI_FILE_SYSTEM_MESSAGES_H_
diff --git a/content/common/fileapi/webblob_messages.h b/content/common/fileapi/webblob_messages.h index 4822920..40808bb39 100644 --- a/content/common/fileapi/webblob_messages.h +++ b/content/common/fileapi/webblob_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_FILEAPI_WEBBLOB_MESSAGES_H_ +#define CONTENT_COMMON_FILEAPI_WEBBLOB_MESSAGES_H_ + // IPC messages for HTML5 Blob and Stream. -// Multiply-included message file, hence no include guard. #include <stddef.h> @@ -96,3 +98,5 @@ std::string /* uuid */) IPC_MESSAGE_CONTROL1(BlobHostMsg_RevokePublicURL, GURL) + +#endif // CONTENT_COMMON_FILEAPI_WEBBLOB_MESSAGES_H_ \ No newline at end of file
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index 7fcc512..0e66797 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_FRAME_MESSAGES_H_ +#define CONTENT_COMMON_FRAME_MESSAGES_H_ + // IPC messages for interacting with frames. -// Multiply-included message file, hence no include guard. #include <stddef.h> #include <stdint.h> @@ -73,8 +75,8 @@ #endif // Singly-included section for type definitions. -#ifndef CONTENT_COMMON_FRAME_MESSAGES_H_ -#define CONTENT_COMMON_FRAME_MESSAGES_H_ +#ifndef INTERNAL_CONTENT_COMMON_FRAME_MESSAGES_H_ +#define INTERNAL_CONTENT_COMMON_FRAME_MESSAGES_H_ using FrameMsg_GetSerializedHtmlWithLocalLinks_UrlMap = std::map<GURL, base::FilePath>; @@ -84,7 +86,7 @@ using FrameMsg_SerializeAsMHTML_FrameRoutingIdToContentIdMap = std::map<int, std::string>; -#endif // CONTENT_COMMON_FRAME_MESSAGES_H_ +#endif // INTERNAL_CONTENT_COMMON_FRAME_MESSAGES_H_ #undef IPC_MESSAGE_EXPORT #define IPC_MESSAGE_EXPORT CONTENT_EXPORT @@ -1730,3 +1732,5 @@ // independent FrameMsg, then ifdefs for platform specific FrameMsg, then // platform independent FrameHostMsg, then ifdefs for platform specific // FrameHostMsg. + +#endif // CONTENT_COMMON_FRAME_MESSAGES_H_
diff --git a/content/common/gin_java_bridge_messages.h b/content/common/gin_java_bridge_messages.h index 64a68747..69efa4f 100644 --- a/content/common/gin_java_bridge_messages.h +++ b/content/common/gin_java_bridge_messages.h
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// IPC messages for injected Java objects (Gin-based implementation). +#ifndef CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_ +#define CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_ -// Multiply-included message file, hence no include guard. +// IPC messages for injected Java objects (Gin-based implementation). #include <stdint.h> @@ -73,3 +74,5 @@ // this expectation has failed. IPC_MESSAGE_ROUTED1(GinJavaBridgeHostMsg_ObjectWrapperDeleted, int32_t /* object_id */) + +#endif // CONTENT_COMMON_GIN_JAVA_BRIDGE_MESSAGES_H_
diff --git a/content/common/input_messages.h b/content/common/input_messages.h index 7355b8d..9c0aeb0 100644 --- a/content/common/input_messages.h +++ b/content/common/input_messages.h
@@ -2,12 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_INPUT_MESSAGES_H_ +#define CONTENT_COMMON_INPUT_MESSAGES_H_ + // IPC messages for input events and other messages that require processing in // order relative to input events. -// Multiply-included message file, hence no include guard. #include "base/strings/string16.h" #include "build/build_config.h" +#include "cc/input/scroll_boundary_behavior.h" #include "cc/input/touch_action.h" #include "content/common/content_export.h" #include "content/common/content_param_traits.h" @@ -80,12 +83,22 @@ blink::WebGestureEvent::InertialPhaseState::kLastPhase) IPC_ENUM_TRAITS_MAX_VALUE(blink::WebTouchPoint::State, blink::WebTouchPoint::State::kStateMax) +IPC_ENUM_TRAITS_MAX_VALUE( + cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType, + cc::ScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeMax) IPC_STRUCT_TRAITS_BEGIN(ui::DidOverscrollParams) IPC_STRUCT_TRAITS_MEMBER(accumulated_overscroll) IPC_STRUCT_TRAITS_MEMBER(latest_overscroll_delta) IPC_STRUCT_TRAITS_MEMBER(current_fling_velocity) IPC_STRUCT_TRAITS_MEMBER(causal_event_viewport_point) + IPC_STRUCT_TRAITS_MEMBER(scroll_boundary_behavior) +IPC_STRUCT_TRAITS_END() + +IPC_STRUCT_TRAITS_BEGIN(cc::ScrollBoundaryBehavior) + IPC_STRUCT_TRAITS_MEMBER(x) + IPC_STRUCT_TRAITS_MEMBER(y) IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(content::EditCommand) @@ -361,3 +374,5 @@ // independent InputMsg, then ifdefs for platform specific InputMsg, then // platform independent InputHostMsg, then ifdefs for platform specific // InputHostMsg. + +#endif // CONTENT_COMMON_INPUT_MESSAGES_H_
diff --git a/content/common/loader_util.cc b/content/common/loader_util.cc index 27170c67..0886c2b9 100644 --- a/content/common/loader_util.cc +++ b/content/common/loader_util.cc
@@ -41,7 +41,8 @@ scoped_refptr<ResourceDevToolsInfo> BuildDevToolsInfo( const net::URLRequest& request, - const net::HttpRawRequestHeaders& raw_request_headers) { + const net::HttpRawRequestHeaders& raw_request_headers, + const net::HttpResponseHeaders* raw_response_headers) { scoped_refptr<ResourceDevToolsInfo> info = new ResourceDevToolsInfo(); const net::HttpResponseInfo& response_info = request.response_info(); @@ -65,21 +66,22 @@ info->request_headers_text = std::move(text); } - const net::HttpResponseHeaders* response_headers = request.response_headers(); - if (response_headers) { - info->http_status_code = response_headers->response_code(); - info->http_status_text = response_headers->GetStatusText(); + if (!raw_response_headers) + raw_response_headers = request.response_headers(); + if (raw_response_headers) { + info->http_status_code = raw_response_headers->response_code(); + info->http_status_text = raw_response_headers->GetStatusText(); std::string name; std::string value; for (size_t it = 0; - response_headers->EnumerateHeaderLines(&it, &name, &value);) { + raw_response_headers->EnumerateHeaderLines(&it, &name, &value);) { info->response_headers.push_back(std::make_pair(name, value)); } if (report_headers_text) { info->response_headers_text = net::HttpUtil::ConvertHeadersBackToHTTPResponse( - response_headers->raw_headers()); + raw_response_headers->raw_headers()); } } return info;
diff --git a/content/common/loader_util.h b/content/common/loader_util.h index 99e74664..8f232c3 100644 --- a/content/common/loader_util.h +++ b/content/common/loader_util.h
@@ -9,6 +9,7 @@ namespace net { class HttpRawRequestHeaders; +class HttpResponseHeaders; class URLRequest; } @@ -27,7 +28,8 @@ // Fill ResourceDevToolsInfo based on raw headers. scoped_refptr<ResourceDevToolsInfo> BuildDevToolsInfo( const net::URLRequest& request, - const net::HttpRawRequestHeaders& raw_request_headers); + const net::HttpRawRequestHeaders& raw_request_headers, + const net::HttpResponseHeaders* raw_response_headers); } // namespace content
diff --git a/content/common/media/aec_dump_messages.h b/content/common/media/aec_dump_messages.h index 33e727d..427c82bb 100644 --- a/content/common/media/aec_dump_messages.h +++ b/content/common/media/aec_dump_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_AEC_DUMP_MESSAGES_H_ +#define CONTENT_COMMON_MEDIA_AEC_DUMP_MESSAGES_H_ + // IPC messages for the AEC dump. -// Multiply-included message file, hence no include guard. #include "content/common/content_export.h" #include "ipc/ipc_message_macros.h" @@ -39,3 +41,5 @@ IPC_MESSAGE_CONTROL2(AudioProcessingMsg_EnableAec3, int /* id */, bool /* enable */) + +#endif // CONTENT_COMMON_MEDIA_AEC_DUMP_MESSAGES_H_
diff --git a/content/common/media/audio_messages.h b/content/common/media/audio_messages.h index f918660..888396f8 100644 --- a/content/common/media/audio_messages.h +++ b/content/common/media/audio_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_AUDIO_MESSAGES_H_ +#define CONTENT_COMMON_MEDIA_AUDIO_MESSAGES_H_ + // IPC messages for the audio. -// Multiply-included message file, hence no include guard. #include <stdint.h> @@ -135,3 +137,5 @@ IPC_MESSAGE_CONTROL2(AudioInputHostMsg_SetVolume, int /* stream_id */, double /* volume */) + +#endif // CONTENT_COMMON_MEDIA_AUDIO_MESSAGES_H_
diff --git a/content/common/media/media_player_delegate_messages.h b/content/common/media/media_player_delegate_messages.h index 45b495b1..69f37234 100644 --- a/content/common/media/media_player_delegate_messages.h +++ b/content/common/media/media_player_delegate_messages.h
@@ -2,9 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_MEDIA_PLAYER_DELEGATE_MESSAGES_H_ +#define CONTENT_COMMON_MEDIA_MEDIA_PLAYER_DELEGATE_MESSAGES_H_ + // IPC messages for interactions between the WebMediaPlayerDelegate in the // renderer process and MediaWebContentsObserver in the browser process. -// Multiply-included message file, hence no include guard. #include <stdint.h> @@ -69,3 +71,5 @@ IPC_MESSAGE_ROUTED2(MediaPlayerDelegateHostMsg_OnMediaSizeChanged, int /* delegate_id, distinguishes instances */, gfx::Size /* new size of video */) + +#endif // CONTENT_COMMON_MEDIA_MEDIA_PLAYER_DELEGATE_MESSAGES_H_
diff --git a/content/common/media/media_player_messages_android.h b/content/common/media/media_player_messages_android.h index 712e3d0c..b9729bd 100644 --- a/content/common/media/media_player_messages_android.h +++ b/content/common/media/media_player_messages_android.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_MEDIA_PLAYER_MESSAGES_ANDROID_H_ +#define CONTENT_COMMON_MEDIA_MEDIA_PLAYER_MESSAGES_ANDROID_H_ + // IPC messages for android media player. -// Multiply-included message file, hence no include guard. #include "base/time/time.h" #include "content/common/content_export.h" @@ -188,3 +190,5 @@ // Stop playing media on a remote device. IPC_MESSAGE_ROUTED1(MediaPlayerHostMsg_RequestRemotePlaybackStop, int /* player_id */) + +#endif // #ifndef CONTENT_COMMON_MEDIA_MEDIA_PLAYER_MESSAGES_ANDROID_H_
diff --git a/content/common/media/media_stream_track_metrics_host_messages.h b/content/common/media/media_stream_track_metrics_host_messages.h index cfee0419..6f357094 100644 --- a/content/common/media/media_stream_track_metrics_host_messages.h +++ b/content/common/media/media_stream_track_metrics_host_messages.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_MESSAGES_H_ +#define CONTENT_COMMON_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_MESSAGES_H_ + #include <stdint.h> #include "base/values.h" @@ -18,3 +21,5 @@ bool /* is_audio */, bool /* is_remote */) IPC_MESSAGE_CONTROL1(MediaStreamTrackMetricsHost_RemoveTrack, uint64_t /* id */) + +#endif // CONTENT_COMMON_MEDIA_MEDIA_STREAM_TRACK_METRICS_HOST_MESSAGES_H_
diff --git a/content/common/media/midi_messages.h b/content/common/media/midi_messages.h index 4882b37..35e9028 100644 --- a/content/common/media/midi_messages.h +++ b/content/common/media/midi_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_MIDI_MESSAGES_H_ +#define CONTENT_COMMON_MEDIA_MIDI_MESSAGES_H_ + // IPC messages for access to MIDI hardware. -// Multiply-included message file, hence no include guard. // TODO(toyoshim): Mojofication is working in progress. Until the work is // finished, this file temporarily depends on midi_service.mojom.h. @@ -71,3 +73,5 @@ double /* timestamp */) IPC_MESSAGE_CONTROL1(MidiMsg_AcknowledgeSentData, uint32_t /* bytes sent */) + +#endif // CONTENT_COMMON_MEDIA_MIDI_MESSAGES_H_
diff --git a/content/common/media/peer_connection_tracker_messages.h b/content/common/media/peer_connection_tracker_messages.h index 130f3b6..290bf3f 100644 --- a/content/common/media/peer_connection_tracker_messages.h +++ b/content/common/media/peer_connection_tracker_messages.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_PEER_CONNECTION_TRACKER_MESSAGES_H_ +#define CONTENT_COMMON_MEDIA_PEER_CONNECTION_TRACKER_MESSAGES_H_ + #include "base/values.h" #include "content/common/content_export.h" #include "ipc/ipc_message_macros.h" @@ -47,3 +50,5 @@ IPC::PlatformFileForTransit /* file */) IPC_MESSAGE_CONTROL1(PeerConnectionTracker_StopEventLog, int /* peer_connection_local_id */) + +#endif // CONTENT_COMMON_MEDIA_PEER_CONNECTION_TRACKER_MESSAGES_H_
diff --git a/content/common/media/surface_view_manager_messages_android.h b/content/common/media/surface_view_manager_messages_android.h index 72426c2..50876424 100644 --- a/content/common/media/surface_view_manager_messages_android.h +++ b/content/common/media/surface_view_manager_messages_android.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_MEDIA_SURFACE_VIEW_MANAGER_MESSAGES_ANDROID_H_ +#define CONTENT_COMMON_MEDIA_SURFACE_VIEW_MANAGER_MESSAGES_ANDROID_H_ + // IPC messages for surface view manager. -// Multiply-included message file, hence no include guard. #include "content/common/content_export.h" #include "ipc/ipc_message_macros.h" @@ -24,3 +26,5 @@ IPC_MESSAGE_ROUTED1(SurfaceViewManagerMsg_FullscreenSurfaceCreated, int /* surface_id */) + +#endif // CONTENT_COMMON_MEDIA_SURFACE_VIEW_MANAGER_MESSAGES_ANDROID_H_
diff --git a/content/common/navigation_params.cc b/content/common/navigation_params.cc index 0ddd1ef..e8b1a7f 100644 --- a/content/common/navigation_params.cc +++ b/content/common/navigation_params.cc
@@ -17,34 +17,6 @@ namespace content { -// PlzNavigate -bool ShouldMakeNetworkRequestForURL(const GURL& url) { - CHECK(IsBrowserSideNavigationEnabled()); - - // Javascript URLs, srcdoc, schemes that don't load data should not send a - // request to the network stack. - if (url.SchemeIs(url::kJavaScriptScheme) || url.is_empty() || - url == content::kAboutSrcDocURL) { - return false; - } - - for (const auto& scheme : url::GetEmptyDocumentSchemes()) { - if (url.SchemeIs(scheme)) - return false; - } - - // For you information, even though a "data:" url doesn't generate actual - // network requests, it is handled by the network stack and so must return - // true. The reason is that a few "data:" urls can't be handled locally. For - // instance: - // - the ones that result in downloads. - // - the ones that are invalid. An error page must be served instead. - // - the ones that have an unsupported MIME type. - // - the ones that target the top-level frame on Android. - - return true; -} - SourceLocation::SourceLocation() : line_number(0), column_number(0) {} SourceLocation::SourceLocation(const std::string& url,
diff --git a/content/common/navigation_params.h b/content/common/navigation_params.h index 753c779..a73ae23 100644 --- a/content/common/navigation_params.h +++ b/content/common/navigation_params.h
@@ -32,12 +32,6 @@ namespace content { // PlzNavigate -// Helper function to determine if the navigation to |url| should make a request -// to the network stack. A request should not be sent for JavaScript URLs or -// about:blank. In these cases, no request needs to be sent. -bool CONTENT_EXPORT ShouldMakeNetworkRequestForURL(const GURL& url); - -// PlzNavigate // Struct keeping track of the Javascript SourceLocation that triggered the // navigation. This is initialized based on information from Blink at the start // of navigation, and passed back to Blink when the navigation commits.
diff --git a/content/common/navigation_params_unittest.cc b/content/common/navigation_params_unittest.cc deleted file mode 100644 index 0fdadef..0000000 --- a/content/common/navigation_params_unittest.cc +++ /dev/null
@@ -1,28 +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 "content/common/navigation_params.h" - -#include "content/public/common/browser_side_navigation_policy.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -namespace content { - -TEST(NavigationParamsTest, ShouldMakeNetworkRequestForURL) { - if (!IsBrowserSideNavigationEnabled()) - return; - - EXPECT_TRUE(ShouldMakeNetworkRequestForURL(GURL("http://foo/bar.html"))); - EXPECT_TRUE(ShouldMakeNetworkRequestForURL(GURL("https://foo/bar.html"))); - EXPECT_TRUE(ShouldMakeNetworkRequestForURL(GURL("data://foo"))); - EXPECT_TRUE(ShouldMakeNetworkRequestForURL(GURL("cid:foo@bar"))); - - EXPECT_FALSE(ShouldMakeNetworkRequestForURL(GURL("about:blank"))); - EXPECT_FALSE(ShouldMakeNetworkRequestForURL(GURL("about:srcdoc"))); - EXPECT_FALSE(ShouldMakeNetworkRequestForURL(GURL("javascript://foo.js"))); - EXPECT_FALSE(ShouldMakeNetworkRequestForURL(GURL())); -} - -} // namespace content
diff --git a/content/common/p2p_messages.h b/content/common/p2p_messages.h index 15716d0..70630894 100644 --- a/content/common/p2p_messages.h +++ b/content/common/p2p_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_P2P_MESSAGES_H_ +#define CONTENT_COMMON_P2P_MESSAGES_H_ + // IPC messages for the P2P Transport API. -// Multiply-included message file, hence no include guard. #include <stdint.h> @@ -136,3 +138,5 @@ int /* socket_id */, content::P2PSocketOption /* socket option type */, int /* value */) + +#endif // CONTENT_COMMON_P2P_MESSAGES_H_
diff --git a/content/common/page_messages.h b/content/common/page_messages.h index 4fa9f056..b1c511b4 100644 --- a/content/common/page_messages.h +++ b/content/common/page_messages.h
@@ -2,13 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_PAGE_MESSAGES_H_ +#define CONTENT_COMMON_PAGE_MESSAGES_H_ + #include "content/common/page_message_enums.h" #include "content/public/common/screen_info.h" #include "ipc/ipc_message_macros.h" #include "ui/gfx/geometry/rect.h" // IPC messages for page-level actions. -// Multiply-included message file, hence no include guard. #undef IPC_MESSAGE_EXPORT #define IPC_MESSAGE_EXPORT CONTENT_EXPORT @@ -56,3 +58,5 @@ // Adding a new message? Stick to the sort order above: first platform // independent PageMsg, then ifdefs for platform specific PageMsg, then platform // independent PageHostMsg, then ifdefs for platform specific PageHostMsg. + +#endif // CONTENT_COMMON_PAGE_MESSAGES_H_
diff --git a/content/common/platform_notification_messages.h b/content/common/platform_notification_messages.h index 02bb9f3a..cb37f10f 100644 --- a/content/common/platform_notification_messages.h +++ b/content/common/platform_notification_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ +#define CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ + // Messages for platform-native notifications using the Web Notification API. -// Multiply-included message file, hence no include guard. #include <stdint.h> #include <string> @@ -16,15 +18,15 @@ #include "ipc/ipc_message_macros.h" // Singly-included section for type definitions. -#ifndef CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ -#define CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ +#ifndef INTERNAL_CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ +#define INTERNAL_CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ // Defines the pair of [notification id] => [notification data] used when // getting the notifications for a given Service Worker registration. using PersistentNotificationInfo = std::pair<std::string, content::PlatformNotificationData>; -#endif // CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ +#endif // INTERNAL_CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_ #define IPC_MESSAGE_START PlatformNotificationMsgStart @@ -128,3 +130,5 @@ GURL /* origin */, std::string /* tag */, std::string /* notification_id */) + +#endif // CONTENT_COMMON_PLATFORM_NOTIFICATION_MESSAGES_H_
diff --git a/content/common/quota_messages.h b/content/common/quota_messages.h index 39006e1..5eec9b3 100644 --- a/content/common/quota_messages.h +++ b/content/common/quota_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, hence no include guard. +#ifndef CONTENT_COMMON_QUOTA_MESSAGES_H_ +#define CONTENT_COMMON_QUOTA_MESSAGES_H_ #include <stdint.h> @@ -50,3 +51,5 @@ IPC_MESSAGE_CONTROL1(QuotaHostMsg_RequestStorageQuota, content::StorageQuotaParams) + +#endif // CONTENT_COMMON_QUOTA_MESSAGES_H_
diff --git a/content/common/render_process_messages.h b/content/common/render_process_messages.h index 7ae52ee..e30da60 100644 --- a/content/common/render_process_messages.h +++ b/content/common/render_process_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_RENDER_PROCESS_MESSAGES_H_ +#define CONTENT_COMMON_RENDER_PROCESS_MESSAGES_H_ + // Common IPC messages used for render processes. -// Multiply-included message file, hence no include guard. #include <stdint.h> @@ -68,3 +70,5 @@ base::SharedMemoryHandle /* font data */, uint32_t /* font id */) #endif + +#endif // CONTENT_COMMON_RENDER_PROCESS_MESSAGES_H_
diff --git a/content/common/resource_messages.h b/content/common/resource_messages.h index 9d0417c..d65d1fa 100644 --- a/content/common/resource_messages.h +++ b/content/common/resource_messages.h
@@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_RESOURCE_MESSAGES_H_ +#define CONTENT_COMMON_RESOURCE_MESSAGES_H_ + // IPC messages for resource loading. // // NOTE: All messages must send an |int request_id| as their first parameter. -// Multiply-included message file, hence no include guard. - #include <stdint.h> #include "base/memory/shared_memory.h" @@ -31,8 +32,8 @@ #include "net/url_request/redirect_info.h" #include "third_party/WebKit/public/platform/WebMixedContentContextType.h" -#ifndef CONTENT_COMMON_RESOURCE_MESSAGES_H_ -#define CONTENT_COMMON_RESOURCE_MESSAGES_H_ +#ifndef INTERNAL_CONTENT_COMMON_RESOURCE_MESSAGES_H_ +#define INTERNAL_CONTENT_COMMON_RESOURCE_MESSAGES_H_ namespace net { struct LoadTimingInfo; @@ -134,8 +135,7 @@ } // namespace IPC -#endif // CONTENT_COMMON_RESOURCE_MESSAGES_H_ - +#endif // INTERNAL_CONTENT_COMMON_RESOURCE_MESSAGES_H_ #define IPC_MESSAGE_START ResourceMsgStart #undef IPC_MESSAGE_EXPORT @@ -415,3 +415,5 @@ int /* request_id */, net::RequestPriority, int /* intra_priority_value */) + +#endif // CONTENT_COMMON_RESOURCE_MESSAGES_H_
diff --git a/content/common/service_worker/embedded_worker_messages.h b/content/common/service_worker/embedded_worker_messages.h index f7e2da6..f31fcd1e 100644 --- a/content/common/service_worker/embedded_worker_messages.h +++ b/content/common/service_worker/embedded_worker_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Message definition file, included multiple times, hence no include guard. +#ifndef CONTENT_COMMON_SERVICE_WORKER_EMBEDDED_WORKER_MESSAGES_H_ +#define CONTENT_COMMON_SERVICE_WORKER_EMBEDDED_WORKER_MESSAGES_H_ #include <stdint.h> @@ -59,3 +60,5 @@ int /* thread_id */, int /* embedded_worker_id */, IPC::Message /* message */) + +#endif // CONTENT_COMMON_SERVICE_WORKER_EMBEDDED_WORKER_MESSAGES_H_
diff --git a/content/common/service_worker/service_worker_messages.h b/content/common/service_worker/service_worker_messages.h index f5dd1ca..14d28eb 100644 --- a/content/common/service_worker/service_worker_messages.h +++ b/content/common/service_worker/service_worker_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Message definition file, included multiple times, hence no include guard. +#ifndef CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_MESSAGES_H_ +#define CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_MESSAGES_H_ #include <stdint.h> @@ -508,3 +509,5 @@ IPC_MESSAGE_CONTROL2(ServiceWorkerMsg_NavigateClientError, int /* request_id */, GURL /* url */) + +#endif // CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_MESSAGES_H_
diff --git a/content/common/speech_recognition_messages.h b/content/common/speech_recognition_messages.h index 1892fce..c004e5c 100644 --- a/content/common/speech_recognition_messages.h +++ b/content/common/speech_recognition_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, hence no include guard. +#ifndef CONTENT_COMMON_SPEECH_RECOGNITION_MESSAGES_H_ +#define CONTENT_COMMON_SPEECH_RECOGNITION_MESSAGES_H_ #include <stdint.h> @@ -127,3 +128,5 @@ media::AudioParameters /* params */, base::SharedMemoryHandle /* memory */, base::SyncSocket::TransitDescriptor /* socket */) + +#endif // CONTENT_COMMON_SPEECH_RECOGNITION_MESSAGES_H_
diff --git a/content/common/text_input_client_messages.h b/content/common/text_input_client_messages.h index f66196cc..c8c8c8e 100644 --- a/content/common/text_input_client_messages.h +++ b/content/common/text_input_client_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message file, hence no include guard +#ifndef CONTENT_COMMON_TEXT_INPUT_CLIENT_MESSAGES_H_ +#define CONTENT_COMMON_TEXT_INPUT_CLIENT_MESSAGES_H_ #include <stddef.h> @@ -66,3 +67,4 @@ gfx::Point) #endif // defined(OS_MACOSX) +#endif // CONTENT_COMMON_TEXT_INPUT_CLIENT_MESSAGES_H_
diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 7562844..3e64fab 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h
@@ -2,8 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_VIEW_MESSAGES_H_ +#define CONTENT_COMMON_VIEW_MESSAGES_H_ + // IPC messages for page rendering. -// Multiply-included message file, hence no include guard. #include <stddef.h> #include <stdint.h> @@ -869,3 +871,5 @@ // Adding a new message? Stick to the sort order above: first platform // independent ViewMsg, then ifdefs for platform specific ViewMsg, then platform // independent ViewHostMsg, then ifdefs for platform specific ViewHostMsg. + +#endif // CONTENT_COMMON_VIEW_MESSAGES_H_
diff --git a/content/common/worker_messages.h b/content/common/worker_messages.h index 64fe00b6..45821b6ed 100644 --- a/content/common/worker_messages.h +++ b/content/common/worker_messages.h
@@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef CONTENT_COMMON_WORKER_MESSAGES_H_ +#define CONTENT_COMMON_WORKER_MESSAGES_H_ + // Defines messages between the browser and worker process, as well as between // the renderer and worker process. -// Multiply-included message file, hence no include guard. - #include <string> #include <utility> #include <vector> @@ -102,3 +103,5 @@ IPC_MESSAGE_CONTROL2(WorkerHostMsg_WorkerConnected, int /* connection_request_id */, int /* worker_route_id */) + +#endif // CONTENT_COMMON_WORKER_MESSAGES_H_
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc index 2bea832..6a1de90 100644 --- a/content/gpu/gpu_main.cc +++ b/content/gpu/gpu_main.cc
@@ -267,8 +267,8 @@ // defer tearing down the GPU process until receiving the initialization // message from the browser (through mojom::GpuMain::CreateGpuService()). constexpr bool kInProcessGpu = false; - const bool init_success = - gpu_init.InitializeAndStartSandbox(command_line, kInProcessGpu); + const bool init_success = gpu_init.InitializeAndStartSandbox( + const_cast<base::CommandLine*>(&command_line), kInProcessGpu); const bool dead_on_arrival = !init_success; logging::SetLogMessageHandler(NULL);
diff --git a/content/gpu/in_process_gpu_thread.cc b/content/gpu/in_process_gpu_thread.cc index c0ff230..9cf0e43d 100644 --- a/content/gpu/in_process_gpu_thread.cc +++ b/content/gpu/in_process_gpu_thread.cc
@@ -59,18 +59,27 @@ gpu::GPUInfo gpu_info; gpu::GpuFeatureInfo gpu_feature_info; base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (!gl::init::InitializeGLNoExtensionsOneOff()) { - VLOG(1) << "gl::init::InitializeGLNoExtensionsOneOff failed"; - } else if (GetContentClient()->gpu() && - GetContentClient()->gpu()->GetGPUInfo() && - GetContentClient()->gpu()->GetGpuFeatureInfo()) { + if (GetContentClient()->gpu() && GetContentClient()->gpu()->GetGPUInfo() && + GetContentClient()->gpu()->GetGpuFeatureInfo()) { gpu_info = *(GetContentClient()->gpu()->GetGPUInfo()); gpu_feature_info = *(GetContentClient()->gpu()->GetGpuFeatureInfo()); - } else if (!command_line->HasSwitch(switches::kSkipGpuDataLoading)) { - // TODO(zmo): No need to initialize bindings again inside - // CollectContextGraphicsInfo(). + } else { +#if defined(OS_ANDROID) gpu::CollectContextGraphicsInfo(&gpu_info); - gpu_feature_info = gpu::GetGpuFeatureInfo(gpu_info, *command_line); +#else + // TODO(zmo): Collect basic GPU info here instead. + gpu::GetGpuInfoFromCommandLine(*command_line, &gpu_info); +#endif + gpu_feature_info = gpu::ComputeGpuFeatureInfo(gpu_info, command_line); + } + + if (!gl::init::InitializeGLNoExtensionsOneOff()) { + VLOG(1) << "gl::init::InitializeGLNoExtensionsOneOff failed"; + } else { +#if !defined(OS_ANDROID) + gpu::CollectContextGraphicsInfo(&gpu_info); + gpu_feature_info = gpu::ComputeGpuFeatureInfo(gpu_info, command_line); +#endif } if (!gpu_feature_info.disabled_extensions.empty()) { gl::init::SetDisabledExtensionsPlatform(
diff --git a/content/network/url_loader_impl.cc b/content/network/url_loader_impl.cc index 61254bb..40e38e56 100644 --- a/content/network/url_loader_impl.cc +++ b/content/network/url_loader_impl.cc
@@ -211,6 +211,8 @@ url_request_->SetRequestHeadersCallback( base::Bind(&net::HttpRawRequestHeaders::Assign, base::Unretained(&raw_request_headers_))); + url_request_->SetResponseHeadersCallback(base::Bind( + &URLLoaderImpl::SetRawResponseHeaders, base::Unretained(this))); } url_request_->Start(); } @@ -253,8 +255,10 @@ scoped_refptr<ResourceResponse> response = new ResourceResponse(); PopulateResourceResponse(url_request_.get(), response.get()); if (report_raw_headers_) { - response->head.devtools_info = - BuildDevToolsInfo(*url_request_, raw_request_headers_); + response->head.devtools_info = BuildDevToolsInfo( + *url_request_, raw_request_headers_, raw_response_headers_.get()); + raw_request_headers_ = net::HttpRawRequestHeaders(); + raw_response_headers_ = nullptr; } url_loader_client_->OnReceiveRedirect(redirect_info, response->head); } @@ -272,8 +276,10 @@ response_ = new ResourceResponse(); PopulateResourceResponse(url_request_.get(), response_.get()); if (report_raw_headers_) { - response_->head.devtools_info = - BuildDevToolsInfo(*url_request_, raw_request_headers_); + response_->head.devtools_info = BuildDevToolsInfo( + *url_request_, raw_request_headers_, raw_response_headers_.get()); + raw_request_headers_ = net::HttpRawRequestHeaders(); + raw_response_headers_ = nullptr; } mojo::DataPipe data_pipe(kDefaultAllocationSize); @@ -481,4 +487,9 @@ total_written_bytes_ += pending_write_buffer_offset_; } +void URLLoaderImpl::SetRawResponseHeaders( + scoped_refptr<const net::HttpResponseHeaders> headers) { + raw_response_headers_ = headers; +} + } // namespace content
diff --git a/content/network/url_loader_impl.h b/content/network/url_loader_impl.h index c9f6677..c4e0bc53 100644 --- a/content/network/url_loader_impl.h +++ b/content/network/url_loader_impl.h
@@ -19,6 +19,10 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "net/url_request/url_request.h" +namespace net { +class HttpResponseHeaders; +} + namespace network { class NetToMojoPendingBuffer; } @@ -67,6 +71,7 @@ void DeleteIfNeeded(); void SendResponseToClient(); void CompletePendingWrite(); + void SetRawResponseHeaders(scoped_refptr<const net::HttpResponseHeaders>); NetworkContext* context_; int32_t options_; @@ -90,6 +95,7 @@ bool report_raw_headers_; net::HttpRawRequestHeaders raw_request_headers_; + scoped_refptr<const net::HttpResponseHeaders> raw_response_headers_; base::WeakPtrFactory<URLLoaderImpl> weak_ptr_factory_;
diff --git a/content/public/app/mojo/content_browser_manifest.json b/content/public/app/mojo/content_browser_manifest.json index f141e9aa..da47ee2 100644 --- a/content/public/app/mojo/content_browser_manifest.json +++ b/content/public/app/mojo/content_browser_manifest.json
@@ -6,6 +6,7 @@ "provides": { // Interfaces needed by a generic client of content browser. "app": [ + "discardable_memory::mojom::DiscardableSharedMemoryManager", "memory_instrumentation::mojom::Coordinator" ], "gpu": [
diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc index a4145ba..7d926da0 100644 --- a/content/public/browser/gpu_utils.cc +++ b/content/public/browser/gpu_utils.cc
@@ -14,6 +14,7 @@ #include "gpu/config/gpu_switches.h" #include "media/media_features.h" #include "ui/gl/gl_switches.h" +#include "ui/gl/gl_utils.h" namespace { @@ -124,7 +125,7 @@ gpu_preferences.enable_gpu_service_tracing = command_line->HasSwitch(switches::kEnableGPUServiceTracing); gpu_preferences.use_passthrough_cmd_decoder = - command_line->HasSwitch(switches::kUsePassthroughCmdDecoder); + gl::UsePassthroughCommandDecoder(command_line); // Some of these preferences are set or adjusted in // GpuDataManagerImplPrivate::AppendGpuCommandLine. return gpu_preferences;
diff --git a/content/public/browser/web_contents_observer.h b/content/public/browser/web_contents_observer.h index 8042ff84..4115816b 100644 --- a/content/public/browser/web_contents_observer.h +++ b/content/public/browser/web_contents_observer.h
@@ -479,6 +479,10 @@ mojo::ScopedMessagePipeHandle* interface_pipe) {} // IPC::Listener implementation. + // DEPRECATED: Use (i.e. override) the other overload instead: + // virtual bool OnMessageReceived(const IPC::Message& message, + // RenderFrameHost* render_frame_host); + // TODO(https://crbug.com/758026): Delete this overload when possible. bool OnMessageReceived(const IPC::Message& message) override; // IPC::Sender implementation.
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h index 24302aa..f0df228 100644 --- a/content/public/common/common_param_traits_macros.h +++ b/content/public/common/common_param_traits_macros.h
@@ -244,6 +244,7 @@ IPC_STRUCT_TRAITS_MEMBER(page_popups_suppressed) IPC_STRUCT_TRAITS_MEMBER(css_hex_alpha_color_enabled) IPC_STRUCT_TRAITS_MEMBER(enable_media_download_in_product_help) + IPC_STRUCT_TRAITS_MEMBER(scroll_top_left_interop_enabled) #endif // defined(OS_ANDROID) IPC_STRUCT_TRAITS_MEMBER(default_minimum_page_scale_factor) IPC_STRUCT_TRAITS_MEMBER(default_maximum_page_scale_factor)
diff --git a/content/public/common/media_stream_request.cc b/content/public/common/media_stream_request.cc index 67547ca..6112e5f 100644 --- a/content/public/common/media_stream_request.cc +++ b/content/public/common/media_stream_request.cc
@@ -28,6 +28,9 @@ type == MEDIA_DESKTOP_VIDEO_CAPTURE); } +// static +const int MediaStreamDevice::kNoId = -1; + MediaStreamDevice::MediaStreamDevice() : type(MEDIA_NO_SERVICE), video_facing(media::MEDIA_VIDEO_FACING_NONE) {}
diff --git a/content/public/common/media_stream_request.h b/content/public/common/media_stream_request.h index 36821c43..b9705e5 100644 --- a/content/public/common/media_stream_request.h +++ b/content/public/common/media_stream_request.h
@@ -82,6 +82,8 @@ // TODO(xians): Change the structs to classes. // Represents one device in a request for media stream(s). struct CONTENT_EXPORT MediaStreamDevice { + static const int kNoId; + MediaStreamDevice(); MediaStreamDevice(MediaStreamType type, @@ -136,6 +138,9 @@ media::AudioParameters matched_output = media::AudioParameters::UnavailableDeviceParams(); + // Id for this capture session. Unique for all sessions of the same type. + int session_id = kNoId; + // This field is optional and available only for some camera models. base::Optional<CameraCalibration> camera_calibration; };
diff --git a/content/public/common/url_utils.cc b/content/public/common/url_utils.cc index 5ca69aa8..7253dd8 100644 --- a/content/public/common/url_utils.cc +++ b/content/public/common/url_utils.cc
@@ -6,7 +6,9 @@ #include "build/build_config.h" #include "content/common/url_schemes.h" +#include "content/public/common/browser_side_navigation_policy.h" #include "content/public/common/url_constants.h" +#include "url/url_util.h" namespace content { @@ -23,4 +25,32 @@ return false; } +// PlzNavigate +bool IsURLHandledByNetworkStack(const GURL& url) { + CHECK(IsBrowserSideNavigationEnabled()); + + // Javascript URLs, srcdoc, schemes that don't load data should not send a + // request to the network stack. + if (url.SchemeIs(url::kJavaScriptScheme) || url.is_empty() || + url == content::kAboutSrcDocURL) { + return false; + } + + for (const auto& scheme : url::GetEmptyDocumentSchemes()) { + if (url.SchemeIs(scheme)) + return false; + } + + // For you information, even though a "data:" url doesn't generate actual + // network requests, it is handled by the network stack and so must return + // true. The reason is that a few "data:" urls can't be handled locally. For + // instance: + // - the ones that result in downloads. + // - the ones that are invalid. An error page must be served instead. + // - the ones that have an unsupported MIME type. + // - the ones that target the top-level frame on Android. + + return true; +} + } // namespace content
diff --git a/content/public/common/url_utils.h b/content/public/common/url_utils.h index 89ac321..60d447c 100644 --- a/content/public/common/url_utils.h +++ b/content/public/common/url_utils.h
@@ -18,6 +18,12 @@ // Check whether we can do the saving page operation for the specified URL. CONTENT_EXPORT bool IsSavableURL(const GURL& url); +// PlzNavigate +// Helper function to determine if the navigation to |url| should make a request +// to the network stack. A request should not be sent for JavaScript URLs or +// about:blank. In these cases, no request needs to be sent. +bool CONTENT_EXPORT IsURLHandledByNetworkStack(const GURL& url); + } // namespace content #endif // CONTENT_PUBLIC_COMMON_URL_UTILS_H_
diff --git a/content/public/common/url_utils_unittest.cc b/content/public/common/url_utils_unittest.cc new file mode 100644 index 0000000..810ccf2 --- /dev/null +++ b/content/public/common/url_utils_unittest.cc
@@ -0,0 +1,28 @@ +// 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 "content/public/common/url_utils.h" + +#include "content/public/common/browser_side_navigation_policy.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +namespace content { + +TEST(UrlUtilsTest, IsURLHandledByNetworkStack) { + if (!IsBrowserSideNavigationEnabled()) + return; + + EXPECT_TRUE(IsURLHandledByNetworkStack(GURL("http://foo/bar.html"))); + EXPECT_TRUE(IsURLHandledByNetworkStack(GURL("https://foo/bar.html"))); + EXPECT_TRUE(IsURLHandledByNetworkStack(GURL("data://foo"))); + EXPECT_TRUE(IsURLHandledByNetworkStack(GURL("cid:foo@bar"))); + + EXPECT_FALSE(IsURLHandledByNetworkStack(GURL("about:blank"))); + EXPECT_FALSE(IsURLHandledByNetworkStack(GURL("about:srcdoc"))); + EXPECT_FALSE(IsURLHandledByNetworkStack(GURL("javascript:foo.js"))); + EXPECT_FALSE(IsURLHandledByNetworkStack(GURL())); +} + +} // namespace content
diff --git a/content/public/common/web_preferences.cc b/content/public/common/web_preferences.cc index a9c7b7d..528e799 100644 --- a/content/public/common/web_preferences.cc +++ b/content/public/common/web_preferences.cc
@@ -206,6 +206,7 @@ embedded_media_experience_enabled(false), css_hex_alpha_color_enabled(true), enable_media_download_in_product_help(false), + scroll_top_left_interop_enabled(true), #endif // defined(OS_ANDROID) #if defined(OS_ANDROID) default_minimum_page_scale_factor(0.25f),
diff --git a/content/public/common/web_preferences.h b/content/public/common/web_preferences.h index 1e24ea1..1d4cf92e 100644 --- a/content/public/common/web_preferences.h +++ b/content/public/common/web_preferences.h
@@ -256,6 +256,10 @@ // WebView quirk (http://crbug.com/618472). bool css_hex_alpha_color_enabled; bool enable_media_download_in_product_help; + // Enable support for document.scrollingElement + // WebView sets this to false to retain old documentElement behaviour + // (http://crbug.com/761016). + bool scroll_top_left_interop_enabled; #else // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
diff --git a/content/public/renderer/resource_fetcher.h b/content/public/renderer/resource_fetcher.h index 6f6c21e..1d8eba5 100644 --- a/content/public/renderer/resource_fetcher.h +++ b/content/public/renderer/resource_fetcher.h
@@ -9,6 +9,7 @@ #include "base/callback.h" #include "content/common/content_export.h" +#include "content/public/common/url_loader_factory.mojom.h" #include "third_party/WebKit/public/platform/WebURLRequest.h" class GURL; @@ -22,11 +23,17 @@ class WebURLResponse; } +namespace net { +struct NetworkTrafficAnnotationTag; +} + namespace content { // Interface to download resources asynchronously. class CONTENT_EXPORT ResourceFetcher { public: + static constexpr size_t kDefaultMaximumDownloadSize = 1024 * 1024; + virtual ~ResourceFetcher() {} // This will be called asynchronously after the URL has been fetched, @@ -49,12 +56,22 @@ virtual void SetHeader(const std::string& header, const std::string& value) = 0; - // Starts the request using the specified frame. Calls |callback| when - // done. + // DEPRECATED: Starts the request using the specified frame. Calls |callback| + // when done. virtual void Start(blink::WebLocalFrame* frame, blink::WebURLRequest::RequestContext request_context, const Callback& callback) = 0; + // Starts the request using the specified frame. Calls |callback| when + // done. + virtual void Start( + blink::WebLocalFrame* frame, + blink::WebURLRequest::RequestContext request_context, + mojom::URLLoaderFactory* url_loader_factory, + const net::NetworkTrafficAnnotationTag& annotation_tag, + const Callback& callback, + size_t maximum_download_size = kDefaultMaximumDownloadSize) = 0; + // Sets how long to wait for the server to reply. By default, there is no // timeout. Must be called after a request is started. virtual void SetTimeout(const base::TimeDelta& timeout) = 0;
diff --git a/content/public/test/navigation_simulator.cc b/content/public/test/navigation_simulator.cc index 061905bb..b579847 100644 --- a/content/public/test/navigation_simulator.cc +++ b/content/public/test/navigation_simulator.cc
@@ -15,6 +15,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/common/browser_side_navigation_policy.h" #include "content/public/common/resource_request_body.h" +#include "content/public/common/url_utils.h" #include "content/test/test_navigation_url_loader.h" #include "content/test/test_render_frame_host.h" #include "content/test/test_web_contents.h" @@ -193,7 +194,7 @@ if (same_document_ || (IsBrowserSideNavigationEnabled() && - !ShouldMakeNetworkRequestForURL(navigation_url_)) || + !IsURLHandledByNetworkStack(navigation_url_)) || navigation_url_.IsAboutBlank()) { CHECK_EQ(1, num_did_start_navigation_called_); return; @@ -326,7 +327,7 @@ if (!same_document_ && !IsRendererDebugURL(navigation_url_) && !navigation_url_.IsAboutBlank() && (!IsBrowserSideNavigationEnabled() || - ShouldMakeNetworkRequestForURL(navigation_url_))) { + IsURLHandledByNetworkStack(navigation_url_))) { WaitForThrottleChecksComplete(); if (GetLastThrottleCheckResult() != NavigationThrottle::PROCEED) { @@ -743,7 +744,7 @@ if (!request) { if (web_contents_->GetMainFrame()->navigation_handle() == handle_) { DCHECK(handle_->IsSameDocument() || - !ShouldMakeNetworkRequestForURL(handle_->GetURL())); + !IsURLHandledByNetworkStack(handle_->GetURL())); same_document_ = handle_->IsSameDocument(); return true; }
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn index 9540dc6..651c8f94 100644 --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn
@@ -688,6 +688,7 @@ "media/webrtc/stun_field_trial.h", "media/webrtc/track_observer.cc", "media/webrtc/track_observer.h", + "media/webrtc/two_keys_adapter_map.h", "media/webrtc/webrtc_audio_sink.cc", "media/webrtc/webrtc_audio_sink.h", "media/webrtc/webrtc_media_stream_adapter.cc",
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index 02ccb1a3..aed4c7d 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -518,13 +518,13 @@ switch (data.action) { case ui::AX_ACTION_BLUR: - target.SetFocused(false); + root.Focus(); break; case ui::AX_ACTION_DECREMENT: target.Decrement(); break; case ui::AX_ACTION_DO_DEFAULT: - target.PerformDefaultAction(); + target.Click(); break; case ui::AX_ACTION_GET_IMAGE_DATA: OnGetImageData(target, data.target_rect.size()); @@ -549,12 +549,7 @@ OnLoadInlineTextBoxes(target); break; case ui::AX_ACTION_FOCUS: - // By convention, calling SetFocus on the root of the tree should - // clear the current focus. Otherwise set the focus to the new node. - if (data.target_node_id == root.AxID()) - render_frame_->GetRenderView()->GetWebView()->ClearFocusedElement(); - else - target.SetFocused(true); + target.Focus(); break; case ui::AX_ACTION_SET_SCROLL_OFFSET: target.SetScrollOffset(
diff --git a/content/renderer/fetchers/resource_fetcher_impl.cc b/content/renderer/fetchers/resource_fetcher_impl.cc index 370fa70..9e19b19 100644 --- a/content/renderer/fetchers/resource_fetcher_impl.cc +++ b/content/renderer/fetchers/resource_fetcher_impl.cc
@@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/macros.h" +#include "base/memory/ptr_util.h" #include "content/child/resource_dispatcher.h" #include "content/child/web_url_request_util.h" #include "content/common/possibly_associated_interface_ptr.h" @@ -27,10 +28,6 @@ namespace { -// TODO(toyoshim): Make the maximum size configurable via arguments of -// ResourceFetcher::Start(). -constexpr size_t kMaxDownloadSize = 1024 * 1024; - constexpr int32_t kRoutingId = 0; const char kAccessControlAllowOriginHeader[] = "Access-Control-Allow-Origin"; @@ -48,42 +45,24 @@ // class to use SimpleURLLoader with blink-friendly types. class ResourceFetcherImpl::ClientImpl : public mojom::URLLoaderClient { public: - ClientImpl(ResourceFetcherImpl* parent, const Callback& callback) + ClientImpl(ResourceFetcherImpl* parent, + const Callback& callback, + size_t maximum_download_size) : parent_(parent), client_binding_(this), data_pipe_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::MANUAL), status_(Status::kNotStarted), completed_(false), + maximum_download_size_(maximum_download_size), callback_(callback) {} ~ClientImpl() override {} void Start(const ResourceRequest& request, mojom::URLLoaderFactory* url_loader_factory, + const net::NetworkTrafficAnnotationTag& annotation_tag, base::SingleThreadTaskRunner* task_runner) { - // TODO(toyoshim): NetworkTrafficAnnotationTag should be provided by each - // caller. content::ResourceFetcher interface will be changed to take it. - static const net::NetworkTrafficAnnotationTag traffic_annotation = - net::DefineNetworkTrafficAnnotation("content_resource_fetcher", R"( - semantics { - sender: "content ResourceFetcher" - description: - "Chrome content API initiated request, which includes network error " - "pages and mojo internal component downloader." - trigger: - "Showing network error pages, or needs to download mojo component." - data: "Anything the initiator wants." - destination: OTHER - } - policy { - cookies_allowed: YES - cookies_store: "user" - setting: "These requests cannot be disabled in settings." - policy_exception_justification: - "Not implemented. Without these requests, Chrome will not work." - })"); - status_ = Status::kStarted; response_.SetURL(request.url); @@ -94,7 +73,7 @@ mojo::MakeRequest(&loader_), kRoutingId, ResourceDispatcher::MakeRequestID(), mojom::kURLLoadOptionNone, request, std::move(client), - net::MutableNetworkTrafficAnnotationTag(traffic_annotation)); + net::MutableNetworkTrafficAnnotationTag(annotation_tag)); } void Cancel() { @@ -167,7 +146,7 @@ } DCHECK_EQ(MOJO_RESULT_OK, result); // Only program errors can fire. - if (data_.size() + size > kMaxDownloadSize) { + if (data_.size() + size > maximum_download_size_) { data_pipe_->EndReadData(size); Cancel(); return; @@ -256,6 +235,9 @@ // ready even after OnComplete() is called. bool completed_; + // Maximum download size to be stored in |data_|. + const size_t maximum_download_size_; + // Received data to be passed to the |callback_|. std::string data_; @@ -305,8 +287,46 @@ blink::WebLocalFrame* frame, blink::WebURLRequest::RequestContext request_context, const Callback& callback) { + static const net::NetworkTrafficAnnotationTag annotation_tag = + net::DefineNetworkTrafficAnnotation("content_resource_fetcher", R"( + semantics { + sender: "content ResourceFetcher" + description: + "Chrome content API initiated request, which includes network error " + "pages and mojo internal component downloader." + trigger: + "Showing network error pages, or needs to download mojo component." + data: "Anything the initiator wants." + destination: OTHER + } + policy { + cookies_allowed: YES + cookies_store: "user" + setting: "These requests cannot be disabled in settings." + policy_exception_justification: + "Not implemented. Without these requests, Chrome will not work." + })"); + + mojom::URLLoaderFactory* url_loader_factory = + RenderFrame::FromWebFrame(frame) + ->GetDefaultURLLoaderFactoryGetter() + ->GetNetworkLoaderFactory(); + DCHECK(url_loader_factory); + + Start(frame, request_context, url_loader_factory, annotation_tag, callback, + kDefaultMaximumDownloadSize); +} + +void ResourceFetcherImpl::Start( + blink::WebLocalFrame* frame, + blink::WebURLRequest::RequestContext request_context, + mojom::URLLoaderFactory* url_loader_factory, + const net::NetworkTrafficAnnotationTag& annotation_tag, + const Callback& callback, + size_t maximum_download_size) { DCHECK(!client_); DCHECK(frame); + DCHECK(url_loader_factory); DCHECK(!frame->GetDocument().IsNull()); if (request_.method.empty()) request_.method = net::HttpRequestHeaders::kGetMethod; @@ -329,16 +349,9 @@ request_.resource_type = WebURLRequestContextToResourceType(request_context); - client_.reset(new ClientImpl(this, callback)); - - // TODO(toyoshim): mojom::URLLoaderFactory should be given by each caller. - mojom::URLLoaderFactory* url_loader_factory = - RenderFrame::FromWebFrame(frame) - ->GetDefaultURLLoaderFactoryGetter() - ->GetNetworkLoaderFactory(); - DCHECK(url_loader_factory); - - client_->Start(request_, url_loader_factory, frame->LoadingTaskRunner()); + client_ = base::MakeUnique<ClientImpl>(this, callback, maximum_download_size); + client_->Start(request_, url_loader_factory, annotation_tag, + frame->LoadingTaskRunner()); // No need to hold on to the request; reset it now. request_ = ResourceRequest();
diff --git a/content/renderer/fetchers/resource_fetcher_impl.h b/content/renderer/fetchers/resource_fetcher_impl.h index d4e2526..ec91621 100644 --- a/content/renderer/fetchers/resource_fetcher_impl.h +++ b/content/renderer/fetchers/resource_fetcher_impl.h
@@ -35,6 +35,12 @@ void Start(blink::WebLocalFrame* frame, blink::WebURLRequest::RequestContext request_context, const Callback& callback) override; + void Start(blink::WebLocalFrame* frame, + blink::WebURLRequest::RequestContext request_context, + mojom::URLLoaderFactory* url_loader_factory, + const net::NetworkTrafficAnnotationTag& annotation_tag, + const Callback& callback, + size_t maximum_download_size) override; void SetTimeout(const base::TimeDelta& timeout) override; private:
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index 388344d..d397a43 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -90,6 +90,7 @@ using blink::WebSize; using blink::WebBrowserControlsState; using blink::WebLayerTreeView; +using blink::WebScrollBoundaryBehavior; namespace content { namespace { @@ -1185,6 +1186,11 @@ } } +void RenderWidgetCompositor::SetScrollBoundaryBehavior( + const WebScrollBoundaryBehavior& behavior) { + layer_tree_host_->SetScrollBoundaryBehavior(behavior); +} + void RenderWidgetCompositor::WillBeginMainFrame() { delegate_->WillBeginCompositorFrame(); }
diff --git a/content/renderer/gpu/render_widget_compositor.h b/content/renderer/gpu/render_widget_compositor.h index 42c0d30..cb880b6 100644 --- a/content/renderer/gpu/render_widget_compositor.h +++ b/content/renderer/gpu/render_widget_compositor.h
@@ -182,6 +182,9 @@ void RequestDecode(const PaintImage& image, const base::Callback<void(bool)>& callback) override; + void SetScrollBoundaryBehavior( + const blink::WebScrollBoundaryBehavior&) override; + // cc::LayerTreeHostClient implementation. void WillBeginMainFrame() override; void DidBeginMainFrame() override;
diff --git a/content/renderer/input/input_event_filter.cc b/content/renderer/input/input_event_filter.cc index 5def8fc..0d504a2 100644 --- a/content/renderer/input/input_event_filter.cc +++ b/content/renderer/input/input_event_filter.cc
@@ -39,7 +39,12 @@ const char* GetInputMessageTypeName(const IPC::Message& message) { switch (message.type()) { +// Someone else might have included input_messages.h so undef the guard. +#undef CONTENT_COMMON_INPUT_MESSAGES_H_ #include "content/common/input_messages.h" +#ifndef CONTENT_COMMON_INPUT_MESSAGES_H_ +#error "Failed to include content/common/input_messages.h" +#endif default: NOTREACHED() << "Invalid message type: " << message.type(); break;
diff --git a/content/renderer/input/input_handler_wrapper.cc b/content/renderer/input/input_handler_wrapper.cc index d9610c7..8b87687 100644 --- a/content/renderer/input/input_handler_wrapper.cc +++ b/content/renderer/input/input_handler_wrapper.cc
@@ -75,12 +75,14 @@ const gfx::Vector2dF& accumulated_overscroll, const gfx::Vector2dF& latest_overscroll_delta, const gfx::Vector2dF& current_fling_velocity, - const gfx::PointF& causal_event_viewport_point) { + const gfx::PointF& causal_event_viewport_point, + const cc::ScrollBoundaryBehavior& scroll_boundary_behavior) { ui::DidOverscrollParams params; params.accumulated_overscroll = accumulated_overscroll; params.latest_overscroll_delta = latest_overscroll_delta; params.current_fling_velocity = current_fling_velocity; params.causal_event_viewport_point = causal_event_viewport_point; + params.scroll_boundary_behavior = scroll_boundary_behavior; input_handler_manager_->DidOverscroll(routing_id_, params); }
diff --git a/content/renderer/input/input_handler_wrapper.h b/content/renderer/input/input_handler_wrapper.h index b8c01c8..ec4175a 100644 --- a/content/renderer/input/input_handler_wrapper.h +++ b/content/renderer/input/input_handler_wrapper.h
@@ -49,10 +49,12 @@ blink::WebGestureDevice deviceSource, const blink::WebFloatPoint& velocity, const blink::WebSize& cumulativeScroll) override; - void DidOverscroll(const gfx::Vector2dF& accumulated_overscroll, - const gfx::Vector2dF& latest_overscroll_delta, - const gfx::Vector2dF& current_fling_velocity, - const gfx::PointF& causal_event_viewport_point) override; + void DidOverscroll( + const gfx::Vector2dF& accumulated_overscroll, + const gfx::Vector2dF& latest_overscroll_delta, + const gfx::Vector2dF& current_fling_velocity, + const gfx::PointF& causal_event_viewport_point, + const cc::ScrollBoundaryBehavior& scroll_boundary_behavior) override; void DidStopFlinging() override; void DidAnimateForInput() override; void GenerateScrollBeginAndSendToMainThread(
diff --git a/content/renderer/input/render_widget_input_handler.cc b/content/renderer/input/render_widget_input_handler.cc index 965e4cb7..49102e0 100644 --- a/content/renderer/input/render_widget_input_handler.cc +++ b/content/renderer/input/render_widget_input_handler.cc
@@ -44,6 +44,7 @@ using blink::WebKeyboardEvent; using blink::WebMouseEvent; using blink::WebMouseWheelEvent; +using blink::WebScrollBoundaryBehavior; using blink::WebTouchEvent; using blink::WebTouchPoint; using ui::DidOverscrollParams; @@ -376,7 +377,8 @@ const WebFloatSize& overscrollDelta, const WebFloatSize& accumulatedOverscroll, const WebFloatPoint& position, - const WebFloatSize& velocity) { + const WebFloatSize& velocity, + const WebScrollBoundaryBehavior& behavior) { std::unique_ptr<DidOverscrollParams> params(new DidOverscrollParams()); params->accumulated_overscroll = gfx::Vector2dF( accumulatedOverscroll.width, accumulatedOverscroll.height); @@ -385,6 +387,7 @@ params->current_fling_velocity = gfx::Vector2dF(velocity.width, velocity.height); params->causal_event_viewport_point = gfx::PointF(position.x, position.y); + params->scroll_boundary_behavior = behavior; // If we're currently handling an event, stash the overscroll data such that // it can be bundled in the event ack.
diff --git a/content/renderer/input/render_widget_input_handler.h b/content/renderer/input/render_widget_input_handler.h index 4d03077..453ac9f0 100644 --- a/content/renderer/input/render_widget_input_handler.h +++ b/content/renderer/input/render_widget_input_handler.h
@@ -19,6 +19,7 @@ namespace blink { struct WebFloatPoint; struct WebFloatSize; +struct WebScrollBoundaryBehavior; } namespace ui { @@ -45,11 +46,11 @@ HandledEventCallback callback); // Handle overscroll from Blink. - void DidOverscrollFromBlink( - const blink::WebFloatSize& overscrollDelta, - const blink::WebFloatSize& accumulatedOverscroll, - const blink::WebFloatPoint& position, - const blink::WebFloatSize& velocity); + void DidOverscrollFromBlink(const blink::WebFloatSize& overscrollDelta, + const blink::WebFloatSize& accumulatedOverscroll, + const blink::WebFloatPoint& position, + const blink::WebFloatSize& velocity, + const blink::WebScrollBoundaryBehavior& behavior); bool handling_input_event() const { return handling_input_event_; } void set_handling_input_event(bool handling_input_event) {
diff --git a/content/renderer/input/widget_input_handler_manager.cc b/content/renderer/input/widget_input_handler_manager.cc index b5ea44a..03c5dd6 100644 --- a/content/renderer/input/widget_input_handler_manager.cc +++ b/content/renderer/input/widget_input_handler_manager.cc
@@ -158,12 +158,14 @@ const gfx::Vector2dF& accumulated_overscroll, const gfx::Vector2dF& latest_overscroll_delta, const gfx::Vector2dF& current_fling_velocity, - const gfx::PointF& causal_event_viewport_point) { + const gfx::PointF& causal_event_viewport_point, + const cc::ScrollBoundaryBehavior& scroll_boundary_behavior) { ui::DidOverscrollParams params; params.accumulated_overscroll = accumulated_overscroll; params.latest_overscroll_delta = latest_overscroll_delta; params.current_fling_velocity = current_fling_velocity; params.causal_event_viewport_point = causal_event_viewport_point; + params.scroll_boundary_behavior = scroll_boundary_behavior; if (legacy_host_message_sender_) { legacy_host_message_sender_->Send(new InputHostMsg_DidOverscroll( legacy_host_message_routing_id_, params));
diff --git a/content/renderer/input/widget_input_handler_manager.h b/content/renderer/input/widget_input_handler_manager.h index 676f4a7..1774869 100644 --- a/content/renderer/input/widget_input_handler_manager.h +++ b/content/renderer/input/widget_input_handler_manager.h
@@ -49,10 +49,12 @@ const blink::WebFloatPoint& velocity, const blink::WebSize& cumulative_scroll) override; - void DidOverscroll(const gfx::Vector2dF& accumulated_overscroll, - const gfx::Vector2dF& latest_overscroll_delta, - const gfx::Vector2dF& current_fling_velocity, - const gfx::PointF& causal_event_viewport_point) override; + void DidOverscroll( + const gfx::Vector2dF& accumulated_overscroll, + const gfx::Vector2dF& latest_overscroll_delta, + const gfx::Vector2dF& current_fling_velocity, + const gfx::PointF& causal_event_viewport_point, + const cc::ScrollBoundaryBehavior& scroll_boundary_behavior) override; void DidStopFlinging() override; void DidAnimateForInput() override; void GenerateScrollBeginAndSendToMainThread(
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc index 0fc99e4..40f2483 100644 --- a/content/renderer/media/media_factory.cc +++ b/content/renderer/media/media_factory.cc
@@ -35,6 +35,8 @@ #include "services/service_manager/public/cpp/connect.h" #include "services/service_manager/public/cpp/interface_provider.h" #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h" +#include "third_party/WebKit/public/platform/WebSurfaceLayerBridge.h" +#include "third_party/WebKit/public/platform/WebVideoFrameSubmitter.h" #include "third_party/WebKit/public/web/WebKit.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" #include "url/origin.h" @@ -174,7 +176,8 @@ blink::WebMediaPlayerClient* client, blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, blink::WebContentDecryptionModule* initial_cdm, - const blink::WebString& sink_id) { + const blink::WebString& sink_id, + blink::WebLayerTreeView* layer_tree_view) { blink::WebLocalFrame* web_frame = render_frame_->GetWebFrame(); blink::WebSecurityOrigin security_origin = render_frame_->GetWebFrame()->GetSecurityOrigin(); @@ -265,6 +268,7 @@ mojo::MakeRequest(&watch_time_recorder_provider_)); } + DCHECK(layer_tree_view); std::unique_ptr<media::WebMediaPlayerParams> params( new media::WebMediaPlayerParams( std::move(media_log), @@ -283,7 +287,8 @@ enable_instant_source_buffer_gc, embedded_media_experience_enabled, watch_time_recorder_provider_.get(), base::Bind(&MediaFactory::CreateVideoDecodeStatsRecorder, - base::Unretained(this)))); + base::Unretained(this)), + base::Bind(&blink::WebSurfaceLayerBridge::Create, layer_tree_view))); media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( web_frame, client, encrypted_client, GetWebMediaPlayerDelegate(),
diff --git a/content/renderer/media/media_factory.h b/content/renderer/media/media_factory.h index 8dddde7a..9888f606 100644 --- a/content/renderer/media/media_factory.h +++ b/content/renderer/media/media_factory.h
@@ -29,6 +29,7 @@ namespace blink { class WebContentDecryptionModule; class WebEncryptedMediaClient; +class WebLayerTreeView; class WebLocalFrame; class WebMediaPlayer; class WebMediaPlayerClient; @@ -91,12 +92,15 @@ // to a ContentDecryptionModule if MediaKeys have been provided to the // |encrypted_client| (otherwise null). |sink_id|, when not empty, identifies // the audio sink to use for this player (see HTMLMediaElement.sinkId). + // The |layer_tree_view| will be used to generate the correct FrameSinkId for + // the Surface containing the corresponding HTMLMediaElement. blink::WebMediaPlayer* CreateMediaPlayer( const blink::WebMediaPlayerSource& source, blink::WebMediaPlayerClient* client, blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, blink::WebContentDecryptionModule* initial_cdm, - const blink::WebString& sink_id); + const blink::WebString& sink_id, + blink::WebLayerTreeView* layer_tree_view); // Provides an EncryptedMediaClient to connect blink's EME layer to media's // implementation of requestMediaKeySystemAccess. Will always return the same
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc index 1de66df..56e9c969 100644 --- a/content/renderer/media/rtc_peer_connection_handler.cc +++ b/content/renderer/media/rtc_peer_connection_handler.cc
@@ -1698,8 +1698,7 @@ std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> track_adapter; if (webrtc_track) { - track_adapter = - track_adapter_map_->GetLocalTrackAdapter(webrtc_track->id()); + track_adapter = track_adapter_map_->GetLocalTrackAdapter(webrtc_track); DCHECK(track_adapter); } it = rtp_senders_ @@ -1737,12 +1736,21 @@ std::vector<rtc::scoped_refptr<webrtc::RtpReceiverInterface>> webrtc_receivers = native_peer_connection_->GetReceivers(); - blink::WebVector<std::unique_ptr<blink::WebRTCRtpReceiver>> web_receivers( - webrtc_receivers.size()); - for (size_t i = 0; i < webrtc_receivers.size(); ++i) { - web_receivers[i] = GetReceiverForTrack(webrtc_receivers[i]); + std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> web_receivers; + for (const auto& webrtc_receiver : webrtc_receivers) { + std::unique_ptr<blink::WebRTCRtpReceiver> web_receiver = + GetWebRTCRtpReceiver(webrtc_receiver); + // |web_receiver| is null if we cannot find an initialized track adapter for + // it. This can happen because adding and removing tracks happens + // asynchronously. + if (web_receiver) + web_receivers.push_back(std::move(web_receiver)); } - return web_receivers; + blink::WebVector<std::unique_ptr<blink::WebRTCRtpReceiver>> web_vector( + web_receivers.size()); + for (size_t i = 0; i < web_vector.size(); ++i) + web_vector[i] = std::move(web_receivers[i]); + return web_vector; } std::unique_ptr<blink::WebRTCRtpSender> RTCPeerConnectionHandler::AddTrack( @@ -2016,7 +2024,7 @@ std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> stream_web_receivers; for (const auto& webrtc_receiver : webrtc_receivers) { if (IsReceiverForStream(webrtc_receiver, stream_ptr->webrtc_stream())) - stream_web_receivers.push_back(GetReceiverForTrack(webrtc_receiver)); + stream_web_receivers.push_back(GetWebRTCRtpReceiver(webrtc_receiver)); } blink::WebVector<std::unique_ptr<blink::WebRTCRtpReceiver>> result( stream_web_receivers.size()); @@ -2144,14 +2152,15 @@ } std::unique_ptr<blink::WebRTCRtpReceiver> -RTCPeerConnectionHandler::GetReceiverForTrack( +RTCPeerConnectionHandler::GetWebRTCRtpReceiver( rtc::scoped_refptr<webrtc::RtpReceiverInterface> webrtc_receiver) { rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track = webrtc_receiver->track(); DCHECK(webrtc_track); std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> track_adapter = - track_adapter_map_->GetRemoteTrackAdapter(webrtc_track->id()); - DCHECK(track_adapter); + track_adapter_map_->GetRemoteTrackAdapter(webrtc_track); + if (!track_adapter) + return nullptr; // Create a reference to the receiver. Multiple |RTCRtpReceiver|s can // reference the same webrtc track, see |id|. return base::MakeUnique<RTCRtpReceiver>(webrtc_receiver,
diff --git a/content/renderer/media/rtc_peer_connection_handler.h b/content/renderer/media/rtc_peer_connection_handler.h index 856bbf7..b2eacef 100644 --- a/content/renderer/media/rtc_peer_connection_handler.h +++ b/content/renderer/media/rtc_peer_connection_handler.h
@@ -236,7 +236,7 @@ const FirstSessionDescription& local, const FirstSessionDescription& remote); - std::unique_ptr<blink::WebRTCRtpReceiver> GetReceiverForTrack( + std::unique_ptr<blink::WebRTCRtpReceiver> GetWebRTCRtpReceiver( rtc::scoped_refptr<webrtc::RtpReceiverInterface> webrtc_receiver); scoped_refptr<base::SingleThreadTaskRunner> signaling_thread() const;
diff --git a/content/renderer/media/webrtc/two_keys_adapter_map.h b/content/renderer/media/webrtc/two_keys_adapter_map.h new file mode 100644 index 0000000..02765ea --- /dev/null +++ b/content/renderer/media/webrtc/two_keys_adapter_map.h
@@ -0,0 +1,131 @@ +// Copyright (c) 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_RENDERER_MEDIA_WEBRTC_TWO_KEYS_MAP_H_ +#define CONTENT_RENDERER_MEDIA_WEBRTC_TWO_KEYS_MAP_H_ + +#include <map> +#include <memory> +#include <utility> + +#include "base/logging.h" + +namespace content { + +// A map with up to two keys per entry. An element is inserted with a key, this +// is the primary key. A secondary key can optionally be set to the same entry +// and it may be set at a later point in time than the element was inserted. For +// lookup and erasure both keys can be used. +// +// This was designed to assist the implementation of adapter maps. The adapters +// are the glue between the blink and webrtc layer objects. The adapter maps +// keep track of which blink and webrtc layer objects have which associated +// adapter. This requires two keys per adapter entry: something that can be used +// for lookup based on a webrtc layer object and something that can be used for +// lookup based on a blink layer object. The primary key is based on the +// webrtc/blink object that was used to create the adapter and the secondary key +// is based on the resulting blink/webrtc object after the adapter has been +// initialized. +template <typename PrimaryKey, typename SecondaryKey, typename Value> +class TwoKeysAdapterMap { + public: + // Maps the primary key to the value, increasing |PrimarySize| by one and + // allowing lookup of the value based on primary key. + // There must not already exist a mapping for this primary key, in other words + // |!FindByPrimary(primary)| must hold. + void Insert(PrimaryKey primary, Value value) { + DCHECK(entries_by_primary_.find(primary) == entries_by_primary_.end()); + auto it = entries_by_primary_ + .insert(std::make_pair( + std::move(primary), + std::unique_ptr<Entry>(new Entry(std::move(value))))) + .first; + it->second->primary_it = it; + } + + // Maps the secondary key to the value mapped by the primary key, increasing + // |SecondarySize| by one and allowing lookup of the value based on secondary + // key. + // There must exist a mapping for this primary key and there must not already + // exist a mapping for this secondary key, in other words + // |FindByPrimary(primary) && !FindBySecondary(secondary)| must hold. + void SetSecondaryKey(const PrimaryKey& primary, SecondaryKey secondary) { + auto it = entries_by_primary_.find(primary); + DCHECK(it != entries_by_primary_.end()); + DCHECK(entries_by_secondary_.find(secondary) == + entries_by_secondary_.end()); + Entry* entry = it->second.get(); + entry->secondary_it = + entries_by_secondary_ + .insert(std::make_pair(std::move(secondary), entry)) + .first; + } + + // Returns a pointer to the value mapped by the primary key, or null if the + // primary key is not mapped to any value. The pointer is valid for as long as + // the value is in the map. + Value* FindByPrimary(const PrimaryKey& primary) const { + auto it = entries_by_primary_.find(primary); + if (it == entries_by_primary_.end()) + return nullptr; + return &it->second->value; + } + + // Returns a pointer to the value mapped by the secondary key, or null if the + // secondary key is not mapped to any value. The pointer is valid for as long + // as the value is in the map. + Value* FindBySecondary(const SecondaryKey& secondary) const { + auto it = entries_by_secondary_.find(secondary); + if (it == entries_by_secondary_.end()) + return nullptr; + return &it->second->value; + } + + // Erases the value associated with the primary key, removing the mapping of + // of its primary and secondary key, if it had one. Returns true on removal or + // false if there was no value associated with the primary key. + bool EraseByPrimary(const PrimaryKey& primary) { + auto primary_it = entries_by_primary_.find(primary); + if (primary_it == entries_by_primary_.end()) + return false; + if (primary_it->second->secondary_it != entries_by_secondary_.end()) + entries_by_secondary_.erase(primary_it->second->secondary_it); + entries_by_primary_.erase(primary_it); + return true; + } + + // Erases the value associated with the secondary key, removing the mapping of + // of both its primary and secondary keys. Returns true on removal or false if + // there was no value associated with the secondary key. + bool EraseBySecondary(const SecondaryKey& secondary) { + auto secondary_it = entries_by_secondary_.find(secondary); + if (secondary_it == entries_by_secondary_.end()) + return false; + entries_by_primary_.erase(secondary_it->second->primary_it); + entries_by_secondary_.erase(secondary_it); + return true; + } + + // The number of elements in the map. + size_t PrimarySize() const { return entries_by_primary_.size(); } + // The number of elements in the map which have secondary keys. + size_t SecondarySize() const { return entries_by_secondary_.size(); } + bool empty() const { return entries_by_primary_.empty(); } + + private: + struct Entry { + Entry(Value value) : value(std::move(value)) {} + + Value value; + typename std::map<PrimaryKey, std::unique_ptr<Entry>>::iterator primary_it; + typename std::map<SecondaryKey, Entry*>::iterator secondary_it; + }; + + typename std::map<PrimaryKey, std::unique_ptr<Entry>> entries_by_primary_; + typename std::map<SecondaryKey, Entry*> entries_by_secondary_; +}; + +} // namespace content + +#endif // CONTENT_RENDERER_MEDIA_WEBRTC_TWO_KEYS_MAP_H_
diff --git a/content/renderer/media/webrtc/two_keys_adapter_map_unittest.cc b/content/renderer/media/webrtc/two_keys_adapter_map_unittest.cc new file mode 100644 index 0000000..5a85c8c0 --- /dev/null +++ b/content/renderer/media/webrtc/two_keys_adapter_map_unittest.cc
@@ -0,0 +1,78 @@ +// Copyright (c) 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 "content/renderer/media/webrtc/two_keys_adapter_map.h" + +#include "base/macros.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace content { + +class TwoKeysAdapterMapTest : public ::testing::Test { + public: + struct MoveOnlyValue { + explicit MoveOnlyValue(std::string str) : str(std::move(str)) {} + MoveOnlyValue(MoveOnlyValue&& other) : str(std::move(other.str)) {} + MoveOnlyValue& operator=(MoveOnlyValue&& other) { + str = std::move(other.str); + return *this; + } + + std::string str; + + DISALLOW_COPY_AND_ASSIGN(MoveOnlyValue); + }; + + TwoKeysAdapterMap<std::string, std::string, MoveOnlyValue> map_; +}; + +TEST_F(TwoKeysAdapterMapTest, ShouldInitiallyBeEmpty) { + EXPECT_EQ(0u, map_.PrimarySize()); + EXPECT_EQ(0u, map_.SecondarySize()); + EXPECT_FALSE(map_.FindByPrimary("invalid")); + EXPECT_FALSE(map_.FindBySecondary("invalid")); +} + +TEST_F(TwoKeysAdapterMapTest, InsertPrimaryShouldAllowLookup) { + map_.Insert("aPrimary", MoveOnlyValue("aValue")); + EXPECT_EQ(1u, map_.PrimarySize()); + EXPECT_EQ(0u, map_.SecondarySize()); + EXPECT_TRUE(map_.FindByPrimary("aPrimary")); + EXPECT_EQ("aValue", map_.FindByPrimary("aPrimary")->str); +} + +TEST_F(TwoKeysAdapterMapTest, SetSecondaryKeyShouldAllowLookup) { + map_.Insert("aPrimary", MoveOnlyValue("aValue")); + map_.SetSecondaryKey("aPrimary", "aSecondary"); + EXPECT_EQ(1u, map_.SecondarySize()); + EXPECT_TRUE(map_.FindBySecondary("aSecondary")); + EXPECT_EQ("aValue", map_.FindBySecondary("aSecondary")->str); +} + +TEST_F(TwoKeysAdapterMapTest, EraseByPrimaryShouldRemoveElement) { + map_.Insert("aPrimary", MoveOnlyValue("aValue")); + map_.SetSecondaryKey("aPrimary", "aSecondary"); + EXPECT_TRUE(map_.EraseByPrimary("aPrimary")); + EXPECT_EQ(0u, map_.PrimarySize()); + EXPECT_EQ(0u, map_.SecondarySize()); + EXPECT_FALSE(map_.FindByPrimary("aPrimary")); + EXPECT_FALSE(map_.FindBySecondary("aSecondary")); +} + +TEST_F(TwoKeysAdapterMapTest, EraseBySecondaryShouldRemoveElement) { + map_.Insert("aPrimary", MoveOnlyValue("aValue")); + map_.SetSecondaryKey("aPrimary", "aSecondary"); + EXPECT_TRUE(map_.EraseBySecondary("aSecondary")); + EXPECT_EQ(0u, map_.PrimarySize()); + EXPECT_EQ(0u, map_.SecondarySize()); + EXPECT_FALSE(map_.FindByPrimary("aPrimary")); + EXPECT_FALSE(map_.FindBySecondary("aSecondary")); +} + +TEST_F(TwoKeysAdapterMapTest, EraseInvalidElementShouldReturnFalse) { + EXPECT_FALSE(map_.EraseByPrimary("invalid")); + EXPECT_FALSE(map_.EraseBySecondary("invalid")); +} + +} // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter_map.h b/content/renderer/media/webrtc/webrtc_media_stream_adapter_map.h index 91513e3a..5283ba5 100644 --- a/content/renderer/media/webrtc/webrtc_media_stream_adapter_map.h +++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter_map.h
@@ -14,6 +14,11 @@ namespace content { +// TODO(hbos): The string id of streams is not necessarily unique as is assumed +// here. When updating the map to take care of both local and remote streams +// as part of https://crbug.com/705901, make use of |TwoKeysAdapterMap| like +// |WebRtcMediaStreamTrackAdapterMap| does. + // A map and owner of |WebRtcMediaStreamAdapter|s. Adapters are the glue between // blink and webrtc layer versions of streams. As long as a stream is in use by // a peer connection there has to exist an adapter for it. The map takes care of
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc index 0475a36..bdec0662 100644 --- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc +++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc
@@ -10,24 +10,11 @@ namespace content { -WebRtcMediaStreamTrackAdapterMap::AdapterEntry::AdapterEntry( - const scoped_refptr<WebRtcMediaStreamTrackAdapter>& adapter) - : adapter(adapter) {} - -WebRtcMediaStreamTrackAdapterMap::AdapterEntry::AdapterEntry( - AdapterEntry&& other) - : adapter(other.adapter) { - other.adapter = nullptr; -} - -WebRtcMediaStreamTrackAdapterMap::AdapterEntry::~AdapterEntry() { -} - WebRtcMediaStreamTrackAdapterMap::AdapterRef::AdapterRef( - const scoped_refptr<WebRtcMediaStreamTrackAdapterMap>& map, + scoped_refptr<WebRtcMediaStreamTrackAdapterMap> map, Type type, - const MapEntryIterator& it) - : map_(map), type_(type), it_(it), adapter_(entry()->adapter) { + scoped_refptr<WebRtcMediaStreamTrackAdapter> adapter) + : map_(std::move(map)), type_(type), adapter_(std::move(adapter)) { DCHECK(map_); DCHECK(adapter_); } @@ -37,13 +24,25 @@ scoped_refptr<WebRtcMediaStreamTrackAdapter> removed_adapter; { base::AutoLock scoped_lock(map_->lock_); + // The adapter is stored in the track adapter map and we have |adapter_|, + // so there must be at least two references to the adapter. + DCHECK(!adapter_->HasOneRef()); + // Using a raw pointer instead of |adapter_| allows the reference count to + // go down to one if this is the last |AdapterRef|. + WebRtcMediaStreamTrackAdapter* adapter = adapter_.get(); adapter_ = nullptr; - if (entry()->adapter->HasOneRef()) { - removed_adapter = entry()->adapter; - if (type_ == Type::kLocal) - map_->local_track_adapters_.erase(it_); - else - map_->remote_track_adapters_.erase(it_); + if (adapter->HasOneRef()) { + removed_adapter = adapter; + // "GetOrCreate..." ensures the adapter is initialized and the secondary + // key is set before the last |AdapterRef| is destroyed. We can use either + // the primary or secondary key for removal. + DCHECK(adapter->is_initialized()); + if (type_ == Type::kLocal) { + map_->local_track_adapters_.EraseByPrimary( + adapter->web_track().UniqueId()); + } else { + map_->remote_track_adapters_.EraseByPrimary(adapter->webrtc_track()); + } } } // Dispose the adapter if it was removed. This is performed after releasing @@ -57,7 +56,7 @@ std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> WebRtcMediaStreamTrackAdapterMap::AdapterRef::Copy() const { base::AutoLock scoped_lock(map_->lock_); - return base::WrapUnique(new AdapterRef(map_, type_, it_)); + return base::WrapUnique(new AdapterRef(map_, type_, adapter_)); } WebRtcMediaStreamTrackAdapterMap::WebRtcMediaStreamTrackAdapterMap( @@ -73,8 +72,27 @@ } std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> -WebRtcMediaStreamTrackAdapterMap::GetLocalTrackAdapter(const std::string& id) { - return GetTrackAdapter(AdapterRef::Type::kLocal, id); +WebRtcMediaStreamTrackAdapterMap::GetLocalTrackAdapter( + const blink::WebMediaStreamTrack& web_track) { + base::AutoLock scoped_lock(lock_); + scoped_refptr<WebRtcMediaStreamTrackAdapter>* adapter_ptr = + local_track_adapters_.FindByPrimary(web_track.UniqueId()); + if (!adapter_ptr) + return nullptr; + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kLocal, *adapter_ptr)); +} + +std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> +WebRtcMediaStreamTrackAdapterMap::GetLocalTrackAdapter( + webrtc::MediaStreamTrackInterface* webrtc_track) { + base::AutoLock scoped_lock(lock_); + scoped_refptr<WebRtcMediaStreamTrackAdapter>* adapter_ptr = + local_track_adapters_.FindBySecondary(webrtc_track); + if (!adapter_ptr) + return nullptr; + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kLocal, *adapter_ptr)); } std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> @@ -82,21 +100,51 @@ const blink::WebMediaStreamTrack& web_track) { DCHECK(!web_track.IsNull()); DCHECK(main_thread_->BelongsToCurrentThread()); - return GetOrCreateTrackAdapter( - AdapterRef::Type::kLocal, - base::Bind(&WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter, - factory_, main_thread_, web_track), - web_track.Id().Utf8()); + base::AutoLock scoped_lock(lock_); + scoped_refptr<WebRtcMediaStreamTrackAdapter>* adapter_ptr = + local_track_adapters_.FindByPrimary(web_track.UniqueId()); + if (adapter_ptr) { + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kLocal, *adapter_ptr)); + } + scoped_refptr<WebRtcMediaStreamTrackAdapter> new_adapter = + WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter( + factory_, main_thread_, web_track); + DCHECK(new_adapter->is_initialized()); + local_track_adapters_.Insert(web_track.UniqueId(), new_adapter); + local_track_adapters_.SetSecondaryKey(web_track.UniqueId(), + new_adapter->webrtc_track()); + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kLocal, new_adapter)); } size_t WebRtcMediaStreamTrackAdapterMap::GetLocalTrackCount() const { base::AutoLock scoped_lock(lock_); - return local_track_adapters_.size(); + return local_track_adapters_.PrimarySize(); } std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> -WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackAdapter(const std::string& id) { - return GetTrackAdapter(AdapterRef::Type::kRemote, id); +WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackAdapter( + const blink::WebMediaStreamTrack& web_track) { + base::AutoLock scoped_lock(lock_); + scoped_refptr<WebRtcMediaStreamTrackAdapter>* adapter_ptr = + remote_track_adapters_.FindBySecondary(web_track.UniqueId()); + if (!adapter_ptr || !(*adapter_ptr)->is_initialized()) + return nullptr; + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kRemote, *adapter_ptr)); +} + +std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> +WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackAdapter( + webrtc::MediaStreamTrackInterface* webrtc_track) { + base::AutoLock scoped_lock(lock_); + scoped_refptr<WebRtcMediaStreamTrackAdapter>* adapter_ptr = + remote_track_adapters_.FindByPrimary(webrtc_track); + if (!adapter_ptr || !(*adapter_ptr)->is_initialized()) + return nullptr; + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kRemote, *adapter_ptr)); } std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> @@ -104,50 +152,46 @@ webrtc::MediaStreamTrackInterface* webrtc_track) { DCHECK(webrtc_track); DCHECK(!main_thread_->BelongsToCurrentThread()); - return GetOrCreateTrackAdapter( - AdapterRef::Type::kRemote, - base::Bind(&WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter, - factory_, main_thread_, webrtc_track), - webrtc_track->id()); + base::AutoLock scoped_lock(lock_); + scoped_refptr<WebRtcMediaStreamTrackAdapter>* adapter_ptr = + remote_track_adapters_.FindByPrimary(webrtc_track); + if (adapter_ptr) { + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kRemote, *adapter_ptr)); + } + scoped_refptr<WebRtcMediaStreamTrackAdapter> new_adapter = + WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter( + factory_, main_thread_, webrtc_track); + remote_track_adapters_.Insert(webrtc_track, new_adapter); + // The new adapter is initialized in a post to the main thread. As soon as it + // is initialized we map its |webrtc_track| to the |remote_track_adapters_| + // entry as its secondary key. This ensures that there is at least one + // |AdapterRef| alive until after the adapter is initialized and its secondary + // key is set. + main_thread_->PostTask( + FROM_HERE, + base::Bind( + &WebRtcMediaStreamTrackAdapterMap::OnRemoteTrackAdapterInitialized, + this, + base::Passed(base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kRemote, new_adapter))))); + return base::WrapUnique( + new AdapterRef(this, AdapterRef::Type::kRemote, new_adapter)); } size_t WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackCount() const { base::AutoLock scoped_lock(lock_); - return remote_track_adapters_.size(); + return remote_track_adapters_.PrimarySize(); } -std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> -WebRtcMediaStreamTrackAdapterMap::GetTrackAdapter( - WebRtcMediaStreamTrackAdapterMap::AdapterRef::Type type, - const std::string& id) { - std::map<std::string, AdapterEntry>* track_adapters = - type == AdapterRef::Type::kLocal ? &local_track_adapters_ - : &remote_track_adapters_; - base::AutoLock scoped_lock(lock_); - auto it = track_adapters->find(id); - if (it == track_adapters->end()) - return nullptr; - return base::WrapUnique(new AdapterRef(this, type, it)); -} - -std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> -WebRtcMediaStreamTrackAdapterMap::GetOrCreateTrackAdapter( - AdapterRef::Type type, - base::Callback<scoped_refptr<WebRtcMediaStreamTrackAdapter>()> - create_adapter_callback, - const std::string& id) { - std::map<std::string, AdapterEntry>* track_adapters = - type == AdapterRef::Type::kLocal ? &local_track_adapters_ - : &remote_track_adapters_; - base::AutoLock scoped_lock(lock_); - auto it = track_adapters->find(id); - if (it == track_adapters->end()) { - scoped_refptr<WebRtcMediaStreamTrackAdapter> adapter = - create_adapter_callback.Run(); - it = - track_adapters->insert(std::make_pair(id, AdapterEntry(adapter))).first; +void WebRtcMediaStreamTrackAdapterMap::OnRemoteTrackAdapterInitialized( + std::unique_ptr<AdapterRef> adapter_ref) { + DCHECK(adapter_ref->is_initialized()); + { + base::AutoLock scoped_lock(lock_); + remote_track_adapters_.SetSecondaryKey(adapter_ref->webrtc_track(), + adapter_ref->web_track().UniqueId()); } - return base::WrapUnique(new AdapterRef(this, type, it)); } } // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h index 758b905..de92d96 100644 --- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h +++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h
@@ -11,6 +11,7 @@ #include "base/memory/ref_counted.h" #include "base/single_thread_task_runner.h" #include "content/common/content_export.h" +#include "content/renderer/media/webrtc/two_keys_adapter_map.h" #include "content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h" #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" #include "third_party/webrtc/api/mediastreaminterface.h" @@ -25,21 +26,6 @@ // adapter are destroyed it is disposed and removed from the map. class CONTENT_EXPORT WebRtcMediaStreamTrackAdapterMap : public base::RefCountedThreadSafe<WebRtcMediaStreamTrackAdapterMap> { - private: - // The map's entries are reference counted in order to |Dispose| the adapter - // when all |AdapterRef|s referencing an entry are destroyed. - // Private section needed here due to |AdapterRef|'s usage of |AdapterEntry|. - struct AdapterEntry { - AdapterEntry(const scoped_refptr<WebRtcMediaStreamTrackAdapter>& adapter); - AdapterEntry(AdapterEntry&& other); - ~AdapterEntry(); - - AdapterEntry(const AdapterEntry&) = delete; - AdapterEntry& operator=(const AdapterEntry&) = delete; - - scoped_refptr<WebRtcMediaStreamTrackAdapter> adapter; - }; - public: // Acts as an accessor to adapter members without leaking a reference to the // adapter. When the last |AdapterRef| is destroyed, the corresponding adapter @@ -68,20 +54,18 @@ private: friend class WebRtcMediaStreamTrackAdapterMap; - using MapEntryIterator = std::map<std::string, AdapterEntry>::iterator; enum class Type { kLocal, kRemote }; - // Increments the |AdapterEntry::ref_count|. Assumes map's |lock_| is held. - AdapterRef(const scoped_refptr<WebRtcMediaStreamTrackAdapterMap>& map, + // Assumes map's |lock_| is held. + AdapterRef(scoped_refptr<WebRtcMediaStreamTrackAdapterMap> map, Type type, - const MapEntryIterator& it); - - AdapterEntry* entry() { return &it_->second; } + scoped_refptr<WebRtcMediaStreamTrackAdapter> adapter); scoped_refptr<WebRtcMediaStreamTrackAdapterMap> map_; Type type_; - MapEntryIterator it_; - // A reference to the entry's adapter, ensures that |HasOneRef| is false. + // A reference to the entry's adapter, ensures that |HasOneRef()| is false + // as long as the |AdapterRef| is kept alive (the map entry has one + // reference to it too). scoped_refptr<WebRtcMediaStreamTrackAdapter> adapter_; }; @@ -89,11 +73,16 @@ WebRtcMediaStreamTrackAdapterMap( PeerConnectionDependencyFactory* const factory); - // Gets the new reference to the local track adapter by ID, or null if no such - // adapter was found. When all references are destroyed the adapter is - // disposed and removed from the map. This method can be called from any - // thread, but references must be destroyed on the main thread. - std::unique_ptr<AdapterRef> GetLocalTrackAdapter(const std::string& id); + // Gets a new reference to the local track adapter, or null if no such adapter + // was found. When all references are destroyed the adapter is disposed and + // removed from the map. This method can be called from any thread, but + // references must be destroyed on the main thread. + // The adapter is a associated with a blink and webrtc track, lookup works by + // either track. + std::unique_ptr<AdapterRef> GetLocalTrackAdapter( + const blink::WebMediaStreamTrack& web_track); + std::unique_ptr<AdapterRef> GetLocalTrackAdapter( + webrtc::MediaStreamTrackInterface* webrtc_track); // Invoke on the main thread. Gets a new reference to the local track adapter // for the web track. If no adapter exists for the track one is created and // initialized. When all references are destroyed the adapter is disposed and @@ -102,11 +91,16 @@ const blink::WebMediaStreamTrack& web_track); size_t GetLocalTrackCount() const; - // Gets the new reference to the remote track adapter by ID, or null if no - // such adapter was found. When all references are destroyed the adapter is - // disposed and removed from the map. This method can be called from any + // Gets a new reference to the remote track adapter if it exists and is + // initialized, null otherwise. When all references are destroyed the adapter + // is disposed and removed from the map. This method can be called from any // thread, but references must be destroyed on the main thread. - std::unique_ptr<AdapterRef> GetRemoteTrackAdapter(const std::string& id); + // The adapter is a associated with a blink and webrtc track, lookup works by + // either track. + std::unique_ptr<AdapterRef> GetRemoteTrackAdapter( + const blink::WebMediaStreamTrack& web_track); + std::unique_ptr<AdapterRef> GetRemoteTrackAdapter( + webrtc::MediaStreamTrackInterface* webrtc_track); // Invoke on the webrtc signaling thread. Gets a new reference to the remote // track adapter for the webrtc track. If no adapter exists for the track one // is created and initialization completes on the main thread in a post. When @@ -123,13 +117,16 @@ virtual ~WebRtcMediaStreamTrackAdapterMap(); private: - std::unique_ptr<AdapterRef> GetTrackAdapter(AdapterRef::Type type, - const std::string& id); - std::unique_ptr<AdapterRef> GetOrCreateTrackAdapter( - AdapterRef::Type type, - base::Callback<scoped_refptr<WebRtcMediaStreamTrackAdapter>()> - create_adapter_callback, - const std::string& id); + using LocalTrackAdapterMap = + TwoKeysAdapterMap<int, + webrtc::MediaStreamTrackInterface*, + scoped_refptr<WebRtcMediaStreamTrackAdapter>>; + using RemoteTrackAdapterMap = + TwoKeysAdapterMap<webrtc::MediaStreamTrackInterface*, + int, + scoped_refptr<WebRtcMediaStreamTrackAdapter>>; + + void OnRemoteTrackAdapterInitialized(std::unique_ptr<AdapterRef> adapter_ref); // Pointer to a |PeerConnectionDependencyFactory| owned by the |RenderThread|. // It's valid for the lifetime of |RenderThread|. @@ -137,8 +134,8 @@ scoped_refptr<base::SingleThreadTaskRunner> main_thread_; mutable base::Lock lock_; - std::map<std::string, AdapterEntry> local_track_adapters_; - std::map<std::string, AdapterEntry> remote_track_adapters_; + LocalTrackAdapterMap local_track_adapters_; + RemoteTrackAdapterMap remote_track_adapters_; }; } // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map_unittest.cc b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map_unittest.cc index deb16d55..cd765b9 100644 --- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map_unittest.cc +++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map_unittest.cc
@@ -108,8 +108,7 @@ map_->GetOrCreateLocalTrackAdapter(web_track); EXPECT_TRUE(adapter_ref->is_initialized()); EXPECT_EQ(adapter_ref->GetAdapterForTesting(), - map_->GetLocalTrackAdapter(web_track.Id().Utf8()) - ->GetAdapterForTesting()); + map_->GetLocalTrackAdapter(web_track)->GetAdapterForTesting()); EXPECT_EQ(1u, map_->GetLocalTrackCount()); // "GetOrCreate" for already existing track. @@ -127,7 +126,7 @@ // dispose it. adapter_ref.reset(); EXPECT_EQ(0u, map_->GetLocalTrackCount()); - EXPECT_EQ(nullptr, map_->GetLocalTrackAdapter(web_track.Id().Utf8())); + EXPECT_EQ(nullptr, map_->GetLocalTrackAdapter(web_track)); // Allow the disposing of track to occur. RunMessageLoopsUntilIdle(); } @@ -140,7 +139,7 @@ EXPECT_TRUE(adapter_ref->is_initialized()); EXPECT_EQ( adapter_ref->GetAdapterForTesting(), - map_->GetRemoteTrackAdapter(webrtc_track->id())->GetAdapterForTesting()); + map_->GetRemoteTrackAdapter(webrtc_track.get())->GetAdapterForTesting()); EXPECT_EQ(1u, map_->GetRemoteTrackCount()); // "GetOrCreate" for already existing track. @@ -158,7 +157,7 @@ // dispose it. adapter_ref.reset(); EXPECT_EQ(0u, map_->GetRemoteTrackCount()); - EXPECT_EQ(nullptr, map_->GetRemoteTrackAdapter(webrtc_track->id())); + EXPECT_EQ(nullptr, map_->GetRemoteTrackAdapter(webrtc_track.get())); // Allow the disposing of track to occur. RunMessageLoopsUntilIdle(); } @@ -172,8 +171,9 @@ std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> local_adapter = map_->GetOrCreateLocalTrackAdapter(local_web_track); EXPECT_TRUE(local_adapter->is_initialized()); - EXPECT_EQ(local_adapter->GetAdapterForTesting(), - map_->GetLocalTrackAdapter(id)->GetAdapterForTesting()); + EXPECT_EQ( + local_adapter->GetAdapterForTesting(), + map_->GetLocalTrackAdapter(local_web_track)->GetAdapterForTesting()); EXPECT_EQ(1u, map_->GetLocalTrackCount()); scoped_refptr<MockWebRtcAudioTrack> remote_webrtc_track = @@ -182,7 +182,8 @@ GetOrCreateRemoteTrackAdapter(remote_webrtc_track.get()); EXPECT_TRUE(remote_adapter->is_initialized()); EXPECT_EQ(remote_adapter->GetAdapterForTesting(), - map_->GetRemoteTrackAdapter(id)->GetAdapterForTesting()); + map_->GetRemoteTrackAdapter(remote_webrtc_track.get()) + ->GetAdapterForTesting()); EXPECT_NE(local_adapter->GetAdapterForTesting(), remote_adapter->GetAdapterForTesting()); EXPECT_EQ(1u, map_->GetRemoteTrackCount()); @@ -192,18 +193,21 @@ remote_adapter.reset(); EXPECT_EQ(0u, map_->GetLocalTrackCount()); EXPECT_EQ(0u, map_->GetRemoteTrackCount()); - EXPECT_EQ(nullptr, map_->GetLocalTrackAdapter(id)); - EXPECT_EQ(nullptr, map_->GetRemoteTrackAdapter(id)); + EXPECT_EQ(nullptr, map_->GetLocalTrackAdapter(local_web_track)); + EXPECT_EQ(nullptr, map_->GetRemoteTrackAdapter(remote_webrtc_track.get())); // Allow the disposing of tracks to occur. RunMessageLoopsUntilIdle(); } -TEST_F(WebRtcMediaStreamTrackAdapterMapTest, GetLocalTrackAdapterInvalidID) { - EXPECT_EQ(nullptr, map_->GetLocalTrackAdapter("invalid")); +TEST_F(WebRtcMediaStreamTrackAdapterMapTest, GetMissingLocalTrackAdapter) { + blink::WebMediaStreamTrack local_web_track = CreateLocalTrack("missing"); + EXPECT_EQ(nullptr, map_->GetLocalTrackAdapter(local_web_track)); } -TEST_F(WebRtcMediaStreamTrackAdapterMapTest, GetRemoteTrackAdapterInvalidID) { - EXPECT_EQ(nullptr, map_->GetRemoteTrackAdapter("invalid")); +TEST_F(WebRtcMediaStreamTrackAdapterMapTest, GetMissingRemoteTrackAdapter) { + scoped_refptr<MockWebRtcAudioTrack> webrtc_track = + MockWebRtcAudioTrack::Create("missing"); + EXPECT_EQ(nullptr, map_->GetRemoteTrackAdapter(webrtc_track.get())); } } // namespace content
diff --git a/content/renderer/mojo_context_state.cc b/content/renderer/mojo_context_state.cc index 6c77120..abf8743 100644 --- a/content/renderer/mojo_context_state.cc +++ b/content/renderer/mojo_context_state.cc
@@ -16,6 +16,7 @@ #include "base/memory/ref_counted_memory.h" #include "base/stl_util.h" #include "content/grit/content_resources.h" +#include "content/public/child/child_url_loader_factory_getter.h" #include "content/public/common/content_client.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/resource_fetcher.h" @@ -186,6 +187,27 @@ } void MojoContextState::FetchModule(const std::string& id) { + static const net::NetworkTrafficAnnotationTag network_traffic_annotation_tag = + net::DefineNetworkTrafficAnnotation("mojo_context_state", R"( + semantics { + sender: "MojoContextState" + description: + "Chrome does fetch for AMD-style module loading of Mojo JavaScript " + "bindings." + trigger: + "When AMD-style module loading of Mojo JavaScript bindings is used." + data: + "Load JavaScript files for Mojo bindings from embedded resources. " + "Nothing is sent over networks." + destination: OTHER + } + policy { + cookies_allowed: NO + setting: "These requests cannot be disabled in settings." + policy_exception_justification: + "Not implemented. Without these requests, Chrome will not work." + })"); + const GURL url(module_prefix_ + id); // TODO(sky): better error checks here? DCHECK(url.is_valid() && !url.is_empty()); @@ -194,6 +216,10 @@ ResourceFetcher* fetcher = ResourceFetcher::Create(url); module_fetchers_.push_back(base::WrapUnique(fetcher)); fetcher->Start(frame_, blink::WebURLRequest::kRequestContextScript, + RenderFrame::FromWebFrame(frame_) + ->GetDefaultURLLoaderFactoryGetter() + ->GetNetworkLoaderFactory(), + network_traffic_annotation_tag, base::Bind(&MojoContextState::OnFetchModuleComplete, base::Unretained(this), fetcher, id)); }
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 0158f9d..7fc5946 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -264,6 +264,7 @@ using blink::WebFrameSerializerClient; using blink::WebHistoryItem; using blink::WebHTTPBody; +using blink::WebLayerTreeView; using blink::WebLocalFrame; using blink::WebMediaPlayer; using blink::WebMediaPlayerClient; @@ -2969,9 +2970,10 @@ WebMediaPlayerClient* client, WebMediaPlayerEncryptedMediaClient* encrypted_client, WebContentDecryptionModule* initial_cdm, - const blink::WebString& sink_id) { - return media_factory_.CreateMediaPlayer(source, client, encrypted_client, - initial_cdm, sink_id); + const blink::WebString& sink_id, + blink::WebLayerTreeView* layer_tree_view) { + return media_factory_.CreateMediaPlayer( + source, client, encrypted_client, initial_cdm, sink_id, layer_tree_view); } std::unique_ptr<blink::WebApplicationCacheHost> @@ -5598,7 +5600,7 @@ // This includes navigations with no request being sent to the network stack. if (IsBrowserSideNavigationEnabled() && info.url_request.CheckForBrowserSideNavigation() && - ShouldMakeNetworkRequestForURL(url) && !use_archive) { + IsURLHandledByNetworkStack(url) && !use_archive) { if (info.default_policy == blink::kWebNavigationPolicyCurrentTab) { // The BeginNavigation() call happens in didStartProvisionalLoad(). We // need to save information about the navigation here.
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 28dda06..6c63b98 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -107,6 +107,7 @@ struct WebContextMenuData; struct WebCursorInfo; struct WebFindOptions; +class WebLayerTreeView; class WebRelatedAppsFetcher; } // namespace blink @@ -498,7 +499,8 @@ blink::WebMediaPlayerClient* client, blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, blink::WebContentDecryptionModule* initial_cdm, - const blink::WebString& sink_id) override; + const blink::WebString& sink_id, + blink::WebLayerTreeView* layer_tree_view) override; std::unique_ptr<blink::WebApplicationCacheHost> CreateApplicationCacheHost( blink::WebApplicationCacheHostClient* client) override; std::unique_ptr<blink::WebContentSettingsClient>
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 94acf02..5f27dda4 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -975,6 +975,8 @@ settings->SetDoNotUpdateSelectionOnMutatingSelectionRange( prefs.do_not_update_selection_on_mutating_selection_range); WebRuntimeFeatures::EnableCSSHexAlphaColor(prefs.css_hex_alpha_color_enabled); + WebRuntimeFeatures::EnableScrollTopLeftInterop( + prefs.scroll_top_left_interop_enabled); #endif // defined(OS_ANDROID) switch (prefs.autoplay_policy) { @@ -1102,12 +1104,6 @@ #endif // ENABLE_PLUGINS -void RenderViewImpl::TransferActiveWheelFlingAnimation( - const blink::WebActiveWheelFlingParameters& params) { - if (webview()) - webview()->TransferActiveWheelFlingAnimation(params); -} - // RenderWidgetInputHandlerDelegate ----------------------------------------- bool RenderViewImpl::DoesRenderWidgetHaveTouchEventHandlersAt( @@ -1770,9 +1766,10 @@ const blink::WebFloatSize& overscrollDelta, const blink::WebFloatSize& accumulatedOverscroll, const blink::WebFloatPoint& positionInViewport, - const blink::WebFloatSize& velocityInViewport) { + const blink::WebFloatSize& velocityInViewport, + const blink::WebScrollBoundaryBehavior& behavior) { RenderWidget::DidOverscroll(overscrollDelta, accumulatedOverscroll, - positionInViewport, velocityInViewport); + positionInViewport, velocityInViewport, behavior); } void RenderViewImpl::HasTouchEventHandlers(bool has_handlers) {
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 99555e15..ebcd1bfc 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h
@@ -76,7 +76,6 @@ class WebStorageNamespace; class WebTappedInfo; class WebURLRequest; -struct WebActiveWheelFlingParameters; struct WebDateTimeChooserParams; struct WebMediaPlayerAction; struct WebPluginAction; @@ -199,9 +198,6 @@ void AttachWebFrameWidget(blink::WebFrameWidget* frame_widget); - void TransferActiveWheelFlingAnimation( - const blink::WebActiveWheelFlingParameters& params) override; - // Starts a timer to send an UpdateState message on behalf of |frame|, if the // timer isn't already running. This allows multiple state changing events to // be coalesced into one update. @@ -265,7 +261,8 @@ void DidOverscroll(const blink::WebFloatSize& overscrollDelta, const blink::WebFloatSize& accumulatedOverscroll, const blink::WebFloatPoint& positionInViewport, - const blink::WebFloatSize& velocityInViewport) override; + const blink::WebFloatSize& velocityInViewport, + const blink::WebScrollBoundaryBehavior& behavior) override; void HasTouchEventHandlers(bool has_handlers) override; blink::WebScreenInfo GetScreenInfo() override; void SetToolTipText(const blink::WebString&,
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index f1cf732c..26e1f69 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -1953,6 +1953,15 @@ } } +void RenderWidget::TransferActiveWheelFlingAnimation( + const blink::WebActiveWheelFlingParameters& params) { + blink::WebWidget* web_widget = GetWebWidget(); + if (web_widget && web_widget->IsWebFrameWidget()) { + static_cast<blink::WebFrameWidget*>(web_widget) + ->TransferActiveWheelFlingAnimation(params); + } +} + void RenderWidget::OnRequestTextInputStateUpdate() { #if defined(OS_ANDROID) DCHECK(!ime_event_guard_); @@ -2280,7 +2289,8 @@ const blink::WebFloatSize& overscrollDelta, const blink::WebFloatSize& accumulatedOverscroll, const blink::WebFloatPoint& position, - const blink::WebFloatSize& velocity) { + const blink::WebFloatSize& velocity, + const blink::WebScrollBoundaryBehavior& behavior) { #if defined(OS_MACOSX) // On OSX the user can disable the elastic overscroll effect. If that's the // case, don't forward the overscroll notification. @@ -2289,7 +2299,7 @@ return; #endif input_handler_->DidOverscrollFromBlink(overscrollDelta, accumulatedOverscroll, - position, velocity); + position, velocity, behavior); } void RenderWidget::StartCompositor() {
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index a5cf1b4c..737c9b94 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h
@@ -304,7 +304,8 @@ void DidOverscroll(const blink::WebFloatSize& overscrollDelta, const blink::WebFloatSize& accumulatedOverscroll, const blink::WebFloatPoint& position, - const blink::WebFloatSize& velocity) override; + const blink::WebFloatSize& velocity, + const blink::WebScrollBoundaryBehavior& behavior) override; void ShowVirtualKeyboardOnElementFocus() override; void ConvertViewportToWindow(blink::WebRect* rect) override; void ConvertWindowToViewport(blink::WebFloatRect* rect) override; @@ -401,8 +402,8 @@ // Helper to convert |point| using ConvertWindowToViewport(). gfx::Point ConvertWindowPointToViewport(const gfx::Point& point); - virtual void TransferActiveWheelFlingAnimation( - const blink::WebActiveWheelFlingParameters& params) {} + void TransferActiveWheelFlingAnimation( + const blink::WebActiveWheelFlingParameters& params); uint32_t GetContentSourceId(); void IncrementContentSourceId();
diff --git a/content/renderer/render_widget_unittest.cc b/content/renderer/render_widget_unittest.cc index 3969eab..cc1b0fb 100644 --- a/content/renderer/render_widget_unittest.cc +++ b/content/renderer/render_widget_unittest.cc
@@ -120,7 +120,8 @@ event.data.scroll_update.delta_y), blink::WebFloatPoint(event.x, event.y), blink::WebFloatSize(event.data.scroll_update.velocity_x, - event.data.scroll_update.velocity_y)); + event.data.scroll_update.velocity_y), + blink::WebScrollBoundaryBehavior()); return true; } @@ -292,7 +293,8 @@ // be sent as a separate IPC. widget()->DidOverscroll(blink::WebFloatSize(10, 5), blink::WebFloatSize(5, 5), blink::WebFloatPoint(1, 1), - blink::WebFloatSize(10, 5)); + blink::WebFloatSize(10, 5), + blink::WebScrollBoundaryBehavior()); ASSERT_EQ(1u, widget()->sink()->message_count()); const IPC::Message* message = widget()->sink()->GetMessageAt(0); ASSERT_EQ(InputHostMsg_DidOverscroll::ID, message->type());
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc index 0493c145..c50381dfc 100644 --- a/content/renderer/service_worker/service_worker_context_client.cc +++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -1101,6 +1101,11 @@ int fetch_event_id, blink::WebServiceWorkerEventResult result, double event_dispatch_time) { + // This TRACE_EVENT is used for perf benchmark to confirm if all of fetch + // events have completed. (crbug.com/736697) + TRACE_EVENT1("ServiceWorker", + "ServiceWorkerContextClient::DidHandleFetchEvent", "event_id", + fetch_event_id); WorkerContextData::SimpleEventCallback callback = std::move(context_->fetch_event_callbacks[fetch_event_id]); DCHECK(callback); @@ -1559,14 +1564,17 @@ mojom::FetchEventPreloadHandlePtr preload_handle, mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, DispatchFetchEventCallback callback) { + // This TRACE_EVENT is used for perf benchmark to confirm if all of fetch + // events have completed. (crbug.com/736697) + TRACE_EVENT1("ServiceWorker", + "ServiceWorkerContextClient::DispatchFetchEvent", "event_id", + fetch_event_id); std::unique_ptr<NavigationPreloadRequest> preload_request = preload_handle ? base::MakeUnique<NavigationPreloadRequest>( fetch_event_id, request.url, std::move(preload_handle)) : nullptr; const bool navigation_preload_sent = !!preload_request; - TRACE_EVENT0("ServiceWorker", - "ServiceWorkerContextClient::DispatchFetchEvent"); context_->fetch_response_callbacks.insert( std::make_pair(fetch_event_id, std::move(response_callback))); context_->fetch_event_callbacks.insert(
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn index ac5d232b..8712559 100644 --- a/content/shell/BUILD.gn +++ b/content/shell/BUILD.gn
@@ -92,6 +92,8 @@ "browser/layout_test/layout_test_resource_dispatcher_host_delegate.h", "browser/layout_test/layout_test_url_request_context_getter.cc", "browser/layout_test/layout_test_url_request_context_getter.h", + "browser/layout_test/mojo_layout_test_helper.cc", + "browser/layout_test/mojo_layout_test_helper.h", "browser/layout_test/secondary_test_window_observer.cc", "browser/layout_test/secondary_test_window_observer.h", "browser/layout_test/test_info_extractor.cc",
diff --git a/content/shell/browser/content_shell_browser_manifest_overlay.json b/content/shell/browser/content_shell_browser_manifest_overlay.json index 2697e0d..c274daf 100644 --- a/content/shell/browser/content_shell_browser_manifest_overlay.json +++ b/content/shell/browser/content_shell_browser_manifest_overlay.json
@@ -5,6 +5,7 @@ "provides": { "renderer": [ "content::mojom::LayoutTestBluetoothFakeAdapterSetter", + "content::mojom::MojoLayoutTestHelper", "bluetooth::mojom::FakeBluetooth" ] }
diff --git a/content/shell/browser/layout_test/layout_test_content_browser_client.cc b/content/shell/browser/layout_test/layout_test_content_browser_client.cc index 3a4fab7..2eaee37 100644 --- a/content/shell/browser/layout_test/layout_test_content_browser_client.cc +++ b/content/shell/browser/layout_test/layout_test_content_browser_client.cc
@@ -19,6 +19,7 @@ #include "content/shell/browser/layout_test/layout_test_message_filter.h" #include "content/shell/browser/layout_test/layout_test_notification_manager.h" #include "content/shell/browser/layout_test/layout_test_resource_dispatcher_host_delegate.h" +#include "content/shell/browser/layout_test/mojo_layout_test_helper.h" #include "content/shell/browser/shell_browser_context.h" #include "content/shell/common/layout_test/layout_test_switches.h" #include "content/shell/common/shell_messages.h" @@ -31,6 +32,11 @@ LayoutTestContentBrowserClient* g_layout_test_browser_client; +void BindLayoutTestHelper(mojom::MojoLayoutTestHelperRequest request, + RenderFrameHost* render_frame_host) { + MojoLayoutTestHelper::Create(std::move(request)); +} + } // namespace LayoutTestContentBrowserClient::LayoutTestContentBrowserClient() { @@ -92,6 +98,7 @@ registry->AddInterface(base::Bind(&bluetooth::FakeBluetooth::Create), ui_task_runner); + registry->AddInterface(base::Bind(&MojoLayoutTestHelper::Create)); } void LayoutTestContentBrowserClient::OverrideWebkitPrefs( @@ -182,4 +189,10 @@ return !block_popups_ || user_gesture; } +void LayoutTestContentBrowserClient::ExposeInterfacesToFrame( + service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>* + registry) { + registry->AddInterface(base::Bind(&BindLayoutTestHelper)); +} + } // namespace content
diff --git a/content/shell/browser/layout_test/layout_test_content_browser_client.h b/content/shell/browser/layout_test/layout_test_content_browser_client.h index 310c727..62b637b 100644 --- a/content/shell/browser/layout_test/layout_test_content_browser_client.h +++ b/content/shell/browser/layout_test/layout_test_content_browser_client.h
@@ -62,6 +62,11 @@ bool opener_suppressed, bool* no_javascript_access) override; + // ShellContentBrowserClient overrides. + void ExposeInterfacesToFrame( + service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>* + registry) override; + private: std::unique_ptr<LayoutTestNotificationManager> layout_test_notification_manager_;
diff --git a/content/shell/browser/layout_test/mojo_layout_test_helper.cc b/content/shell/browser/layout_test/mojo_layout_test_helper.cc new file mode 100644 index 0000000..c420a9e9 --- /dev/null +++ b/content/shell/browser/layout_test/mojo_layout_test_helper.cc
@@ -0,0 +1,26 @@ +// 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 "content/shell/browser/layout_test/mojo_layout_test_helper.h" + +#include "mojo/public/cpp/bindings/strong_binding.h" + +namespace content { + +MojoLayoutTestHelper::MojoLayoutTestHelper() {} + +MojoLayoutTestHelper::~MojoLayoutTestHelper() {} + +// static +void MojoLayoutTestHelper::Create(mojom::MojoLayoutTestHelperRequest request) { + mojo::MakeStrongBinding(base::MakeUnique<MojoLayoutTestHelper>(), + std::move(request)); +} + +void MojoLayoutTestHelper::Reverse(const std::string& message, + ReverseCallback callback) { + std::move(callback).Run(std::string(message.rbegin(), message.rend())); +} + +} // namespace content
diff --git a/content/shell/browser/layout_test/mojo_layout_test_helper.h b/content/shell/browser/layout_test/mojo_layout_test_helper.h new file mode 100644 index 0000000..c0246b3 --- /dev/null +++ b/content/shell/browser/layout_test/mojo_layout_test_helper.h
@@ -0,0 +1,29 @@ +// 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_SHELL_BROWSER_LAYOUT_TEST_MOJO_LAYOUT_TEST_HELPER_H_ +#define CONTENT_SHELL_BROWSER_LAYOUT_TEST_MOJO_LAYOUT_TEST_HELPER_H_ + +#include "base/macros.h" +#include "content/test/data/mojo_layouttest_test.mojom.h" + +namespace content { + +class MojoLayoutTestHelper : public mojom::MojoLayoutTestHelper { + public: + MojoLayoutTestHelper(); + ~MojoLayoutTestHelper() override; + + static void Create(mojom::MojoLayoutTestHelperRequest request); + + // mojom::MojoLayoutTestHelper: + void Reverse(const std::string& message, ReverseCallback callback) override; + + private: + DISALLOW_COPY_AND_ASSIGN(MojoLayoutTestHelper); +}; + +} // namespace content + +#endif // CONTENT_SHELL_BROWSER_LAYOUT_TEST_MOJO_LAYOUT_TEST_HELPER_H_
diff --git a/content/shell/browser/shell.cc b/content/shell/browser/shell.cc index 9d561d70a..ec0dcb7 100644 --- a/content/shell/browser/shell.cc +++ b/content/shell/browser/shell.cc
@@ -73,6 +73,7 @@ Shell::Shell(WebContents* web_contents) : WebContentsObserver(web_contents), + web_contents_(web_contents), devtools_frontend_(NULL), is_fullscreen_(false), window_(NULL), @@ -80,6 +81,8 @@ url_edit_view_(NULL), #endif headless_(false) { + web_contents_->SetDelegate(this); + if (switches::IsRunLayoutTestSwitchPresent()) headless_ = true; windows_.push_back(this); @@ -106,6 +109,8 @@ base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); } + + web_contents_->SetDelegate(nullptr); } Shell* Shell::CreateShell(WebContents* web_contents, @@ -113,9 +118,6 @@ Shell* shell = new Shell(web_contents); shell->PlatformCreateWindow(initial_size.width(), initial_size.height()); - shell->web_contents_.reset(web_contents); - web_contents->SetDelegate(shell); - shell->PlatformSetContents(); shell->PlatformResizeSubViews();
diff --git a/content/shell/browser/shell_browser_main_parts.cc b/content/shell/browser/shell_browser_main_parts.cc index 1f25cd74ff..32524409 100644 --- a/content/shell/browser/shell_browser_main_parts.cc +++ b/content/shell/browser/shell_browser_main_parts.cc
@@ -175,8 +175,7 @@ switches::kCrashDumpsDir); breakpad::CrashDumpObserver::GetInstance()->RegisterClient( base::MakeUnique<breakpad::ChildProcessCrashObserver>( - crash_dumps_dir, kAndroidMinidumpDescriptor, - base::Bind(&base::DoNothing))); + crash_dumps_dir, kAndroidMinidumpDescriptor)); } return 0;
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc index 421fe84..cee4e4e27 100644 --- a/content/shell/browser/shell_content_browser_client.cc +++ b/content/shell/browser/shell_content_browser_client.cc
@@ -39,9 +39,7 @@ #include "content/shell/common/shell_messages.h" #include "content/shell/common/shell_switches.h" #include "content/shell/grit/shell_resources.h" -#include "content/test/data/mojo_layouttest_test.mojom.h" #include "media/mojo/features.h" -#include "mojo/public/cpp/bindings/strong_binding.h" #include "net/ssl/client_cert_identity.h" #include "net/url_request/url_request_context_getter.h" #include "storage/browser/quota/quota_settings.h" @@ -128,26 +126,6 @@ } #endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) -class MojoLayoutTestHelper : public mojom::MojoLayoutTestHelper { - public: - MojoLayoutTestHelper() {} - ~MojoLayoutTestHelper() override {} - - // mojom::MojoLayoutTestHelper: - void Reverse(const std::string& message, ReverseCallback callback) override { - std::move(callback).Run(std::string(message.rbegin(), message.rend())); - } - - private: - DISALLOW_COPY_AND_ASSIGN(MojoLayoutTestHelper); -}; - -void BindLayoutTestHelper(mojom::MojoLayoutTestHelperRequest request, - RenderFrameHost* render_frame_host) { - mojo::MakeStrongBinding(base::MakeUnique<MojoLayoutTestHelper>(), - std::move(request)); -} - } // namespace ShellContentBrowserClient* ShellContentBrowserClient::Get() { @@ -162,7 +140,6 @@ : shell_browser_main_parts_(NULL) { DCHECK(!g_browser_client); g_browser_client = this; - frame_interfaces_.AddInterface(base::Bind(&BindLayoutTestHelper)); } ShellContentBrowserClient::~ShellContentBrowserClient() { @@ -223,8 +200,14 @@ RenderFrameHost* render_frame_host, const std::string& interface_name, mojo::ScopedMessagePipeHandle interface_pipe) { - frame_interfaces_.TryBindInterface(interface_name, &interface_pipe, - render_frame_host); + if (!frame_interfaces_) { + frame_interfaces_ = base::MakeUnique< + service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>>(); + ExposeInterfacesToFrame(frame_interfaces_.get()); + } + + frame_interfaces_->TryBindInterface(interface_name, &interface_pipe, + render_frame_host); } void ShellContentBrowserClient::RegisterInProcessServices( @@ -414,4 +397,8 @@ return shell_browser_main_parts_->off_the_record_browser_context(); } +void ShellContentBrowserClient::ExposeInterfacesToFrame( + service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>* + registry) {} + } // namespace content
diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h index a463177..9d077b8 100644 --- a/content/shell/browser/shell_content_browser_client.h +++ b/content/shell/browser/shell_content_browser_client.h
@@ -99,6 +99,10 @@ } protected: + virtual void ExposeInterfacesToFrame( + service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>* + registry); + void set_resource_dispatcher_host_delegate( std::unique_ptr<ShellResourceDispatcherHostDelegate> delegate) { resource_dispatcher_host_delegate_ = std::move(delegate); @@ -114,7 +118,8 @@ base::Closure select_client_certificate_callback_; - service_manager::BinderRegistryWithArgs<content::RenderFrameHost*> + std::unique_ptr< + service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>> frame_interfaces_; ShellBrowserMainParts* shell_browser_main_parts_;
diff --git a/content/shell/browser/shell_views.cc b/content/shell/browser/shell_views.cc index bd20d90..c513c703 100644 --- a/content/shell/browser/shell_views.cc +++ b/content/shell/browser/shell_views.cc
@@ -115,8 +115,7 @@ void InitShellWindow() { SetBackground(views::CreateStandardPanelBackground()); - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddPaddingColumn(0, 2); @@ -129,8 +128,8 @@ // Add toolbar buttons and URL text field { layout->StartRow(0, 0); - views::GridLayout* toolbar_layout = new views::GridLayout(toolbar_view_); - toolbar_view_->SetLayoutManager(toolbar_layout); + views::GridLayout* toolbar_layout = + views::GridLayout::CreateAndInstall(toolbar_view_); views::ColumnSet* toolbar_column_set = toolbar_layout->AddColumnSet(0);
diff --git a/content/shell/test_runner/event_sender.cc b/content/shell/test_runner/event_sender.cc index 1df04e4..255b086 100644 --- a/content/shell/test_runner/event_sender.cc +++ b/content/shell/test_runner/event_sender.cc
@@ -589,7 +589,7 @@ float velocity_x, float velocity_y, gin::Arguments* args); - bool IsFlinging() const; + bool IsFlinging(); void GestureScrollFirstPoint(int x, int y); void TouchStart(gin::Arguments* args); void TouchMove(gin::Arguments* args); @@ -879,7 +879,7 @@ sender_->GestureFlingStart(x, y, velocity_x, velocity_y, args); } -bool EventSenderBindings::IsFlinging() const { +bool EventSenderBindings::IsFlinging() { if (sender_) return sender_->IsFlinging(); return false; @@ -1989,8 +1989,8 @@ HandleInputEventOnViewOrPopup(event); } -bool EventSender::IsFlinging() const { - return view()->IsFlinging(); +bool EventSender::IsFlinging() { + return mainFrameWidget()->IsFlinging(); } void EventSender::GestureScrollFirstPoint(int x, int y) {
diff --git a/content/shell/test_runner/event_sender.h b/content/shell/test_runner/event_sender.h index 9871739..390128a 100644 --- a/content/shell/test_runner/event_sender.h +++ b/content/shell/test_runner/event_sender.h
@@ -136,7 +136,7 @@ float velocity_x, float velocity_y, gin::Arguments* args); - bool IsFlinging() const; + bool IsFlinging(); void GestureScrollFirstPoint(int x, int y); void TouchStart(gin::Arguments* args);
diff --git a/content/shell/test_runner/web_ax_object_proxy.cc b/content/shell/test_runner/web_ax_object_proxy.cc index 60c86bd..92da2d0 100644 --- a/content/shell/test_runner/web_ax_object_proxy.cc +++ b/content/shell/test_runner/web_ax_object_proxy.cc
@@ -656,10 +656,6 @@ .SetMethod("isAttributeSettable", &WebAXObjectProxy::IsAttributeSettable) .SetMethod("isPressActionSupported", &WebAXObjectProxy::IsPressActionSupported) - .SetMethod("isIncrementActionSupported", - &WebAXObjectProxy::IsIncrementActionSupported) - .SetMethod("isDecrementActionSupported", - &WebAXObjectProxy::IsDecrementActionSupported) .SetMethod("parentElement", &WebAXObjectProxy::ParentElement) .SetMethod("increment", &WebAXObjectProxy::Increment) .SetMethod("decrement", &WebAXObjectProxy::Decrement) @@ -1464,8 +1460,9 @@ void WebAXObjectProxy::SetSelectedTextRange(int selection_start, int length) { accessibility_object_.UpdateLayoutAndCheckValidity(); - accessibility_object_.SetSelectedTextRange(selection_start, - selection_start + length); + accessibility_object_.SetSelection(accessibility_object_, selection_start, + accessibility_object_, + selection_start + length); } void WebAXObjectProxy::SetSelection(v8::Local<v8::Value> anchor_object, @@ -1511,16 +1508,6 @@ return accessibility_object_.CanPress(); } -bool WebAXObjectProxy::IsIncrementActionSupported() { - accessibility_object_.UpdateLayoutAndCheckValidity(); - return accessibility_object_.CanIncrement(); -} - -bool WebAXObjectProxy::IsDecrementActionSupported() { - accessibility_object_.UpdateLayoutAndCheckValidity(); - return accessibility_object_.CanDecrement(); -} - v8::Local<v8::Object> WebAXObjectProxy::ParentElement() { accessibility_object_.UpdateLayoutAndCheckValidity(); blink::WebAXObject parent_object = accessibility_object_.ParentObject(); @@ -1545,7 +1532,7 @@ void WebAXObjectProxy::Press() { accessibility_object_.UpdateLayoutAndCheckValidity(); - accessibility_object_.Press(); + accessibility_object_.Click(); } bool WebAXObjectProxy::SetValue(const std::string& value) { @@ -1577,7 +1564,7 @@ void WebAXObjectProxy::TakeFocus() { accessibility_object_.UpdateLayoutAndCheckValidity(); - accessibility_object_.SetFocused(true); + accessibility_object_.Focus(); } void WebAXObjectProxy::ScrollToMakeVisible() {
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 9cf97e0..601cd19 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -201,6 +201,8 @@ "mock_webblob_registry_impl.h", "mock_webclipboard_impl.cc", "mock_webclipboard_impl.h", + "mock_widget_impl.cc", + "mock_widget_impl.h", "net/url_request_abort_on_end_job.cc", "net/url_request_abort_on_end_job.h", "ppapi_unittest.cc", @@ -1324,8 +1326,6 @@ "../browser/renderer_host/media/video_capture_controller_unittest.cc", "../browser/renderer_host/media/video_capture_manager_unittest.cc", "../browser/renderer_host/media/video_capture_unittest.cc", - "../browser/renderer_host/mock_widget_impl.cc", - "../browser/renderer_host/mock_widget_impl.h", "../browser/renderer_host/offscreen_canvas_provider_impl_unittest.cc", "../browser/renderer_host/render_process_host_unittest.cc", "../browser/renderer_host/render_view_host_unittest.cc", @@ -1447,7 +1447,6 @@ "../common/mac/font_descriptor_unittest.mm", "../common/manifest_util_unittest.cc", "../common/media/media_devices_unittest.cc", - "../common/navigation_params_unittest.cc", "../common/origin_trials/trial_token_unittest.cc", "../common/origin_trials/trial_token_validator_unittest.cc", "../common/origin_util_unittest.cc", @@ -1473,6 +1472,7 @@ "../network/url_loader_unittest.cc", "../public/common/sandbox_type_unittest.cc", "../public/common/simple_url_loader_unittest.cc", + "../public/common/url_utils_unittest.cc", "../public/test/referrer_unittest.cc", "../public/test/test_browser_thread_bundle_unittest.cc", "../renderer/android/disambiguation_popup_helper_unittest.cc", @@ -1733,6 +1733,7 @@ "../renderer/media/webrtc/processed_local_audio_source_unittest.cc", "../renderer/media/webrtc/rtc_stats_unittest.cc", "../renderer/media/webrtc/stun_field_trial_unittest.cc", + "../renderer/media/webrtc/two_keys_adapter_map_unittest.cc", "../renderer/media/webrtc/webrtc_media_stream_adapter_map_unittest.cc", "../renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc", "../renderer/media/webrtc/webrtc_media_stream_track_adapter_map_unittest.cc", @@ -1832,6 +1833,7 @@ "../browser/android/java/gin_java_method_invocation_helper_unittest.cc", "../browser/android/java/java_type_unittest.cc", "../browser/android/java/jni_helper_unittest.cc", + "../browser/android/overscroll_controller_android_unittest.cc", "../browser/android/scoped_surface_request_manager_unittest.cc", "../browser/android/string_message_codec_unittest.cc", "../browser/android/url_request_content_job_unittest.cc",
diff --git a/content/test/content_test_suite.cc b/content/test/content_test_suite.cc index a4563e8..51a9b923 100644 --- a/content/test/content_test_suite.cc +++ b/content/test/content_test_suite.cc
@@ -91,7 +91,7 @@ gpu::GPUInfo gpu_info; gpu::CollectBasicGraphicsInfo(&gpu_info); gpu::GpuFeatureInfo gpu_feature_info = - gpu::GetGpuFeatureInfo(gpu_info, *command_line); + gpu::ComputeGpuFeatureInfo(gpu_info, command_line); gpu::InProcessCommandBuffer::InitializeDefaultServiceForTesting( gpu_feature_info); gl::GLSurfaceTestSupport::InitializeNoExtensionsOneOff();
diff --git a/content/test/data/accessibility/aria/aria-current-expected-blink.txt b/content/test/data/accessibility/aria/aria-current-expected-blink.txt index c739570..c3d25b1 100644 --- a/content/test/data/accessibility/aria/aria-current-expected-blink.txt +++ b/content/test/data/accessibility/aria/aria-current-expected-blink.txt
@@ -23,8 +23,12 @@ ++genericContainer ++++staticText name='Span 1' ++++++inlineTextBox name='Span 1' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++genericContainer ariaCurrentState=true ++++++staticText name='Span 2' ++++++++inlineTextBox name='Span 2' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='Span 3' -++++++inlineTextBox name='Span 3' \ No newline at end of file +++++++inlineTextBox name='Span 3'
diff --git a/content/test/data/accessibility/aria/aria-current-expected-win.txt b/content/test/data/accessibility/aria/aria-current-expected-win.txt index a80fce7f..e795993 100644 --- a/content/test/data/accessibility/aria/aria-current-expected-win.txt +++ b/content/test/data/accessibility/aria/aria-current-expected-win.txt
@@ -15,6 +15,8 @@ ++ROLE_SYSTEM_WHITESPACE name='<newline>' ++IA2_ROLE_SECTION ++++ROLE_SYSTEM_STATICTEXT name='Span 1' +++++ROLE_SYSTEM_STATICTEXT name=' ' ++++IA2_ROLE_SECTION current:true ++++++ROLE_SYSTEM_STATICTEXT name='Span 2' -++++ROLE_SYSTEM_STATICTEXT name='Span 3' \ No newline at end of file +++++ROLE_SYSTEM_STATICTEXT name=' ' +++++ROLE_SYSTEM_STATICTEXT name='Span 3'
diff --git a/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt new file mode 100644 index 0000000..9736f2d --- /dev/null +++ b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems-expected-blink.txt
@@ -0,0 +1,109 @@ +rootWebArea +++grid name='1: Individual rows get their own wrappers' tableRowCount=2 tableColumnCount=2 +++++genericContainer name='r1-wrap' +++++++row selectable name='r1-real' +++++++++cell selectable name='A1' +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++++cell selectable name='A2' +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++genericContainer name='r2-wrap' +++++++genericContainer name='r2-vanilla' +++++++++row selectable name='r2-real' +++++++++++cell selectable name='B1' +++++++++++++staticText name='B1' +++++++++++++++inlineTextBox name='B1' +++++++++++cell selectable name='B2' +++++++++++++staticText name='B2' +++++++++++++++inlineTextBox name='B2' +++++column +++++column +++++tableHeaderContainer +++grid name='2: Single wrapper around all rows' tableRowCount=2 tableColumnCount=2 +++++genericContainer +++++++row selectable +++++++++cell selectable name='A1' +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++++cell selectable name='A2' +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++++row selectable +++++++++cell selectable name='B1' +++++++++++staticText name='B1' +++++++++++++inlineTextBox name='B1' +++++++++cell selectable name='B2' +++++++++++staticText name='B2' +++++++++++++inlineTextBox name='B2' +++++column +++++column +++++tableHeaderContainer +++grid name='3: Individual cells get their own wrappers' tableRowCount=2 tableColumnCount=2 +++++row selectable +++++++genericContainer +++++++++cell selectable name='A1' +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++genericContainer +++++++++cell selectable name='A2' +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++row selectable +++++++genericContainer +++++++++cell selectable name='B1' +++++++++++staticText name='B1' +++++++++++++inlineTextBox name='B1' +++++++genericContainer +++++++++genericContainer +++++++++++cell selectable name='B2' +++++++++++++staticText name='B2' +++++++++++++++inlineTextBox name='B2' +++++column +++++column +++++tableHeaderContainer +++grid name='4: Single wrapper around all cells in a row' tableRowCount=2 tableColumnCount=1 +++++row selectable +++++++genericContainer +++++++++cell selectable name='A1' +++++++++++staticText name='A1' +++++++++++++inlineTextBox name='A1' +++++++++cell selectable name='A2' +++++++++++staticText name='A2' +++++++++++++inlineTextBox name='A2' +++++row selectable +++++++genericContainer +++++++++genericContainer +++++++++++cell selectable name='B1' +++++++++++++staticText name='B1' +++++++++++++++inlineTextBox name='B1' +++++++++genericContainer +++++++++++cell selectable name='B2' +++++++++++++staticText name='B2' +++++++++++++++inlineTextBox name='B2' +++++column +++++tableHeaderContainer +++grid name='5: Wrapper insanity' tableRowCount=2 tableColumnCount=2 +++++genericContainer +++++++genericContainer +++++++++genericContainer +++++++++++row selectable +++++++++++++genericContainer +++++++++++++++genericContainer +++++++++++++++++cell selectable name='A1' +++++++++++++++++++staticText name='A1' +++++++++++++++++++++inlineTextBox name='A1' +++++++++++++cell selectable name='A2' +++++++++++++++staticText name='A2' +++++++++++++++++inlineTextBox name='A2' +++++++genericContainer +++++++++row selectable +++++++++++cell selectable name='B1' +++++++++++++staticText name='B1' +++++++++++++++inlineTextBox name='B1' +++++++++++cell selectable name='B2' +++++++++++++staticText name='B2' +++++++++++++++inlineTextBox name='B2' +++++column +++++column +++++tableHeaderContainer
diff --git a/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems.html b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems.html new file mode 100644 index 0000000..8fdead7 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-grid-extra-wrap-elems.html
@@ -0,0 +1,87 @@ +<!-- +@MAC-ALLOW:AXRole* +@WIN-ALLOW:*SELECTABLE +@WIN-ALLOW:xml-roles* +@BLINK-ALLOW:*ColumnCount* +@BLINK-ALLOW:*RowCount* +@BLINK-ALLOW:id* +--> +<!DOCTYPE html> +<html> +<body> + <div role="grid" aria-label="1: Individual rows get their own wrappers"> + <div id="r1" aria-label="r1-wrap"> + <div role="row" aria-label="r1-real"> + <div role="gridcell">A1</div> + <div role="gridcell">A2</div> + </div> + </div> + <div id="r2" aria-label="r2-wrap"> + <div aria-label="r2-vanilla"> + <div role="row" aria-label="r2-real"> + <div role="gridcell">B1</div> + <div role="gridcell">B2</div> + </div> + </div> + </div> + </div> + + <div role="grid" aria-label="2: Single wrapper around all rows"> + <div id="wrapper-2"> + <div role="row"> + <div role="gridcell">A1</div> + <div role="gridcell">A2</div> + </div> + <div role="row"> + <div role="gridcell">B1</div> + <div role="gridcell">B2</div> + </div> + </div> + </div> + + <div role="grid" aria-label="3: Individual cells get their own wrappers"> + <div role="row"> + <div id="a1"><div role="gridcell">A1</div></div> + <div id="b1"><div role="gridcell">A2</div></div> + </div> + <div role="row"> + <div id="a2"><div role="gridcell">B1</div></div> + <div id="b2"><div id="b3"><div role="gridcell">B2</div></div></div> + </div> + </div> + + <div role="grid" aria-label="4: Single wrapper around all cells in a row"> + <div role="row"> + <div id="wrapper-r-1"> + <div role="gridcell">A1</div> + <div role="gridcell">A2</div> + </div> + </div> + <div role="row"> + <div id="wrapper-r-2"> + <div id="a1"><div role="gridcell">B1</div></div> + <div id="b1"><div role="gridcell">B2</div></div> + </div> + </div> + </div> + + <div role="grid" aria-label="5: Wrapper insanity"> + <div id="mega-wrapper"> + <div id="p1"> + <div id="p1-child"> + <div role="row"> + <div id="x1"><div id="x1-child"><div role="gridcell">A1</div></div></div> + <div role="gridcell">A2</div> + </div> + </div> + </div> + <div id="p2"> + <div role="row"> + <div role="gridcell">B1</div> + <div role="gridcell">B2</div> + </div> + </div> + </div> + </div> +</body> +</html>
diff --git a/content/test/data/accessibility/aria/aria-sort-html-table.html b/content/test/data/accessibility/aria/aria-sort-html-table.html index 42022485..10fabe43 100644 --- a/content/test/data/accessibility/aria/aria-sort-html-table.html +++ b/content/test/data/accessibility/aria/aria-sort-html-table.html
@@ -82,7 +82,7 @@ <td>B</td> </tr> </table> - + <!-- No sorting (explicit). --> <table summary="Data table"> <tr> @@ -100,7 +100,7 @@ <td>B</td> </tr> </table> - + <!-- Descending. --> <table summary="Data table"> <tr> @@ -124,7 +124,7 @@ <table summary="Data table"> <tr> - <th>Alphabet</td> + <th>Alphabet</th> </tr> <tr> <td aria-sort="ascending">A</td>
diff --git a/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt b/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt index c7de857..477c336 100644 --- a/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt +++ b/content/test/data/accessibility/aria/table-column-hidden-expected-blink.txt
@@ -1,16 +1,16 @@ rootWebArea ++grid ariaColumnCount=4 tableRowCount=3 tableColumnCount=3 cellIds=columnHeader,columnHeader,columnHeader,cell,cell,cell,cell,cell,cell -++++row -++++++columnHeader name='Month' ariaCellColumnIndex=1 ariaCellRowIndex=1 +++++row selectable +++++++columnHeader selectable name='Month' ariaCellColumnIndex=1 ariaCellRowIndex=1 ++++++++staticText name='Month' ++++++++++inlineTextBox name='Month' -++++++columnHeader name='Day' ariaCellColumnIndex=2 ariaCellRowIndex=1 +++++++columnHeader selectable name='Day' ariaCellColumnIndex=2 ariaCellRowIndex=1 ++++++++staticText name='Day' ++++++++++inlineTextBox name='Day' -++++++columnHeader name='Weather' ariaCellColumnIndex=4 ariaCellRowIndex=1 +++++++columnHeader selectable name='Weather' ariaCellColumnIndex=4 ariaCellRowIndex=1 ++++++++staticText name='Weather' ++++++++++inlineTextBox name='Weather' -++++row +++++row selectable ++++++cell selectable name='January' ariaCellColumnIndex=1 ariaCellRowIndex=2 ++++++++staticText name='January' ++++++++++inlineTextBox name='January' @@ -20,7 +20,7 @@ ++++++cell selectable name='Sunny' ariaCellColumnIndex=4 ariaCellRowIndex=2 ++++++++staticText name='Sunny' ++++++++++inlineTextBox name='Sunny' -++++row +++++row selectable ++++++cell selectable name='January' ariaCellColumnIndex=1 ariaCellRowIndex=2 ++++++++staticText name='January' ++++++++++inlineTextBox name='January' @@ -36,4 +36,4 @@ ++++tableHeaderContainer ++paragraph ++++staticText name='done' -++++++inlineTextBox name='done' \ No newline at end of file +++++++inlineTextBox name='done'
diff --git a/content/test/data/accessibility/css/color-expected-blink.txt b/content/test/data/accessibility/css/color-expected-blink.txt index 2d89989..c586ccd 100644 --- a/content/test/data/accessibility/css/color-expected-blink.txt +++ b/content/test/data/accessibility/css/color-expected-blink.txt
@@ -5,7 +5,11 @@ ++genericContainer multiline backgroundColor=-1 color=-16777216 ++++staticText name='Default.' backgroundColor=-1 color=-16777216 ++++++inlineTextBox name='Default.' color=-16777216 +++++staticText name=' ' backgroundColor=-1 color=-16777216 +++++++inlineTextBox name=' ' color=-16777216 ++++staticText name='Blue background.' backgroundColor=-16776961 color=-16777216 ++++++inlineTextBox name='Blue background.' color=-16777216 +++++staticText name=' ' backgroundColor=-1 color=-16777216 +++++++inlineTextBox name=' ' color=-16777216 ++++staticText name='Green text.' backgroundColor=-1 color=-16711936 -++++++inlineTextBox name='Green text.' color=-16777216 +++++++inlineTextBox name='Green text.' color=-16777216 \ No newline at end of file
diff --git a/content/test/data/accessibility/css/color-expected-win.txt b/content/test/data/accessibility/css/color-expected-win.txt index 31090193..6c2cbb2 100644 --- a/content/test/data/accessibility/css/color-expected-win.txt +++ b/content/test/data/accessibility/css/color-expected-win.txt
@@ -1,7 +1,9 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE offset:0 background-color:rgb(0\,0\,255) color:rgb(255\,0\,0) offset:1 background-color:rgb(255\,255\,255) color:rgb(0\,0\,0) ia2_hypertext='<obj0><obj1>' ++IA2_ROLE_PARAGRAPH offset:0 background-color:rgb(0\,0\,255) color:rgb(255\,0\,0) ia2_hypertext='Red on blue.' ++++ROLE_SYSTEM_STATICTEXT name='Red on blue.' offset:0 background-color:rgb(0\,0\,255) color:rgb(255\,0\,0) ia2_hypertext='Red on blue.' -++IA2_ROLE_SECTION FOCUSABLE IA2_STATE_MULTI_LINE offset:0 background-color:rgb(255\,255\,255) color:rgb(0\,0\,0) offset:8 background-color:rgb(0\,0\,255) color:rgb(0\,0\,0) offset:24 background-color:rgb(255\,255\,255) color:rgb(0\,255\,0) ia2_hypertext='Default.Blue background.Green text.' +++IA2_ROLE_SECTION FOCUSABLE IA2_STATE_MULTI_LINE offset:0 background-color:rgb(255\,255\,255) color:rgb(0\,0\,0) offset:9 background-color:rgb(0\,0\,255) color:rgb(0\,0\,0) offset:25 background-color:rgb(255\,255\,255) color:rgb(0\,0\,0) offset:26 background-color:rgb(255\,255\,255) color:rgb(0\,255\,0) ia2_hypertext='Default. Blue background. Green text.' ++++ROLE_SYSTEM_STATICTEXT name='Default.' offset:0 background-color:rgb(255\,255\,255) color:rgb(0\,0\,0) ia2_hypertext='Default.' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 background-color:rgb(255\,255\,255) color:rgb(0\,0\,0) ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='Blue background.' offset:0 background-color:rgb(0\,0\,255) color:rgb(0\,0\,0) ia2_hypertext='Blue background.' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 background-color:rgb(255\,255\,255) color:rgb(0\,0\,0) ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='Green text.' offset:0 background-color:rgb(255\,255\,255) color:rgb(0\,255\,0) ia2_hypertext='Green text.' \ No newline at end of file
diff --git a/content/test/data/accessibility/css/font-style-expected-blink.txt b/content/test/data/accessibility/css/font-style-expected-blink.txt index 846a3be5..78dc2214 100644 --- a/content/test/data/accessibility/css/font-style-expected-blink.txt +++ b/content/test/data/accessibility/css/font-style-expected-blink.txt
@@ -4,24 +4,42 @@ ++++++inlineTextBox name='The ' ++++staticText name='quick' textStyle=1 ++++++inlineTextBox name='quick' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='brown' textStyle=2 ++++++inlineTextBox name='brown' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='fox' textStyle=4 ++++++inlineTextBox name='fox' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='jumped' textStyle=3 ++++++inlineTextBox name='jumped' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='over' textStyle=6 ++++++inlineTextBox name='over' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='dog' textStyle=7 ++++++inlineTextBox name='dog' ++genericContainer multiline ++++staticText name='Normal' ++++++inlineTextBox name='Normal' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='bold' textStyle=1 ++++++inlineTextBox name='bold' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='italic' textStyle=2 ++++++inlineTextBox name='italic' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='underline' textStyle=4 ++++++inlineTextBox name='underline' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='line-through' textStyle=8 -++++++inlineTextBox name='line-through' +++++++inlineTextBox name='line-through' \ No newline at end of file
diff --git a/content/test/data/accessibility/css/font-style-expected-win.txt b/content/test/data/accessibility/css/font-style-expected-win.txt index 91f4de0..17d8ae1 100644 --- a/content/test/data/accessibility/css/font-style-expected-win.txt +++ b/content/test/data/accessibility/css/font-style-expected-win.txt
@@ -1,15 +1,24 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='<obj0><obj1>' -++IA2_ROLE_PARAGRAPH offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:4 font-style:normal font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:9 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:14 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single offset:17 font-style:italic font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:23 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single offset:27 font-style:italic font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single ia2_hypertext='The quickbrownfoxjumpedoverdog' +++IA2_ROLE_PARAGRAPH offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:4 font-style:normal font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:9 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:10 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:15 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:16 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single offset:19 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:20 font-style:italic font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:26 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:27 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single offset:31 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:32 font-style:italic font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single ia2_hypertext='The quick brown fox jumped over dog' ++++ROLE_SYSTEM_STATICTEXT name='The ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='The ' ++++ROLE_SYSTEM_STATICTEXT name='quick' offset:0 font-style:normal font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='quick' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='brown' offset:0 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='brown' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='fox' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single ia2_hypertext='fox' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='jumped' offset:0 font-style:italic font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='jumped' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='over' offset:0 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single ia2_hypertext='over' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='dog' offset:0 font-style:italic font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single ia2_hypertext='dog' -++IA2_ROLE_SECTION FOCUSABLE IA2_STATE_MULTI_LINE offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:6 font-style:normal font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:10 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:16 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single offset:25 font-style:normal font-weight:normal text-line-through-style:solid text-line-through-type:single text-underline-style:none text-underline-type:none ia2_hypertext='Normalbolditalicunderlineline-through' +++IA2_ROLE_SECTION FOCUSABLE IA2_STATE_MULTI_LINE offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:7 font-style:normal font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:11 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:12 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:18 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:19 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single offset:28 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none offset:29 font-style:normal font-weight:normal text-line-through-style:solid text-line-through-type:single text-underline-style:none text-underline-type:none ia2_hypertext='Normal bold italic underline line-through' ++++ROLE_SYSTEM_STATICTEXT name='Normal' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='Normal' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='bold' offset:0 font-style:normal font-weight:bold text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='bold' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='italic' offset:0 font-style:italic font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext='italic' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='underline' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:solid text-underline-type:single ia2_hypertext='underline' +++++ROLE_SYSTEM_STATICTEXT name=' ' offset:0 font-style:normal font-weight:normal text-line-through-style:none text-line-through-type:none text-underline-style:none text-underline-type:none ia2_hypertext=' ' ++++ROLE_SYSTEM_STATICTEXT name='line-through' offset:0 font-style:normal font-weight:normal text-line-through-style:solid text-line-through-type:single text-underline-style:none text-underline-type:none ia2_hypertext='line-through' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/a-no-text-expected-blink.txt b/content/test/data/accessibility/html/a-no-text-expected-blink.txt index e783460..48bca04 100644 --- a/content/test/data/accessibility/html/a-no-text-expected-blink.txt +++ b/content/test/data/accessibility/html/a-no-text-expected-blink.txt
@@ -2,20 +2,36 @@ ++genericContainer ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link name=' ' ++++++image +++++++staticText name=' ' +++++++++inlineTextBox name=' ' ++++link ++++++image ++++link
diff --git a/content/test/data/accessibility/html/bdo-expected-android.txt b/content/test/data/accessibility/html/bdo-expected-android.txt index 4d635a58..5a621186 100644 --- a/content/test/data/accessibility/html/bdo-expected-android.txt +++ b/content/test/data/accessibility/html/bdo-expected-android.txt
@@ -1,2 +1,2 @@ android.webkit.WebView focusable focused scrollable -++android.view.View name='Some LTR textSome RTL text with some LTR text embedded' \ No newline at end of file +++android.view.View name='Some LTR text Some RTL text with some LTR text embedded' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/bdo-expected-blink.txt b/content/test/data/accessibility/html/bdo-expected-blink.txt index 240297b..7180b3e 100644 --- a/content/test/data/accessibility/html/bdo-expected-blink.txt +++ b/content/test/data/accessibility/html/bdo-expected-blink.txt
@@ -2,6 +2,8 @@ ++genericContainer ++++staticText name='Some LTR text' ++++++inlineTextBox name='Some LTR text' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='Some RTL text ' ++++++inlineTextBox name='Some RTL text ' ++++staticText name='with some LTR text embedded'
diff --git a/content/test/data/accessibility/html/bdo-expected-mac.txt b/content/test/data/accessibility/html/bdo-expected-mac.txt index e8164682..f5d7441 100644 --- a/content/test/data/accessibility/html/bdo-expected-mac.txt +++ b/content/test/data/accessibility/html/bdo-expected-mac.txt
@@ -1,7 +1,6 @@ -# The spec states that <bdo> should have a role of AXGroup, but that seems -# wrong, so we assume this is correct. AXWebArea ++AXGroup ++++AXStaticText AXValue='Some LTR text' +++++AXStaticText AXValue=' ' ++++AXStaticText AXValue='Some RTL text ' -++++AXStaticText AXValue='with some LTR text embedded' +++++AXStaticText AXValue='with some LTR text embedded' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/bdo-expected-win.txt b/content/test/data/accessibility/html/bdo-expected-win.txt index ab94fc7..a8026916 100644 --- a/content/test/data/accessibility/html/bdo-expected-win.txt +++ b/content/test/data/accessibility/html/bdo-expected-win.txt
@@ -1,7 +1,6 @@ -# The spec states that <bdo> should have a role of AXGroup, but that seems -# wrong, so we assume this is correct. ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ++IA2_ROLE_SECTION ++++ROLE_SYSTEM_STATICTEXT name='Some LTR text' +++++ROLE_SYSTEM_STATICTEXT name=' ' ++++ROLE_SYSTEM_STATICTEXT name='Some RTL text ' -++++ROLE_SYSTEM_STATICTEXT name='with some LTR text embedded' +++++ROLE_SYSTEM_STATICTEXT name='with some LTR text embedded' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/canvas.html b/content/test/data/accessibility/html/canvas.html index 1c15648..36df2e1 100644 --- a/content/test/data/accessibility/html/canvas.html +++ b/content/test/data/accessibility/html/canvas.html
@@ -3,7 +3,6 @@ --> <html> <body> -<canvas width=100 height=100 alt="Image">Static fallback</canvas> -<canvas width=100 height=100><a href="#">Interactive fallback</a></canvas> +<canvas width=100 height=100 alt="Image">Static fallback</canvas><canvas width=100 height=100><a href="#">Interactive fallback</a></canvas> </body> </html>
diff --git a/content/test/data/accessibility/html/frameset-expected-blink.txt b/content/test/data/accessibility/html/frameset-expected-blink.txt index c1e561c..1325c4b 100644 --- a/content/test/data/accessibility/html/frameset-expected-blink.txt +++ b/content/test/data/accessibility/html/frameset-expected-blink.txt
@@ -6,6 +6,8 @@ ++++++++++inlineTextBox name='My favorite browser is ' ++++++++staticText name='ABC' ++++++++++inlineTextBox name='ABC' +++++++++staticText name=' ' +++++++++++inlineTextBox name=' ' ++++++++staticText name='Chrome' ++++++++++inlineTextBox name='Chrome' ++++++++staticText name='!' @@ -19,4 +21,4 @@ ++++++++++staticText name='mark tag' ++++++++++++inlineTextBox name='mark tag' ++++++++staticText name='.' -++++++++++inlineTextBox name='.' +++++++++++inlineTextBox name='.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/frameset-expected-mac.txt b/content/test/data/accessibility/html/frameset-expected-mac.txt index c4629de..033f520 100644 --- a/content/test/data/accessibility/html/frameset-expected-mac.txt +++ b/content/test/data/accessibility/html/frameset-expected-mac.txt
@@ -4,6 +4,7 @@ ++++++AXGroup ++++++++AXStaticText AXValue='My favorite browser is ' ++++++++AXStaticText AXValue='ABC' +++++++++AXStaticText AXValue=' ' ++++++++AXStaticText AXValue='Chrome' ++++++++AXStaticText AXValue='!' ++AXGroup @@ -12,4 +13,4 @@ ++++++++AXStaticText AXValue='This test is to check ' ++++++++AXGroup ++++++++++AXStaticText AXValue='mark tag' -++++++++AXStaticText AXValue='.' +++++++++AXStaticText AXValue='.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/frameset-expected-win.txt b/content/test/data/accessibility/html/frameset-expected-win.txt index 14e3e12..3159b34 100644 --- a/content/test/data/accessibility/html/frameset-expected-win.txt +++ b/content/test/data/accessibility/html/frameset-expected-win.txt
@@ -4,6 +4,7 @@ ++++++IA2_ROLE_PARAGRAPH ++++++++ROLE_SYSTEM_STATICTEXT name='My favorite browser is ' ++++++++ROLE_SYSTEM_STATICTEXT name='ABC' +++++++++ROLE_SYSTEM_STATICTEXT name=' ' ++++++++ROLE_SYSTEM_STATICTEXT name='Chrome' ++++++++ROLE_SYSTEM_STATICTEXT name='!' ++IA2_ROLE_SECTION FOCUSABLE @@ -12,4 +13,4 @@ ++++++++ROLE_SYSTEM_STATICTEXT name='This test is to check ' ++++++++IA2_ROLE_TEXT_FRAME ++++++++++ROLE_SYSTEM_STATICTEXT name='mark tag' -++++++++ROLE_SYSTEM_STATICTEXT name='.' +++++++++ROLE_SYSTEM_STATICTEXT name='.' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/img-empty-alt.html b/content/test/data/accessibility/html/img-empty-alt.html index 87aa2912..fc4607b 100644 --- a/content/test/data/accessibility/html/img-empty-alt.html +++ b/content/test/data/accessibility/html/img-empty-alt.html
@@ -1,10 +1,6 @@ <html> <body> - <img src="unread.jpg" alt="" role="presentation"> - <img src="read.jpg" alt=""> - <img src="read.jpg" alt> - <img src="read.jpg"> - <img src="read.jpg" alt="full"> + <img src="unread.jpg" alt="" role="presentation"><img src="read.jpg" alt=""><img src="read.jpg" alt><img src="read.jpg"><img src="read.jpg" alt="full"> </body> </html>
diff --git a/content/test/data/accessibility/html/img.html b/content/test/data/accessibility/html/img.html index 4e143ab8..7520df2 100644 --- a/content/test/data/accessibility/html/img.html +++ b/content/test/data/accessibility/html/img.html
@@ -4,8 +4,6 @@ --> <html> <body> - <img src="pipe.jpg" alt="pipe"> - <img src="pipe.jpg" alt=""> - <img src="pipe.jpg" alt=" "> + <img src="pipe.jpg" alt="pipe"><img src="pipe.jpg" alt=""><img src="pipe.jpg" alt=" "> </body> </html>
diff --git a/content/test/data/accessibility/html/input-checkbox-expected-android.txt b/content/test/data/accessibility/html/input-checkbox-expected-android.txt index 4407d550..9772efc 100644 --- a/content/test/data/accessibility/html/input-checkbox-expected-android.txt +++ b/content/test/data/accessibility/html/input-checkbox-expected-android.txt
@@ -1,7 +1,11 @@ android.webkit.WebView focusable focused scrollable ++android.view.View ++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Checkbox0' +++++android.view.View name=' ' ++++android.widget.CheckBox role_description='checkbox' checkable checked clickable focusable name='Checkbox1' +++++android.view.View name=' ' ++++android.widget.CheckBox role_description='checkbox' checkable checked clickable focusable name='Checkbox2' +++++android.view.View name=' ' ++++android.widget.CheckBox role_description='checkbox' checkable checked clickable focusable name='Checkbox3' -++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Checkbox4' +++++android.view.View name=' ' +++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Checkbox4' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-expected-blink.txt b/content/test/data/accessibility/html/input-checkbox-expected-blink.txt index ea91520..ed614df 100644 --- a/content/test/data/accessibility/html/input-checkbox-expected-blink.txt +++ b/content/test/data/accessibility/html/input-checkbox-expected-blink.txt
@@ -1,7 +1,15 @@ rootWebArea ++genericContainer ++++checkBox name='Checkbox0' checkedState=false +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++checkBox name='Checkbox1' checkedState=true +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++checkBox name='Checkbox2' checkedState=true +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++checkBox name='Checkbox3' checkedState=true +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++checkBox name='Checkbox4' checkedState=mixed \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-expected-mac.txt b/content/test/data/accessibility/html/input-checkbox-expected-mac.txt index aa4df8d..5b41d881 100644 --- a/content/test/data/accessibility/html/input-checkbox-expected-mac.txt +++ b/content/test/data/accessibility/html/input-checkbox-expected-mac.txt
@@ -1,7 +1,11 @@ AXWebArea AXRoleDescription='HTML content' ++AXGroup AXRoleDescription='group' ++++AXCheckBox AXRoleDescription='checkbox' AXTitle='Checkbox0' AXValue='0' +++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++AXCheckBox AXRoleDescription='checkbox' AXTitle='Checkbox1' AXValue='1' +++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++AXCheckBox AXRoleDescription='checkbox' AXTitle='Checkbox2' AXValue='1' +++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++AXCheckBox AXRoleDescription='checkbox' AXTitle='Checkbox3' AXValue='1' -++++AXCheckBox AXRoleDescription='checkbox' AXTitle='Checkbox4' AXValue='2' +++++AXStaticText AXRoleDescription='text' AXValue=' ' +++++AXCheckBox AXRoleDescription='checkbox' AXTitle='Checkbox4' AXValue='2' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-expected-win.txt b/content/test/data/accessibility/html/input-checkbox-expected-win.txt index 76039b2..58d8649 100644 --- a/content/test/data/accessibility/html/input-checkbox-expected-win.txt +++ b/content/test/data/accessibility/html/input-checkbox-expected-win.txt
@@ -1,7 +1,11 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>' -++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1><obj2><obj3><obj4>' +++IA2_ROLE_SECTION ia2_hypertext='<obj0> <obj2> <obj4> <obj6> <obj8>' ++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox0' FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox0' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox1' CHECKED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox1' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox2' CHECKED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox2' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox3' CHECKED FOCUSABLE IA2_STATE_CHECKABLE xml-roles:checkbox checkable:true ia2_hypertext='Checkbox3' -++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox4' MIXED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox4' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' +++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox4' MIXED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox4' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-android.txt b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-android.txt index 92792c0..728a8f8 100644 --- a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-android.txt +++ b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-android.txt
@@ -1,7 +1,9 @@ android.webkit.WebView focusable focused scrollable ++android.view.View ++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Checkbox1' +++++android.view.View name=' ' ++++android.widget.CheckBox role_description='checkbox' checkable checked clickable focusable name='Checkbox2' ++android.view.View role_description='menu' ++++android.widget.CheckBox role_description='checkbox' checkable checked clickable focusable name='Checkbox3' +++++android.view.View name=' ' ++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Checkbox4' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt index 83a2836a..afea518 100644 --- a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt +++ b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt
@@ -1,7 +1,11 @@ rootWebArea ++genericContainer ++++checkBox name='Checkbox1' checkedState=false +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++checkBox name='Checkbox2' checkedState=true ++menu ++++checkBox name='Checkbox3' checkedState=true +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++checkBox name='Checkbox4' checkedState=mixed \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-mac.txt b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-mac.txt index 15b20f5..8917dc2e 100644 --- a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-mac.txt +++ b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-mac.txt
@@ -1,7 +1,9 @@ AXWebArea ++AXGroup ++++AXCheckBox AXTitle='Checkbox1' AXValue='0' +++++AXStaticText AXValue=' ' ++++AXCheckBox AXTitle='Checkbox2' AXValue='1' ++AXMenu ++++AXCheckBox AXTitle='Checkbox3' AXValue='1' -++++AXCheckBox AXTitle='Checkbox4' AXValue='2' +++++AXStaticText AXValue=' ' +++++AXCheckBox AXTitle='Checkbox4' AXValue='2' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-win.txt b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-win.txt index bd64591a..86585e6 100644 --- a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-win.txt +++ b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-win.txt
@@ -1,7 +1,9 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0><obj1>' -++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1>' +++IA2_ROLE_SECTION ia2_hypertext='<obj0> <obj2>' ++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox1' FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox1' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox2' CHECKED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox2' -++ROLE_SYSTEM_MENUPOPUP xml-roles:menu ia2_hypertext='<obj0><obj1>' +++ROLE_SYSTEM_MENUPOPUP xml-roles:menu ia2_hypertext='<obj0> <obj2>' ++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox3' CHECKED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox3' -++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox4' MIXED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox4' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' +++++ROLE_SYSTEM_CHECKBUTTON name='Checkbox4' MIXED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Checkbox4' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-datetime-local-expected-win.txt b/content/test/data/accessibility/html/input-datetime-local-expected-win.txt index 577e4b0..35a24a84 100644 --- a/content/test/data/accessibility/html/input-datetime-local-expected-win.txt +++ b/content/test/data/accessibility/html/input-datetime-local-expected-win.txt
@@ -2,7 +2,7 @@ ++IA2_ROLE_SECTION ia2_hypertext='<obj0>' ++++IA2_ROLE_DATE_EDITOR FOCUSABLE ia2_hypertext='<obj0><obj1><obj2>' ++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>' -++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>/<obj2>/<obj4><obj5>:<obj7><obj8>' +++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>/<obj2>/<obj4> <obj6>:<obj8> <obj10>' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE ia2_hypertext='mm' description='Month' ++++++++++++ROLE_SYSTEM_STATICTEXT name='mm' ia2_hypertext='mm' ++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/' @@ -11,11 +11,13 @@ ++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE ia2_hypertext='yyyy' description='Year' ++++++++++++ROLE_SYSTEM_STATICTEXT name='yyyy' ia2_hypertext='yyyy' +++++++++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE ia2_hypertext='--' description='Hours' ++++++++++++ROLE_SYSTEM_STATICTEXT name='--' ia2_hypertext='--' ++++++++++ROLE_SYSTEM_STATICTEXT name=':' ia2_hypertext=':' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE ia2_hypertext='--' description='Minutes' ++++++++++++ROLE_SYSTEM_STATICTEXT name='--' ia2_hypertext='--' +++++++++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE ia2_hypertext='--' description='AM/PM' ++++++++++++ROLE_SYSTEM_STATICTEXT name='--' ia2_hypertext='--' ++++++ROLE_SYSTEM_BUTTONMENU FOCUSABLE HASPOPUP
diff --git a/content/test/data/accessibility/html/input-month-expected-blink.txt b/content/test/data/accessibility/html/input-month-expected-blink.txt index 769419e4..5608d93 100644 --- a/content/test/data/accessibility/html/input-month-expected-blink.txt +++ b/content/test/data/accessibility/html/input-month-expected-blink.txt
@@ -6,6 +6,8 @@ ++++++++++spinButton description='Month' descriptionFrom=attribute valueForRange=0.00 minValueForRange=1.00 maxValueForRange=12.00 ++++++++++++staticText name='---------' ++++++++++++++inlineTextBox name='---------' +++++++++++staticText name=' ' +++++++++++++inlineTextBox name=' ' ++++++++++spinButton description='Year' descriptionFrom=attribute valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00 ++++++++++++staticText name='----' ++++++++++++++inlineTextBox name='----'
diff --git a/content/test/data/accessibility/html/input-month-expected-mac.txt b/content/test/data/accessibility/html/input-month-expected-mac.txt index d8462ee0..8944d3d5 100644 --- a/content/test/data/accessibility/html/input-month-expected-mac.txt +++ b/content/test/data/accessibility/html/input-month-expected-mac.txt
@@ -5,6 +5,7 @@ ++++++++AXGroup AXRoleDescription='group' ++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='0' AXHelp='Month' ++++++++++++AXStaticText AXRoleDescription='text' AXValue='---------' +++++++++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='0' AXHelp='Year' ++++++++++++AXStaticText AXRoleDescription='text' AXValue='----' ++++++AXPopUpButton AXRoleDescription='pop up button'
diff --git a/content/test/data/accessibility/html/input-radio-expected-android.txt b/content/test/data/accessibility/html/input-radio-expected-android.txt index 05d98f0..f4ccdfe 100644 --- a/content/test/data/accessibility/html/input-radio-expected-android.txt +++ b/content/test/data/accessibility/html/input-radio-expected-android.txt
@@ -7,7 +7,9 @@ ++++android.view.View name='Radio2' ++android.view.View ++++android.widget.RadioButton role_description='radio button' checkable clickable focusable name='Radio3' +++++android.view.View name=' ' ++++android.widget.RadioButton role_description='radio button' checkable checked clickable focusable name='Radio4' ++android.view.View ++++android.widget.RadioButton role_description='radio button' checkable clickable focusable name='Radio5' -++++android.widget.RadioButton role_description='radio button' checkable checked clickable focusable name='Radio6' +++++android.view.View name=' ' +++++android.widget.RadioButton role_description='radio button' checkable checked clickable focusable name='Radio6' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-radio-expected-blink.txt b/content/test/data/accessibility/html/input-radio-expected-blink.txt index 0fa43c4..0353d22 100644 --- a/content/test/data/accessibility/html/input-radio-expected-blink.txt +++ b/content/test/data/accessibility/html/input-radio-expected-blink.txt
@@ -10,7 +10,11 @@ ++++++inlineTextBox name='Radio2' ++form ++++radioButton name='Radio3' checkedState=false radioGroupIds=radioButton,radioButton +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++radioButton name='Radio4' checkedState=true radioGroupIds=radioButton,radioButton ++form ++++radioButton name='Radio5' checkedState=false radioGroupIds=radioButton +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++radioButton name='Radio6' checkedState=true radioGroupIds=radioButton \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-radio-expected-mac.txt b/content/test/data/accessibility/html/input-radio-expected-mac.txt index 52457e38..31504f53 100644 --- a/content/test/data/accessibility/html/input-radio-expected-mac.txt +++ b/content/test/data/accessibility/html/input-radio-expected-mac.txt
@@ -7,7 +7,9 @@ ++++AXStaticText AXValue='Radio2' ++AXGroup ++++AXRadioButton AXTitle='Radio3' AXValue='0' AXLinkedUIElements=["AXRadioButton Radio3","AXRadioButton Radio4"] +++++AXStaticText AXValue=' ' ++++AXRadioButton AXTitle='Radio4' AXValue='1' AXLinkedUIElements=["AXRadioButton Radio3","AXRadioButton Radio4"] ++AXGroup ++++AXRadioButton AXTitle='Radio5' AXValue='0' AXLinkedUIElements=["AXRadioButton Radio5"] +++++AXStaticText AXValue=' ' ++++AXRadioButton AXTitle='Radio6' AXValue='1' AXLinkedUIElements=["AXRadioButton Radio6"] \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-radio-expected-win.txt b/content/test/data/accessibility/html/input-radio-expected-win.txt index 6e763ba..efa1bef 100644 --- a/content/test/data/accessibility/html/input-radio-expected-win.txt +++ b/content/test/data/accessibility/html/input-radio-expected-win.txt
@@ -5,9 +5,11 @@ ++++ROLE_SYSTEM_WHITESPACE name='<newline>' ia2_hypertext='<newline>' ++++ROLE_SYSTEM_RADIOBUTTON FOCUSABLE IA2_STATE_CHECKABLE checkable:true ++++ROLE_SYSTEM_STATICTEXT name='Radio2' ia2_hypertext='Radio2' -++IA2_ROLE_FORM ia2_hypertext='<obj0><obj1>' +++IA2_ROLE_FORM ia2_hypertext='<obj0> <obj2>' ++++ROLE_SYSTEM_RADIOBUTTON name='Radio3' FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Radio3' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++ROLE_SYSTEM_RADIOBUTTON name='Radio4' CHECKED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Radio4' -++IA2_ROLE_FORM ia2_hypertext='<obj0><obj1>' +++IA2_ROLE_FORM ia2_hypertext='<obj0> <obj2>' ++++ROLE_SYSTEM_RADIOBUTTON name='Radio5' FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Radio5' -++++ROLE_SYSTEM_RADIOBUTTON name='Radio6' CHECKED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Radio6' +++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' +++++ROLE_SYSTEM_RADIOBUTTON name='Radio6' CHECKED FOCUSABLE IA2_STATE_CHECKABLE checkable:true ia2_hypertext='Radio6' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-text-value-expected-blink.txt b/content/test/data/accessibility/html/input-text-value-expected-blink.txt index 97dcd2a..706bbae 100644 --- a/content/test/data/accessibility/html/input-text-value-expected-blink.txt +++ b/content/test/data/accessibility/html/input-text-value-expected-blink.txt
@@ -19,6 +19,8 @@ ++++labelText ++++++staticText name='Email' ++++++++inlineTextBox name='Email' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++genericContainer ++++textField focusable name='Email' ++++textField focusable name='Email'
diff --git a/content/test/data/accessibility/html/input-text-value-expected-win.txt b/content/test/data/accessibility/html/input-text-value-expected-win.txt index 52e01340..2b6e2283 100644 --- a/content/test/data/accessibility/html/input-text-value-expected-win.txt +++ b/content/test/data/accessibility/html/input-text-value-expected-win.txt
@@ -10,9 +10,10 @@ ++++ROLE_SYSTEM_TEXT name='l2' FOCUSABLE ++++IA2_ROLE_LABEL ++++++ROLE_SYSTEM_STATICTEXT name='Email' +++++ROLE_SYSTEM_STATICTEXT name=' ' ++++IA2_ROLE_SECTION ++++ROLE_SYSTEM_TEXT name='Email' FOCUSABLE ++++ROLE_SYSTEM_TEXT name='Email' FOCUSABLE ++++ROLE_SYSTEM_TEXT name='l5' FOCUSABLE IA2_STATE_MULTI_LINE ++++ROLE_SYSTEM_TEXT name='l6' FOCUSABLE IA2_STATE_MULTI_LINE -++++ROLE_SYSTEM_TEXT name='Name' FOCUSABLE description='Description' +++++ROLE_SYSTEM_TEXT name='Name' FOCUSABLE description='Description' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-text-value.html b/content/test/data/accessibility/html/input-text-value.html index aeede0ef8..505eebb 100644 --- a/content/test/data/accessibility/html/input-text-value.html +++ b/content/test/data/accessibility/html/input-text-value.html
@@ -6,7 +6,9 @@ @BLINK-ALLOW:multiline --> <html> -<body> +<!-- Width/font adds consistency --> +<!-- TODO deal with line break inconsitencies that require these styles --> +<body style="font-family:monospace;width:999px"> <label for="i1">l1</label> <input id="i1"> <label for="i2">l2</label>
diff --git a/content/test/data/accessibility/html/input-time-expected-blink.txt b/content/test/data/accessibility/html/input-time-expected-blink.txt index 252dc7d3..745a6d5 100644 --- a/content/test/data/accessibility/html/input-time-expected-blink.txt +++ b/content/test/data/accessibility/html/input-time-expected-blink.txt
@@ -11,6 +11,8 @@ ++++++++++spinButton description='Minutes' descriptionFrom=attribute valueForRange=0.00 minValueForRange=0.00 maxValueForRange=59.00 ++++++++++++staticText name='00' ++++++++++++++inlineTextBox name='00' +++++++++++staticText name=' ' +++++++++++++inlineTextBox name=' ' ++++++++++spinButton description='AM/PM' descriptionFrom=attribute valueForRange=1.00 minValueForRange=1.00 maxValueForRange=2.00 ++++++++++++staticText name='AM' ++++++++++++++inlineTextBox name='AM'
diff --git a/content/test/data/accessibility/html/input-time-expected-mac.txt b/content/test/data/accessibility/html/input-time-expected-mac.txt index 9ace9201..f0fdf18 100644 --- a/content/test/data/accessibility/html/input-time-expected-mac.txt +++ b/content/test/data/accessibility/html/input-time-expected-mac.txt
@@ -8,6 +8,7 @@ ++++++++++AXStaticText AXRoleDescription='text' AXValue=':' ++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='0' AXHelp='Minutes' ++++++++++++AXStaticText AXRoleDescription='text' AXValue='00' +++++++++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='1' AXHelp='AM/PM' ++++++++++++AXStaticText AXRoleDescription='text' AXValue='AM' ++++++AXIncrementor AXRoleDescription='stepper' AXValue='0'
diff --git a/content/test/data/accessibility/html/input-time-expected-win.txt b/content/test/data/accessibility/html/input-time-expected-win.txt index 5fc30090..8ae439dc 100644 --- a/content/test/data/accessibility/html/input-time-expected-win.txt +++ b/content/test/data/accessibility/html/input-time-expected-win.txt
@@ -2,12 +2,13 @@ ++IA2_ROLE_SECTION ia2_hypertext='<obj0>' ++++ROLE_SYSTEM_GROUPING FOCUSABLE ia2_hypertext='<obj0><obj1>' ++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>' -++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>:<obj2><obj3>' +++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>:<obj2> <obj4>' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE xml-roles:spinbutton ia2_hypertext='12' description='Hours' ++++++++++++ROLE_SYSTEM_STATICTEXT name='12' ia2_hypertext='12' ++++++++++ROLE_SYSTEM_STATICTEXT name=':' ia2_hypertext=':' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE xml-roles:spinbutton ia2_hypertext='00' description='Minutes' ++++++++++++ROLE_SYSTEM_STATICTEXT name='00' ia2_hypertext='00' +++++++++++ROLE_SYSTEM_STATICTEXT name=' ' ia2_hypertext=' ' ++++++++++ROLE_SYSTEM_SPINBUTTON FOCUSABLE xml-roles:spinbutton ia2_hypertext='AM' description='AM/PM' ++++++++++++ROLE_SYSTEM_STATICTEXT name='AM' ia2_hypertext='AM' ++++++ROLE_SYSTEM_SPINBUTTON ia2_hypertext='<obj0><obj1>'
diff --git a/content/test/data/accessibility/html/ins-expected-blink.txt b/content/test/data/accessibility/html/ins-expected-blink.txt index e80d6477..89a82a8 100644 --- a/content/test/data/accessibility/html/ins-expected-blink.txt +++ b/content/test/data/accessibility/html/ins-expected-blink.txt
@@ -4,6 +4,8 @@ ++++++inlineTextBox name='My favorite browser is ' ++++staticText name='ABC' ++++++inlineTextBox name='ABC' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++staticText name='Chrome' ++++++inlineTextBox name='Chrome' ++++staticText name='!'
diff --git a/content/test/data/accessibility/html/ins-expected-mac.txt b/content/test/data/accessibility/html/ins-expected-mac.txt index 34eb027..74856107 100644 --- a/content/test/data/accessibility/html/ins-expected-mac.txt +++ b/content/test/data/accessibility/html/ins-expected-mac.txt
@@ -2,5 +2,6 @@ ++AXGroup ++++AXStaticText AXValue='My favorite browser is ' ++++AXStaticText AXValue='ABC' +++++AXStaticText AXValue=' ' ++++AXStaticText AXValue='Chrome' -++++AXStaticText AXValue='!' +++++AXStaticText AXValue='!' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/ins-expected-win.txt b/content/test/data/accessibility/html/ins-expected-win.txt index 4f07f5f..365f729 100644 --- a/content/test/data/accessibility/html/ins-expected-win.txt +++ b/content/test/data/accessibility/html/ins-expected-win.txt
@@ -2,5 +2,6 @@ ++IA2_ROLE_PARAGRAPH ++++ROLE_SYSTEM_STATICTEXT name='My favorite browser is ' ++++ROLE_SYSTEM_STATICTEXT name='ABC' +++++ROLE_SYSTEM_STATICTEXT name=' ' ++++ROLE_SYSTEM_STATICTEXT name='Chrome' -++++ROLE_SYSTEM_STATICTEXT name='!' +++++ROLE_SYSTEM_STATICTEXT name='!' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/list-expected-android.txt b/content/test/data/accessibility/html/list-expected-android.txt index 144f996..a540f617 100644 --- a/content/test/data/accessibility/html/list-expected-android.txt +++ b/content/test/data/accessibility/html/list-expected-android.txt
@@ -9,7 +9,9 @@ ++++android.view.View collection_item item_index=2 row_index=2 ++++++android.view.View name='•' ++++++android.view.View name='toe' -++android.widget.ListView collection hierarchical item_count=3 row_count=3 +++android.widget.ListView collection hierarchical item_count=5 row_count=5 ++++android.view.View collection_item name='tic' -++++android.view.View collection_item name='tac' item_index=1 row_index=1 -++++android.view.View collection_item name='toe' item_index=2 row_index=2 +++++android.view.View name=' ' +++++android.view.View collection_item name='tac' item_index=1 row_index=2 +++++android.view.View name=' ' +++++android.view.View collection_item name='toe' item_index=2 row_index=4 \ No newline at end of file
diff --git a/content/test/data/accessibility/html/list-expected-blink.txt b/content/test/data/accessibility/html/list-expected-blink.txt index ec8e2cbc..19fbc5b 100644 --- a/content/test/data/accessibility/html/list-expected-blink.txt +++ b/content/test/data/accessibility/html/list-expected-blink.txt
@@ -16,9 +16,13 @@ ++++listItem ++++++staticText name='tic' ++++++++inlineTextBox name='tic' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++listItem ++++++staticText name='tac' ++++++++inlineTextBox name='tac' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++listItem ++++++staticText name='toe' ++++++++inlineTextBox name='toe' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/list-expected-mac.txt b/content/test/data/accessibility/html/list-expected-mac.txt index 006358d..abf5f63a19 100644 --- a/content/test/data/accessibility/html/list-expected-mac.txt +++ b/content/test/data/accessibility/html/list-expected-mac.txt
@@ -12,7 +12,9 @@ ++AXList AXSubrole=AXContentList ++++AXGroup ++++++AXStaticText AXValue='tic' +++++AXStaticText AXValue=' ' ++++AXGroup ++++++AXStaticText AXValue='tac' +++++AXStaticText AXValue=' ' ++++AXGroup -++++++AXStaticText AXValue='toe' +++++++AXStaticText AXValue='toe' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/list-expected-win.txt b/content/test/data/accessibility/html/list-expected-win.txt index c8e5513..320f318 100644 --- a/content/test/data/accessibility/html/list-expected-win.txt +++ b/content/test/data/accessibility/html/list-expected-win.txt
@@ -12,7 +12,9 @@ ++ROLE_SYSTEM_LIST READONLY ++++ROLE_SYSTEM_LISTITEM READONLY ++++++ROLE_SYSTEM_STATICTEXT name='tic' +++++ROLE_SYSTEM_STATICTEXT name=' ' ++++ROLE_SYSTEM_LISTITEM READONLY ++++++ROLE_SYSTEM_STATICTEXT name='tac' +++++ROLE_SYSTEM_STATICTEXT name=' ' ++++ROLE_SYSTEM_LISTITEM READONLY -++++++ROLE_SYSTEM_STATICTEXT name='toe' +++++++ROLE_SYSTEM_STATICTEXT name='toe' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/math-expected-android.txt b/content/test/data/accessibility/html/math-expected-android.txt index 5351a7a..08773777 100644 --- a/content/test/data/accessibility/html/math-expected-android.txt +++ b/content/test/data/accessibility/html/math-expected-android.txt
@@ -1,3 +1,3 @@ android.webkit.WebView focusable focused scrollable ++android.view.View -++++android.view.View role_description='math' name='a2+b2' \ No newline at end of file +++++android.view.View role_description='math' name='a2 + b2'
diff --git a/content/test/data/accessibility/html/math-expected-mac.txt b/content/test/data/accessibility/html/math-expected-mac.txt index c99b0d23..7760f0c7 100644 --- a/content/test/data/accessibility/html/math-expected-mac.txt +++ b/content/test/data/accessibility/html/math-expected-mac.txt
@@ -3,6 +3,8 @@ ++++AXGroup AXSubrole=AXDocumentMath AXRoleDescription='math' ++++++AXStaticText AXRoleDescription='text' AXValue='a' ++++++AXStaticText AXRoleDescription='text' AXValue='2' +++++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++++AXStaticText AXRoleDescription='text' AXValue='+' +++++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++++AXStaticText AXRoleDescription='text' AXValue='b' -++++++AXStaticText AXRoleDescription='text' AXValue='2' +++++++AXStaticText AXRoleDescription='text' AXValue='2' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/math-expected-win.txt b/content/test/data/accessibility/html/math-expected-win.txt index dbda990..cabf39b 100644 --- a/content/test/data/accessibility/html/math-expected-win.txt +++ b/content/test/data/accessibility/html/math-expected-win.txt
@@ -3,6 +3,8 @@ ++++ROLE_SYSTEM_EQUATION inner_html='<newline> <mrow><newline> <msup><mi>a</mi><mn>2</mn></msup><newline> <mo>+</mo><newline> <msup><mi>b</mi><mn>2</mn></msup><newline> </mrow><newline> ' ++++++ROLE_SYSTEM_STATICTEXT name='a' ++++++ROLE_SYSTEM_STATICTEXT name='2' +++++++ROLE_SYSTEM_STATICTEXT name=' ' ++++++ROLE_SYSTEM_STATICTEXT name='+' +++++++ROLE_SYSTEM_STATICTEXT name=' ' ++++++ROLE_SYSTEM_STATICTEXT name='b' ++++++ROLE_SYSTEM_STATICTEXT name='2'
diff --git a/content/test/data/accessibility/html/span-expected-blink.txt b/content/test/data/accessibility/html/span-expected-blink.txt index 66e580b..acc26015 100644 --- a/content/test/data/accessibility/html/span-expected-blink.txt +++ b/content/test/data/accessibility/html/span-expected-blink.txt
@@ -1,8 +1,77 @@ rootWebArea ++paragraph -++++staticText name='This paragraph has one ' -++++++inlineTextBox name='This paragraph has one ' -++++staticText name='word' -++++++inlineTextBox name='word' -++++staticText name=' in a span.' -++++++inlineTextBox name=' in a span.' \ No newline at end of file +++++staticText name='This' +++++++inlineTextBox name='This' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='paragraph has ' +++++++inlineTextBox name='paragraph has ' +++++staticText name='text' +++++++inlineTextBox name='text' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='in' +++++++inlineTextBox name='in' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='spans' +++++++inlineTextBox name='spans' +++++staticText name='.' +++++++inlineTextBox name='.' +++paragraph +++++staticText name='E1. Eat' +++++++inlineTextBox name='E1. Eat' +++++link name='space' +++++++staticText name='space' +++++++++inlineTextBox name='space' +++paragraph +++++staticText name='E2. Eat' +++++++inlineTextBox name='E2. Eat' +++++link name='space' +++++++staticText name='space' +++++++++inlineTextBox name='space' +++paragraph +++++staticText name='E3. Eat' +++++++inlineTextBox name='E3. Eat' +++++link name='space' +++++++staticText name='space' +++++++++inlineTextBox name='space' +++paragraph +++++link name='E4. Eat' +++++++staticText name='E4. Eat' +++++++++inlineTextBox name='E4. Eat' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++link name='E5. Eat' +++++++staticText name='E5. Eat' +++++++++inlineTextBox name='E5. Eat' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++link name='E6. Eat' +++++++staticText name='E6. Eat' +++++++++inlineTextBox name='E6. Eat' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K1. Keep' +++++++inlineTextBox name='K1. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K2. Keep' +++++++inlineTextBox name='K2. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space' +++paragraph +++++staticText name='K3. Keep' +++++++inlineTextBox name='K3. Keep' +++++staticText name=' ' +++++++inlineTextBox name=' ' +++++staticText name='space' +++++++inlineTextBox name='space'
diff --git a/content/test/data/accessibility/html/span-expected-mac.txt b/content/test/data/accessibility/html/span-expected-mac.txt index 386acb4..ff17a366 100644 --- a/content/test/data/accessibility/html/span-expected-mac.txt +++ b/content/test/data/accessibility/html/span-expected-mac.txt
@@ -1,5 +1,47 @@ AXWebArea ++AXGroup -++++AXStaticText AXValue='This paragraph has one ' -++++AXStaticText AXValue='word' -++++AXStaticText AXValue=' in a span.' +++++AXStaticText AXValue='This' +++++AXStaticText AXValue=' ' +++++AXStaticText AXValue='paragraph has ' +++++AXStaticText AXValue='text' +++++AXStaticText AXValue=' ' +++++AXStaticText AXValue='in' +++++AXStaticText AXValue=' ' +++++AXStaticText AXValue='spans' +++++AXStaticText AXValue='.' +++AXGroup +++++AXStaticText AXValue='E1. Eat' +++++AXLink +++++++AXStaticText AXValue='space' +++AXGroup +++++AXStaticText AXValue='E2. Eat' +++++AXLink +++++++AXStaticText AXValue='space' +++AXGroup +++++AXStaticText AXValue='E3. Eat' +++++AXLink +++++++AXStaticText AXValue='space' +++AXGroup +++++AXLink +++++++AXStaticText AXValue='E4. Eat' +++++AXStaticText AXValue='space' +++AXGroup +++++AXLink +++++++AXStaticText AXValue='E5. Eat' +++++AXStaticText AXValue='space' +++AXGroup +++++AXLink +++++++AXStaticText AXValue='E6. Eat' +++++AXStaticText AXValue='space' +++AXGroup +++++AXStaticText AXValue='K1. Keep' +++++AXStaticText AXValue=' ' +++++AXStaticText AXValue='space' +++AXGroup +++++AXStaticText AXValue='K2. Keep' +++++AXStaticText AXValue=' ' +++++AXStaticText AXValue='space' +++AXGroup +++++AXStaticText AXValue='K3. Keep' +++++AXStaticText AXValue=' ' +++++AXStaticText AXValue='space' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/span-expected-win.txt b/content/test/data/accessibility/html/span-expected-win.txt index c1b61bd..d10010f2 100644 --- a/content/test/data/accessibility/html/span-expected-win.txt +++ b/content/test/data/accessibility/html/span-expected-win.txt
@@ -1,5 +1,47 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ++IA2_ROLE_PARAGRAPH -++++ROLE_SYSTEM_STATICTEXT name='This paragraph has one ' -++++ROLE_SYSTEM_STATICTEXT name='word' -++++ROLE_SYSTEM_STATICTEXT name=' in a span.' +++++ROLE_SYSTEM_STATICTEXT name='This' +++++ROLE_SYSTEM_STATICTEXT name=' ' +++++ROLE_SYSTEM_STATICTEXT name='paragraph has ' +++++ROLE_SYSTEM_STATICTEXT name='text' +++++ROLE_SYSTEM_STATICTEXT name=' ' +++++ROLE_SYSTEM_STATICTEXT name='in' +++++ROLE_SYSTEM_STATICTEXT name=' ' +++++ROLE_SYSTEM_STATICTEXT name='spans' +++++ROLE_SYSTEM_STATICTEXT name='.' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_STATICTEXT name='E1. Eat' +++++ROLE_SYSTEM_LINK name='space' FOCUSABLE +++++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_STATICTEXT name='E2. Eat' +++++ROLE_SYSTEM_LINK name='space' FOCUSABLE +++++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_STATICTEXT name='E3. Eat' +++++ROLE_SYSTEM_LINK name='space' FOCUSABLE +++++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_LINK name='E4. Eat' FOCUSABLE +++++++ROLE_SYSTEM_STATICTEXT name='E4. Eat' +++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_LINK name='E5. Eat' FOCUSABLE +++++++ROLE_SYSTEM_STATICTEXT name='E5. Eat' +++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_LINK name='E6. Eat' FOCUSABLE +++++++ROLE_SYSTEM_STATICTEXT name='E6. Eat' +++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_STATICTEXT name='K1. Keep' +++++ROLE_SYSTEM_STATICTEXT name=' ' +++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_STATICTEXT name='K2. Keep' +++++ROLE_SYSTEM_STATICTEXT name=' ' +++++ROLE_SYSTEM_STATICTEXT name='space' +++IA2_ROLE_PARAGRAPH +++++ROLE_SYSTEM_STATICTEXT name='K3. Keep' +++++ROLE_SYSTEM_STATICTEXT name=' ' +++++ROLE_SYSTEM_STATICTEXT name='space' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/span.html b/content/test/data/accessibility/html/span.html index 0609636..9f0a42b 100644 --- a/content/test/data/accessibility/html/span.html +++ b/content/test/data/accessibility/html/span.html
@@ -5,7 +5,36 @@ <html> <body> <p> - This paragraph has one <span>word</span> in a span. + This<span> </span>paragraph has <span>text</span><span> </span><span>in</span> <span>spans</span>. + </p> + <!-- Eat whitespace because of focusable element type adjacent to it: --> + <p> + <span>E1. Eat</span> <a href="#">space</a> + </p> + <p> + <span>E2. Eat</span><b> </b><a href="#">space</a> + </p> + <p> + <span>E3. Eat</span><i><b> </b></i><a href="#">space</a> + </p> + <p> + <a href="#">E4. Eat</a> <span>space</span> + </p> + <p> + <a href="#">E5. Eat</a><b> </b><span>space</span> + </p> + <p> + <a href="#">E6. Eat</a><i><b> </b></i><span>space</span> + </p> + <!-- Keep whitespace: --> + <p> + <span>K1. Keep</span> <span>space</span> + </p> + <p> + <span>K2. Keep</span><b> </b><span>space</span> + </p> + <p> + <span>K3. Keep</span><i><b> </b></i><span>space</span> </p> </body> </html>
diff --git a/content/test/data/accessibility/html/time-expected-android.txt b/content/test/data/accessibility/html/time-expected-android.txt index c96bc26..d7b0b3c0 100644 --- a/content/test/data/accessibility/html/time-expected-android.txt +++ b/content/test/data/accessibility/html/time-expected-android.txt
@@ -1,4 +1,5 @@ android.webkit.WebView focusable focused scrollable ++android.view.View ++++android.view.View role_description='time' name='10:00' +++++android.view.View name=' ' ++++android.view.View role_description='time' name='Valentines day' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/time-expected-blink.txt b/content/test/data/accessibility/html/time-expected-blink.txt index 8286771..fd85b75 100644 --- a/content/test/data/accessibility/html/time-expected-blink.txt +++ b/content/test/data/accessibility/html/time-expected-blink.txt
@@ -3,6 +3,8 @@ ++++time ++++++staticText name='10:00' ++++++++inlineTextBox name='10:00' +++++staticText name=' ' +++++++inlineTextBox name=' ' ++++time ++++++staticText name='Valentines day' ++++++++inlineTextBox name='Valentines day' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/time-expected-mac.txt b/content/test/data/accessibility/html/time-expected-mac.txt index 80edddc..f0e0e3d7 100644 --- a/content/test/data/accessibility/html/time-expected-mac.txt +++ b/content/test/data/accessibility/html/time-expected-mac.txt
@@ -2,5 +2,6 @@ ++AXGroup AXRoleDescription='group' ++++AXGroup AXRoleDescription='group' ++++++AXStaticText AXRoleDescription='text' AXValue='10:00' +++++AXStaticText AXRoleDescription='text' AXValue=' ' ++++AXGroup AXRoleDescription='group' ++++++AXStaticText AXRoleDescription='text' AXValue='Valentines day' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/time-expected-win.txt b/content/test/data/accessibility/html/time-expected-win.txt index 66299024..7cbd6c53 100644 --- a/content/test/data/accessibility/html/time-expected-win.txt +++ b/content/test/data/accessibility/html/time-expected-win.txt
@@ -2,5 +2,6 @@ ++IA2_ROLE_SECTION ++++IA2_ROLE_TEXT_FRAME ++++++ROLE_SYSTEM_STATICTEXT name='10:00' +++++ROLE_SYSTEM_STATICTEXT name=' ' ++++IA2_ROLE_TEXT_FRAME ++++++ROLE_SYSTEM_STATICTEXT name='Valentines day' \ No newline at end of file
diff --git a/content/test/gpu/generate_buildbot_json.py b/content/test/gpu/generate_buildbot_json.py index c4c19584..d909bd0 100755 --- a/content/test/gpu/generate_buildbot_json.py +++ b/content/test/gpu/generate_buildbot_json.py
@@ -1096,7 +1096,7 @@ ], 'android_args': [ '--enable-xml-result-parsing', - '--shard-timeout=300' + '--shard-timeout=500' ], }, @@ -1137,7 +1137,7 @@ ], 'android_args': [ '--enable-xml-result-parsing', - '--shard-timeout=300' + '--shard-timeout=500' ], },
diff --git a/content/browser/renderer_host/mock_widget_impl.cc b/content/test/mock_widget_impl.cc similarity index 88% rename from content/browser/renderer_host/mock_widget_impl.cc rename to content/test/mock_widget_impl.cc index f1f951c..ba2dd35 100644 --- a/content/browser/renderer_host/mock_widget_impl.cc +++ b/content/test/mock_widget_impl.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 "content/browser/renderer_host/mock_widget_impl.h" +#include "content/test/mock_widget_impl.h" namespace content {
diff --git a/content/browser/renderer_host/mock_widget_impl.h b/content/test/mock_widget_impl.h similarity index 78% rename from content/browser/renderer_host/mock_widget_impl.h rename to content/test/mock_widget_impl.h index 8298323..48f2c911 100644 --- a/content/browser/renderer_host/mock_widget_impl.h +++ b/content/test/mock_widget_impl.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 CONTENT_BROWSER_RENDERER_HOST_MOCK_WIDGET_IMPL_H_ -#define CONTENT_BROWSER_RENDERER_HOST_MOCK_WIDGET_IMPL_H_ +#ifndef CONTENT_TEST_MOCK_WIDGET_IMPL_H_ +#define CONTENT_TEST_MOCK_WIDGET_IMPL_H_ #include "content/common/widget.mojom.h" #include "mojo/public/cpp/bindings/binding.h" @@ -24,4 +24,4 @@ } // namespace content -#endif // CONTENT_BROWSER_RENDERER_HOST_MOCK_WIDGET_IMPL_H_ +#endif // CONTENT_TEST_MOCK_WIDGET_IMPL_H_
diff --git a/content/test/renderer_audio_output_stream_factory_context_impl_unittest.cc b/content/test/renderer_audio_output_stream_factory_context_impl_unittest.cc index 3ed8a50d..2052326 100644 --- a/content/test/renderer_audio_output_stream_factory_context_impl_unittest.cc +++ b/content/test/renderer_audio_output_stream_factory_context_impl_unittest.cc
@@ -226,8 +226,8 @@ new MockAudioManager(base::MakeUnique<media::AudioThreadImpl>(), &log_factory_)), audio_system_(media::AudioSystemImpl::Create(audio_manager_.get())) { - media_stream_manager_ = - base::MakeUnique<MediaStreamManager>(audio_system_.get()); + media_stream_manager_ = base::MakeUnique<MediaStreamManager>( + audio_system_.get(), audio_manager_->GetTaskRunner()); } ~RendererAudioOutputStreamFactoryIntegrationTest() override {
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc index d4fa412..ae29c1a 100644 --- a/content/test/test_render_frame_host.cc +++ b/content/test/test_render_frame_host.cc
@@ -19,6 +19,7 @@ #include "content/public/browser/stream_handle.h" #include "content/public/common/browser_side_navigation_policy.h" #include "content/public/common/url_constants.h" +#include "content/public/common/url_utils.h" #include "content/public/test/browser_side_navigation_test_utils.h" #include "content/test/test_navigation_url_loader.h" #include "content/test/test_render_view_host.h" @@ -472,7 +473,7 @@ NavigationRequest* request = frame_tree_node_->navigation_request(); CHECK(request); bool have_to_make_network_request = - ShouldMakeNetworkRequestForURL(request->common_params().url) && + IsURLHandledByNetworkStack(request->common_params().url) && !FrameMsg_Navigate_Type::IsSameDocument( request->common_params().navigation_type);
diff --git a/device/vr/android/gvr/cardboard_gamepad_data_provider.h b/device/vr/android/gvr/cardboard_gamepad_data_provider.h index fbe30fd..bfd3dce 100644 --- a/device/vr/android/gvr/cardboard_gamepad_data_provider.h +++ b/device/vr/android/gvr/cardboard_gamepad_data_provider.h
@@ -11,6 +11,7 @@ // Filled in by vr_shell and consumed by CardboardGamepadDataFetcher. struct CardboardGamepadData { + CardboardGamepadData() : timestamp(0), is_screen_touching(false) {} int64_t timestamp; bool is_screen_touching; };
diff --git a/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc b/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc index c1b88d1..cc39726 100644 --- a/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc +++ b/device/vr/android/gvr/gvr_gamepad_data_fetcher.cc
@@ -47,7 +47,7 @@ GvrGamepadDataFetcher::GvrGamepadDataFetcher( GvrGamepadDataProvider* data_provider, unsigned int display_id) - : display_id_(display_id), gamepad_data_({}) { + : display_id_(display_id) { // Called on UI thread. DVLOG(1) << __FUNCTION__ << "=" << this; data_provider->RegisterGvrGamepadDataFetcher(this);
diff --git a/device/vr/android/gvr/gvr_gamepad_data_provider.h b/device/vr/android/gvr/gvr_gamepad_data_provider.h index 53a84e11..4d70730 100644 --- a/device/vr/android/gvr/gvr_gamepad_data_provider.h +++ b/device/vr/android/gvr/gvr_gamepad_data_provider.h
@@ -16,6 +16,12 @@ // Subset of GVR controller data needed for the gamepad API. Filled in // by vr_shell's VrController and consumed by GvrGamepadDataFetcher. struct GvrGamepadData { + GvrGamepadData() + : timestamp(0), + is_touching(false), + controller_button_pressed(false), + right_handed(true), + connected(false) {} int64_t timestamp; gfx::Vector2dF touch_pos; gfx::Quaternion orientation;
diff --git a/docs/user_handle_mapping.md b/docs/user_handle_mapping.md index 2b2c7cb..95a9744d 100644 --- a/docs/user_handle_mapping.md +++ b/docs/user_handle_mapping.md
@@ -64,7 +64,6 @@ | littledan | littledan | dehrenberg | | luken | luken_chromium | luken | | mark | markmentovai | mmentovai | -| mattm | mattm\_c, mattm\_g | mattm | | mbarbella | mbarbella | mbarbella | | mmeade | mmeade | mmeade | | mednik | mednik | mednik |
diff --git a/extensions/browser/api/feedback_private/feedback_private_api.cc b/extensions/browser/api/feedback_private/feedback_private_api.cc index 3b880de..90571c3 100644 --- a/extensions/browser/api/feedback_private/feedback_private_api.cc +++ b/extensions/browser/api/feedback_private/feedback_private_api.cc
@@ -134,9 +134,12 @@ feedback_private::OnFeedbackRequested::kEventName, std::move(args), browser_context_); + // TODO(weidongg/754329): Using DispatchEventWithLazyListener() is a + // temporary fix to the bug. Investigate a better solution that apply to all + // scenarios. EventRouter::Get(browser_context_) - ->DispatchEventToExtension(extension_misc::kFeedbackExtensionId, - std::move(event)); + ->DispatchEventWithLazyListener(extension_misc::kFeedbackExtensionId, + std::move(event)); } }
diff --git a/extensions/browser/extension_function.cc b/extensions/browser/extension_function.cc index dcfe235..ad6e79e 100644 --- a/extensions/browser/extension_function.cc +++ b/extensions/browser/extension_function.cc
@@ -284,10 +284,6 @@ function_->OnMessageReceived(message); } - bool OnMessageReceived(const IPC::Message& message) override { - return function_->OnMessageReceived(message); - } - UIThreadExtensionFunction* function_; // Owns us. DISALLOW_COPY_AND_ASSIGN(RenderFrameHostTracker);
diff --git a/extensions/browser/extension_web_contents_observer.cc b/extensions/browser/extension_web_contents_observer.cc index 0364f07..44178a1c 100644 --- a/extensions/browser/extension_web_contents_observer.cc +++ b/extensions/browser/extension_web_contents_observer.cc
@@ -8,7 +8,6 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_view_host.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" #include "content/public/common/url_constants.h" @@ -87,37 +86,6 @@ return web_contents(); } -void ExtensionWebContentsObserver::RenderViewCreated( - content::RenderViewHost* render_view_host) { - // TODO(devlin): Most/all of this should move to RenderFrameCreated. - const Extension* extension = GetExtension(render_view_host); - if (!extension) - return; - - Manifest::Type type = extension->GetType(); - - // Some extensions use file:// URLs. - if (type == Manifest::TYPE_EXTENSION || - type == Manifest::TYPE_LEGACY_PACKAGED_APP) { - ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context_); - if (prefs->AllowFileAccess(extension->id())) { - content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( - render_view_host->GetProcess()->GetID(), url::kFileScheme); - } - } - - // Tells the new view that it's hosted in an extension process. - // - // This will often be a rendant IPC, because activating extensions happens at - // the process level, not at the view level. However, without some mild - // refactoring this isn't trivial to do, and this way is simpler. - // - // Plus, we can delete the concept of activating an extension once site - // isolation is turned on. - RendererStartupHelperFactory::GetForBrowserContext(browser_context_) - ->ActivateExtensionInProcess(*extension, render_view_host->GetProcess()); -} - void ExtensionWebContentsObserver::RenderFrameCreated( content::RenderFrameHost* render_frame_host) { InitializeRenderFrame(render_frame_host); @@ -126,6 +94,45 @@ // cached. This minimizes the number of IO->UI->IO thread hops when the ID is // looked up again on the IO thread for the webRequest API. ExtensionApiFrameIdMap::Get()->CacheFrameData(render_frame_host); + + const Extension* extension = GetExtensionFromFrame(render_frame_host, false); + if (!extension) + return; + + Manifest::Type type = extension->GetType(); + + // Some extensions use file:// URLs. + // + // Note: this particular grant isn't relevant for hosted apps, but in the + // future we should be careful about granting privileges to hosted app + // subframes in places like this, since they currently stay in process with + // their parent. A malicious site shouldn't be able to gain a hosted app's + // privileges just by embedding a subframe to a popular hosted app. + if (type == Manifest::TYPE_EXTENSION || + type == Manifest::TYPE_LEGACY_PACKAGED_APP) { + ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context_); + if (prefs->AllowFileAccess(extension->id())) { + content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( + render_frame_host->GetProcess()->GetID(), url::kFileScheme); + } + } + + // Tells the new frame that it's hosted in an extension process. + // + // This will often be a redundant IPC, because activating extensions happens + // at the process level, not at the frame level. However, without some mild + // refactoring this isn't trivial to do, and this way is simpler. + // + // Plus, we can delete the concept of activating an extension once site + // isolation is turned on. + // + // TODO(devlin,alexmos): Do this for subframes as well. See + // https://crbug.com/760341. + if (!render_frame_host->GetParent()) { + RendererStartupHelperFactory::GetForBrowserContext(browser_context_) + ->ActivateExtensionInProcess(*extension, + render_frame_host->GetProcess()); + } } void ExtensionWebContentsObserver::RenderFrameDeleted( @@ -236,32 +243,6 @@ return extension; } -const Extension* ExtensionWebContentsObserver::GetExtension( - content::RenderViewHost* render_view_host) { - std::string extension_id = GetExtensionId(render_view_host); - if (extension_id.empty()) - return NULL; - - // May be null if the extension doesn't exist, for example if somebody typos - // a chrome-extension:// URL. - return ExtensionRegistry::Get(browser_context_) - ->GetExtensionById(extension_id, ExtensionRegistry::ENABLED); -} - -// static -std::string ExtensionWebContentsObserver::GetExtensionId( - content::RenderViewHost* render_view_host) { - // Note that due to ChromeContentBrowserClient::GetEffectiveURL(), hosted apps - // (excluding bookmark apps) will have a chrome-extension:// URL for their - // site, so we can ignore that wrinkle here. - const GURL& site = render_view_host->GetSiteInstance()->GetSiteURL(); - - if (!site.SchemeIs(kExtensionScheme)) - return std::string(); - - return site.host(); -} - void ExtensionWebContentsObserver::OnRequest( content::RenderFrameHost* render_frame_host, const ExtensionHostMsg_Request_Params& params) {
diff --git a/extensions/browser/extension_web_contents_observer.h b/extensions/browser/extension_web_contents_observer.h index 062f7bd..ced7a0c 100644 --- a/extensions/browser/extension_web_contents_observer.h +++ b/extensions/browser/extension_web_contents_observer.h
@@ -16,7 +16,6 @@ namespace content { class BrowserContext; class RenderFrameHost; -class RenderViewHost; class WebContents; } @@ -82,10 +81,6 @@ content::WebContents* GetAssociatedWebContents() const override; // content::WebContentsObserver overrides. - - // A subclass should invoke this method to finish extension process setup. - void RenderViewCreated(content::RenderViewHost* render_view_host) override; - void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; void DidFinishNavigation( @@ -110,15 +105,6 @@ std::string GetExtensionIdFromFrame( content::RenderFrameHost* render_frame_host) const; - // TODO(devlin): Remove these once callers are updated to use the FromFrame - // equivalents. - // Returns the extension or app associated with a render view host. Returns - // NULL if the render view host is not for a valid extension. - const Extension* GetExtension(content::RenderViewHost* render_view_host); - // Returns the extension or app ID associated with a render view host. Returns - // the empty string if the render view host is not for a valid extension. - static std::string GetExtensionId(content::RenderViewHost* render_view_host); - private: void OnRequest(content::RenderFrameHost* render_frame_host, const ExtensionHostMsg_Request_Params& params);
diff --git a/extensions/common/DEPS b/extensions/common/DEPS index bef368e1..4428a658 100644 --- a/extensions/common/DEPS +++ b/extensions/common/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+components/url_formatter", "+device/bluetooth", # For BluetoothPermission "+device/usb", "+grit/extensions_strings.h",
diff --git a/extensions/common/api/bluetooth_private.idl b/extensions/common/api/bluetooth_private.idl index f1b56c6..b2d760b9 100644 --- a/extensions/common/api/bluetooth_private.idl +++ b/extensions/common/api/bluetooth_private.idl
@@ -79,9 +79,6 @@ DOMString? name; // Whether or not the adapter has power. - // Setting the bluetooth power by setting this property is not recommended, - // instead a user pref (ash::prefs::kUserBluetoothAdapterEnabled) should be - // set. boolean? powered; // Whether the adapter is discoverable by other devices.
diff --git a/extensions/common/api/feedback_private.idl b/extensions/common/api/feedback_private.idl index 1d3d4b34..7a2b5e65 100644 --- a/extensions/common/api/feedback_private.idl +++ b/extensions/common/api/feedback_private.idl
@@ -110,7 +110,10 @@ lsusb, // Logs from daemon for Atrus device. - atrusLog + atrusLog, + + // Network logs. + netLog }; // Input parameters for a readLogSource() call.
diff --git a/extensions/common/permissions/permission_message_util.cc b/extensions/common/permissions/permission_message_util.cc index 66702f0..fb8deb3 100644 --- a/extensions/common/permissions/permission_message_util.cc +++ b/extensions/common/permissions/permission_message_util.cc
@@ -8,8 +8,12 @@ #include <vector> #include "base/strings/string_split.h" +#include "base/strings/stringprintf.h" +#include "base/strings/utf_string_conversions.h" +#include "components/url_formatter/elide_url.h" #include "extensions/common/url_pattern_set.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" +#include "url/gurl.h" #include "url/url_constants.h" using extensions::URLPatternSet; @@ -45,6 +49,14 @@ continue; std::string host = pattern.host(); + if (!host.empty()) { + // Convert the host into a secure format. For example, an IDN domain is + // converted to punycode. + host = base::UTF16ToUTF8(url_formatter::FormatUrlForSecurityDisplay( + GURL(base::StringPrintf("%s%s%s", url::kHttpScheme, + url::kStandardSchemeSeparator, host.c_str())), + url_formatter::SchemeDisplay::OMIT_HTTP_AND_HTTPS)); + } // Add the subdomain wildcard back to the host, if necessary. if (pattern.match_subdomains())
diff --git a/gpu/command_buffer/service/context_group.cc b/gpu/command_buffer/service/context_group.cc index abbf784..11a8eb90 100644 --- a/gpu/command_buffer/service/context_group.cc +++ b/gpu/command_buffer/service/context_group.cc
@@ -61,6 +61,7 @@ ContextGroup::ContextGroup( const GpuPreferences& gpu_preferences, + bool supports_passthrough_command_decoders, MailboxManager* mailbox_manager, const scoped_refptr<MemoryTracker>& memory_tracker, ShaderTranslatorCache* shader_translator_cache, @@ -110,6 +111,7 @@ feature_info_(feature_info), image_manager_(image_manager), image_factory_(image_factory), + use_passthrough_cmd_decoder_(false), passthrough_resources_(new PassthroughResources), progress_reporter_(progress_reporter), gpu_feature_info_(gpu_feature_info), @@ -119,6 +121,8 @@ DCHECK(mailbox_manager_); transfer_buffer_manager_ = base::MakeUnique<TransferBufferManager>(memory_tracker_.get()); + use_passthrough_cmd_decoder_ = supports_passthrough_command_decoders && + gpu_preferences_.use_passthrough_cmd_decoder; } bool ContextGroup::Initialize(GLES2Decoder* decoder,
diff --git a/gpu/command_buffer/service/context_group.h b/gpu/command_buffer/service/context_group.h index 3411e972..b072dbe93 100644 --- a/gpu/command_buffer/service/context_group.h +++ b/gpu/command_buffer/service/context_group.h
@@ -58,6 +58,7 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> { public: ContextGroup(const GpuPreferences& gpu_preferences, + bool supports_passthrough_command_decoders, MailboxManager* mailbox_manager, const scoped_refptr<MemoryTracker>& memory_tracker, ShaderTranslatorCache* shader_translator_cache, @@ -228,6 +229,10 @@ syncs_id_map_.erase(client_id); } + bool use_passthrough_cmd_decoder() const { + return use_passthrough_cmd_decoder_; + } + PassthroughResources* passthrough_resources() const { return passthrough_resources_.get(); } @@ -304,6 +309,7 @@ // Mappings from client side IDs to service side IDs. base::hash_map<GLuint, GLsync> syncs_id_map_; + bool use_passthrough_cmd_decoder_; std::unique_ptr<PassthroughResources> passthrough_resources_; // Used to notify the watchdog thread of progress during destruction,
diff --git a/gpu/command_buffer/service/context_group_unittest.cc b/gpu/command_buffer/service/context_group_unittest.cc index dada3dc9..28fb63a 100644 --- a/gpu/command_buffer/service/context_group_unittest.cc +++ b/gpu/command_buffer/service/context_group_unittest.cc
@@ -46,8 +46,8 @@ decoder_.reset(new MockGLES2Decoder(&command_buffer_service_)); scoped_refptr<FeatureInfo> feature_info = new FeatureInfo; group_ = scoped_refptr<ContextGroup>(new ContextGroup( - gpu_preferences_, &mailbox_manager_, nullptr /* memory_tracker */, - nullptr /* shader_translator_cache */, + gpu_preferences_, false, &mailbox_manager_, + nullptr /* memory_tracker */, nullptr /* shader_translator_cache */, nullptr /* framebuffer_completeness_cache */, feature_info, kBindGeneratesResource, &image_manager_, nullptr /* image_factory */, nullptr /* progress_reporter */, GpuFeatureInfo(), @@ -77,6 +77,7 @@ EXPECT_TRUE(group_->texture_manager() == NULL); EXPECT_TRUE(group_->program_manager() == NULL); EXPECT_TRUE(group_->shader_manager() == NULL); + EXPECT_FALSE(group_->use_passthrough_cmd_decoder()); } TEST_F(ContextGroupTest, InitializeNoExtensions) {
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index e94e662..316a337 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc
@@ -523,14 +523,18 @@ // GL_COMPRESSED_RGBA_ASTC(0x93B0 ~ 0x93BD) GLint astc_format_it = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; GLint astc_format_max = GL_COMPRESSED_RGBA_ASTC_12x12_KHR; - for (; astc_format_it <= astc_format_max; astc_format_it++) - validators_.compressed_texture_format.AddValue(astc_format_it); + for (; astc_format_it <= astc_format_max; astc_format_it++) { + validators_.compressed_texture_format.AddValue(astc_format_it); + validators_.texture_internal_format_storage.AddValue(astc_format_it); + } // GL_COMPRESSED_SRGB8_ALPHA8_ASTC(0x93D0 ~ 0x93DD) astc_format_it = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR; astc_format_max = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR; - for (; astc_format_it <= astc_format_max; astc_format_it++) - validators_.compressed_texture_format.AddValue(astc_format_it); + for (; astc_format_it <= astc_format_max; astc_format_it++) { + validators_.compressed_texture_format.AddValue(astc_format_it); + validators_.texture_internal_format_storage.AddValue(astc_format_it); + } } bool have_atc = extensions.Contains("GL_AMD_compressed_ATC_texture") ||
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index c2ab579..f5f4228 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -3103,7 +3103,7 @@ GLES2DecoderClient* client, CommandBufferServiceBase* command_buffer_service, ContextGroup* group) { - if (group->gpu_preferences().use_passthrough_cmd_decoder) { + if (group->use_passthrough_cmd_decoder()) { return new GLES2DecoderPassthroughImpl(client, command_buffer_service, group); } @@ -13642,6 +13642,66 @@ } return true; } + case GL_COMPRESSED_RGBA_ASTC_4x4_KHR: + case GL_COMPRESSED_RGBA_ASTC_5x4_KHR: + case GL_COMPRESSED_RGBA_ASTC_5x5_KHR: + case GL_COMPRESSED_RGBA_ASTC_6x5_KHR: + case GL_COMPRESSED_RGBA_ASTC_6x6_KHR: + case GL_COMPRESSED_RGBA_ASTC_8x5_KHR: + case GL_COMPRESSED_RGBA_ASTC_8x6_KHR: + case GL_COMPRESSED_RGBA_ASTC_8x8_KHR: + case GL_COMPRESSED_RGBA_ASTC_10x5_KHR: + case GL_COMPRESSED_RGBA_ASTC_10x6_KHR: + case GL_COMPRESSED_RGBA_ASTC_10x8_KHR: + case GL_COMPRESSED_RGBA_ASTC_10x10_KHR: + case GL_COMPRESSED_RGBA_ASTC_12x10_KHR: + case GL_COMPRESSED_RGBA_ASTC_12x12_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: + case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: { + const int index = + (format < GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR) + ? static_cast<int>(format - GL_COMPRESSED_RGBA_ASTC_4x4_KHR) + : static_cast<int>(format - + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR); + + const int kBlockWidth = kASTCBlockArray[index].blockWidth; + const int kBlockHeight = kASTCBlockArray[index].blockHeight; + + if ((xoffset % kBlockWidth) || (yoffset % kBlockHeight)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, + "xoffset or yoffset not multiple of 4"); + return false; + } + GLsizei tex_width = 0; + GLsizei tex_height = 0; + if (!texture->GetLevelSize(target, level, &tex_width, &tex_height, + nullptr) || + width - xoffset > tex_width || height - yoffset > tex_height) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, + "dimensions out of range"); + return false; + } + if ((((width % kBlockWidth) != 0) && (width + xoffset != tex_width)) || + (((height % kBlockHeight) != 0) && + (height + yoffset != tex_height))) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, + "dimensions do not align to a block boundary"); + return false; + } + return true; + } case GL_ATC_RGB_AMD: case GL_ATC_RGBA_EXPLICIT_ALPHA_AMD: case GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD: { @@ -13709,6 +13769,8 @@ return true; } default: + LOCAL_SET_GL_ERROR(GL_INVALID_ENUM, function_name, + "unknown compressed texture format"); return false; } }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc index 4d3b826..0c39b3b 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
@@ -208,7 +208,7 @@ scoped_refptr<FeatureInfo> feature_info = new FeatureInfo(workarounds); group_ = scoped_refptr<ContextGroup>(new ContextGroup( - gpu_preferences_, &mailbox_manager_, memory_tracker_, + gpu_preferences_, false, &mailbox_manager_, memory_tracker_, &shader_translator_cache_, &framebuffer_completeness_cache_, feature_info, normalized_init.bind_generates_resource, &image_manager_, nullptr /* image_factory */, nullptr /* progress_reporter */, @@ -2251,21 +2251,22 @@ gl::init::InitializeGLOneOffImplementation(gl::kGLImplementationEGLGLES2, false, false, false, true); - surface_ = gl::init::CreateOffscreenGLSurface( - context_creation_attribs_.offscreen_framebuffer_size); - context_ = gl::init::CreateGLContext( - nullptr, surface_.get(), - GenerateGLContextAttribs(context_creation_attribs_, gpu_preferences_)); - context_->MakeCurrent(surface_.get()); scoped_refptr<gles2::FeatureInfo> feature_info = new gles2::FeatureInfo(); group_ = new gles2::ContextGroup( - gpu_preferences_, &mailbox_manager_, nullptr /* memory_tracker */, + gpu_preferences_, true, &mailbox_manager_, nullptr /* memory_tracker */, &shader_translator_cache_, &framebuffer_completeness_cache_, feature_info, context_creation_attribs_.bind_generates_resource, &image_manager_, nullptr /* image_factory */, nullptr /* progress_reporter */, GpuFeatureInfo(), &discardable_manager_); + surface_ = gl::init::CreateOffscreenGLSurface( + context_creation_attribs_.offscreen_framebuffer_size); + context_ = gl::init::CreateGLContext( + nullptr, surface_.get(), + GenerateGLContextAttribs(context_creation_attribs_, group_.get())); + context_->MakeCurrent(surface_.get()); + command_buffer_service_.reset(new FakeCommandBufferServiceBase()); decoder_.reset(new GLES2DecoderPassthroughImpl(
diff --git a/gpu/command_buffer/service/service_discardable_manager_unittest.cc b/gpu/command_buffer/service/service_discardable_manager_unittest.cc index 9ddcb12..3213139 100644 --- a/gpu/command_buffer/service/service_discardable_manager_unittest.cc +++ b/gpu/command_buffer/service/service_discardable_manager_unittest.cc
@@ -70,7 +70,7 @@ decoder_.reset(new MockGLES2Decoder(&command_buffer_service_)); feature_info_ = new FeatureInfo(); context_group_ = scoped_refptr<ContextGroup>(new ContextGroup( - gpu_preferences_, &mailbox_manager_, nullptr, nullptr, nullptr, + gpu_preferences_, false, &mailbox_manager_, nullptr, nullptr, nullptr, feature_info_, false, &image_manager_, nullptr, nullptr, GpuFeatureInfo(), &discardable_manager_)); TestHelper::SetupContextGroupInitExpectations(
diff --git a/gpu/command_buffer/service/service_utils.cc b/gpu/command_buffer/service/service_utils.cc index a3b53116..e8f2b61 100644 --- a/gpu/command_buffer/service/service_utils.cc +++ b/gpu/command_buffer/service/service_utils.cc
@@ -6,18 +6,23 @@ #include "base/command_line.h" #include "gpu/command_buffer/common/gles2_cmd_utils.h" -#include "gpu/command_buffer/service/gpu_preferences.h" +#include "gpu/command_buffer/service/context_group.h" #include "ui/gl/gl_switches.h" +#if defined(USE_EGL) +#include "ui/gl/gl_surface_egl.h" +#endif // defined(USE_EGL) + namespace gpu { namespace gles2 { gl::GLContextAttribs GenerateGLContextAttribs( const ContextCreationAttribHelper& attribs_helper, - const GpuPreferences& gpu_preferences) { + const ContextGroup* context_group) { + DCHECK(context_group != nullptr); gl::GLContextAttribs attribs; attribs.gpu_preference = attribs_helper.gpu_preference; - if (gpu_preferences.use_passthrough_cmd_decoder) { + if (context_group->use_passthrough_cmd_decoder()) { attribs.bind_generates_resource = attribs_helper.bind_generates_resource; attribs.webgl_compatibility_context = IsWebGLContextType(attribs_helper.context_type); @@ -50,5 +55,20 @@ return attribs; } +bool PassthroughCommandDecoderSupported() { +#if defined(USE_EGL) + // Using the passthrough command buffer requires that specific ANGLE + // extensions are exposed + return gl::GLSurfaceEGL::IsCreateContextBindGeneratesResourceSupported() && + gl::GLSurfaceEGL::IsCreateContextWebGLCompatabilitySupported() && + gl::GLSurfaceEGL::IsRobustResourceInitSupported() && + gl::GLSurfaceEGL::IsDisplayTextureShareGroupSupported() && + gl::GLSurfaceEGL::IsCreateContextClientArraysSupported(); +#else + // The passthrough command buffer is only supported on top of ANGLE/EGL + return false; +#endif // defined(USE_EGL) +} // namespace gles2 + } // namespace gles2 } // namespace gpu
diff --git a/gpu/command_buffer/service/service_utils.h b/gpu/command_buffer/service/service_utils.h index af4e1e6..5eae2d3 100644 --- a/gpu/command_buffer/service/service_utils.h +++ b/gpu/command_buffer/service/service_utils.h
@@ -9,14 +9,17 @@ #include "ui/gl/gl_context.h" namespace gpu { -struct GpuPreferences; namespace gles2 { struct ContextCreationAttribHelper; +class ContextGroup; GPU_EXPORT gl::GLContextAttribs GenerateGLContextAttribs( const ContextCreationAttribHelper& attribs_helper, - const GpuPreferences& gpu_preferences); + const ContextGroup* context_group); + +// Returns true if the driver supports creating passthrough command decoders +GPU_EXPORT bool PassthroughCommandDecoderSupported(); } // namespace gles2 } // namespace gpu
diff --git a/gpu/command_buffer/tests/fuzzer_main.cc b/gpu/command_buffer/tests/fuzzer_main.cc index be6ff9e..9e3d47c 100644 --- a/gpu/command_buffer/tests/fuzzer_main.cc +++ b/gpu/command_buffer/tests/fuzzer_main.cc
@@ -152,7 +152,7 @@ scoped_refptr<gles2::FeatureInfo> feature_info = new gles2::FeatureInfo(); scoped_refptr<gles2::ContextGroup> context_group = new gles2::ContextGroup( - gpu_preferences_, &mailbox_manager_, nullptr /* memory_tracker */, + gpu_preferences_, true, &mailbox_manager_, nullptr /* memory_tracker */, &translator_cache_, &completeness_cache_, feature_info, true /* bind_generates_resource */, &image_manager_, nullptr /* image_factory */, nullptr /* progress_reporter */,
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc index 2a24782..a9f0887 100644 --- a/gpu/command_buffer/tests/gl_manager.cc +++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -322,8 +322,10 @@ if (!context_group) { scoped_refptr<gles2::FeatureInfo> feature_info = new gles2::FeatureInfo(workarounds); + // Always mark the passthrough command decoder as supported so that tests do + // not unexpectedly use the wrong command decoder context_group = new gles2::ContextGroup( - gpu_preferences_, mailbox_manager_, nullptr /* memory_tracker */, + gpu_preferences_, true, mailbox_manager_, nullptr /* memory_tracker */, translator_cache_.get(), &completeness_cache_, feature_info, options.bind_generates_resource, &image_manager_, options.image_factory, nullptr /* progress_reporter */, GpuFeatureInfo(), @@ -349,19 +351,17 @@ context_ = scoped_refptr<gl::GLContext>(new gpu::GLContextVirtual( share_group_.get(), base_context_->get(), decoder_->AsWeakPtr())); ASSERT_TRUE(context_->Initialize( - surface_.get(), - GenerateGLContextAttribs(attribs, context_group->gpu_preferences()))); + surface_.get(), GenerateGLContextAttribs(attribs, context_group))); } else { if (real_gl_context) { context_ = scoped_refptr<gl::GLContext>(new gpu::GLContextVirtual( share_group_.get(), real_gl_context, decoder_->AsWeakPtr())); ASSERT_TRUE(context_->Initialize( - surface_.get(), - GenerateGLContextAttribs(attribs, context_group->gpu_preferences()))); + surface_.get(), GenerateGLContextAttribs(attribs, context_group))); } else { context_ = gl::init::CreateGLContext( share_group_.get(), surface_.get(), - GenerateGLContextAttribs(attribs, context_group->gpu_preferences())); + GenerateGLContextAttribs(attribs, context_group)); g_gpu_feature_info.ApplyToGLContext(context_.get()); } }
diff --git a/gpu/command_buffer/tests/gl_tests_main.cc b/gpu/command_buffer/tests/gl_tests_main.cc index 5f44cb64..89a16c3 100644 --- a/gpu/command_buffer/tests/gl_tests_main.cc +++ b/gpu/command_buffer/tests/gl_tests_main.cc
@@ -31,8 +31,8 @@ base::FeatureList::InitializeInstance(std::string(), std::string()); gpu::GPUInfo gpu_info; gpu::CollectBasicGraphicsInfo(&gpu_info); - gpu::GLManager::g_gpu_feature_info = - gpu::GetGpuFeatureInfo(gpu_info, *base::CommandLine::ForCurrentProcess()); + gpu::GLManager::g_gpu_feature_info = gpu::ComputeGpuFeatureInfo( + gpu_info, base::CommandLine::ForCurrentProcess()); gl::init::InitializeGLNoExtensionsOneOff(); gl::init::SetDisabledExtensionsPlatform( gpu::GLManager::g_gpu_feature_info.disabled_extensions);
diff --git a/gpu/config/gpu_driver_bug_workaround_type.h b/gpu/config/gpu_driver_bug_workaround_type.h index ce63e09..edd147f 100644 --- a/gpu/config/gpu_driver_bug_workaround_type.h +++ b/gpu/config/gpu_driver_bug_workaround_type.h
@@ -35,8 +35,6 @@ clear_uniforms_before_first_program_use) \ GPU_OP(COUNT_ALL_IN_VARYINGS_PACKING, \ count_all_in_varyings_packing) \ - GPU_OP(CREATE_DEFAULT_GL_CONTEXT, \ - create_default_gl_context) \ GPU_OP(DECODE_ENCODE_SRGB_FOR_GENERATEMIPMAP, \ decode_encode_srgb_for_generatemipmap) \ GPU_OP(DISABLE_ACCELERATED_VPX_DECODE, \
diff --git a/gpu/config/gpu_switches.cc b/gpu/config/gpu_switches.cc index 68be558..ec8e9b8 100644 --- a/gpu/config/gpu_switches.cc +++ b/gpu/config/gpu_switches.cc
@@ -6,6 +6,9 @@ namespace switches { +// Passes if it's AMD switchable dual GPUs from browser process to GPU process. +const char kAMDSwitchable[] = "amd-switchable"; + // Disable workarounds for various GPU driver bugs. const char kDisableGpuDriverBugWorkarounds[] = "disable-gpu-driver-bug-workarounds";
diff --git a/gpu/config/gpu_switches.h b/gpu/config/gpu_switches.h index dd172745..312c9a8d 100644 --- a/gpu/config/gpu_switches.h +++ b/gpu/config/gpu_switches.h
@@ -9,6 +9,7 @@ namespace switches { +GPU_EXPORT extern const char kAMDSwitchable[]; GPU_EXPORT extern const char kDisableGpuDriverBugWorkarounds[]; GPU_EXPORT extern const char kDisableGpuRasterization[]; GPU_EXPORT extern const char kEnableGpuRasterization[];
diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc index 9802c40..a4230c8 100644 --- a/gpu/config/gpu_util.cc +++ b/gpu/config/gpu_util.cc
@@ -68,6 +68,19 @@ return kGpuFeatureStatusEnabled; } +void AppendWorkaroundsToCommandLine(const GpuFeatureInfo& gpu_feature_info, + base::CommandLine* command_line) { + if (gpu_feature_info.IsWorkaroundEnabled(DISABLE_D3D11)) { + command_line->AppendSwitch(switches::kDisableD3D11); + } + if (gpu_feature_info.IsWorkaroundEnabled(DISABLE_ES3_GL_CONTEXT)) { + command_line->AppendSwitch(switches::kDisableES3GLContext); + } + if (gpu_feature_info.IsWorkaroundEnabled(DISABLE_DIRECT_COMPOSITION)) { + command_line->AppendSwitch(switches::kDisableDirectComposition); + } +} + } // namespace anonymous void ParseSecondaryGpuDevicesFromCommandLine( @@ -107,11 +120,67 @@ } } -GpuFeatureInfo GetGpuFeatureInfo(const GPUInfo& gpu_info, - const base::CommandLine& command_line) { +void GetGpuInfoFromCommandLine(const base::CommandLine& command_line, + GPUInfo* gpu_info) { + DCHECK(gpu_info); + + if (!command_line.HasSwitch(switches::kGpuVendorID) || + !command_line.HasSwitch(switches::kGpuDeviceID) || + !command_line.HasSwitch(switches::kGpuDriverVersion)) + return; + bool success = base::HexStringToUInt( + command_line.GetSwitchValueASCII(switches::kGpuVendorID), + &gpu_info->gpu.vendor_id); + DCHECK(success); + success = base::HexStringToUInt( + command_line.GetSwitchValueASCII(switches::kGpuDeviceID), + &gpu_info->gpu.device_id); + DCHECK(success); + gpu_info->driver_vendor = + command_line.GetSwitchValueASCII(switches::kGpuDriverVendor); + gpu_info->driver_version = + command_line.GetSwitchValueASCII(switches::kGpuDriverVersion); + gpu_info->driver_date = + command_line.GetSwitchValueASCII(switches::kGpuDriverDate); + gpu::ParseSecondaryGpuDevicesFromCommandLine(command_line, gpu_info); + + // Set active gpu device. + if (command_line.HasSwitch(switches::kGpuActiveVendorID) && + command_line.HasSwitch(switches::kGpuActiveDeviceID)) { + uint32_t active_vendor_id = 0; + uint32_t active_device_id = 0; + success = base::HexStringToUInt( + command_line.GetSwitchValueASCII(switches::kGpuActiveVendorID), + &active_vendor_id); + DCHECK(success); + success = base::HexStringToUInt( + command_line.GetSwitchValueASCII(switches::kGpuActiveDeviceID), + &active_device_id); + DCHECK(success); + if (gpu_info->gpu.vendor_id == active_vendor_id && + gpu_info->gpu.device_id == active_device_id) { + gpu_info->gpu.active = true; + } else { + for (size_t i = 0; i < gpu_info->secondary_gpus.size(); ++i) { + if (gpu_info->secondary_gpus[i].vendor_id == active_vendor_id && + gpu_info->secondary_gpus[i].device_id == active_device_id) { + gpu_info->secondary_gpus[i].active = true; + break; + } + } + } + } + + if (command_line.HasSwitch(switches::kAMDSwitchable)) { + gpu_info->amd_switchable = true; + } +} + +GpuFeatureInfo ComputeGpuFeatureInfo(const GPUInfo& gpu_info, + base::CommandLine* command_line) { GpuFeatureInfo gpu_feature_info; std::set<int> blacklisted_features; - if (!command_line.HasSwitch(switches::kIgnoreGpuBlacklist)) { + if (!command_line->HasSwitch(switches::kIgnoreGpuBlacklist)) { std::unique_ptr<GpuBlacklist> list(GpuBlacklist::Create()); blacklisted_features = list->MakeDecision(GpuControlList::kOsAny, std::string(), gpu_info); @@ -119,11 +188,11 @@ // Currently only used for GPU rasterization. gpu_feature_info.status_values[GPU_FEATURE_TYPE_GPU_RASTERIZATION] = - GetGpuRasterizationFeatureStatus(blacklisted_features, command_line); + GetGpuRasterizationFeatureStatus(blacklisted_features, *command_line); std::set<base::StringPiece> all_disabled_extensions; std::string disabled_gl_extensions_value = - command_line.GetSwitchValueASCII(switches::kDisableGLExtensions); + command_line->GetSwitchValueASCII(switches::kDisableGLExtensions); if (!disabled_gl_extensions_value.empty()) { std::vector<base::StringPiece> command_line_disabled_extensions = base::SplitStringPiece(disabled_gl_extensions_value, ", ;", @@ -135,7 +204,7 @@ std::set<int> enabled_driver_bug_workarounds; std::vector<std::string> driver_bug_disabled_extensions; - if (!command_line.HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { + if (!command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { std::unique_ptr<gpu::GpuDriverBugList> list(GpuDriverBugList::Create()); enabled_driver_bug_workarounds = list->MakeDecision(GpuControlList::kOsAny, std::string(), gpu_info); @@ -147,7 +216,7 @@ driver_bug_disabled_extensions.end()); } gpu::GpuDriverBugList::AppendWorkaroundsFromCommandLine( - &enabled_driver_bug_workarounds, command_line); + &enabled_driver_bug_workarounds, *command_line); gpu_feature_info.enabled_gpu_driver_bug_workarounds.insert( gpu_feature_info.enabled_gpu_driver_bug_workarounds.begin(), @@ -160,6 +229,10 @@ gpu_feature_info.disabled_extensions = base::JoinString(v, " "); } + // TODO(zmo): Find a better way to communicate these settings to bindings + // initialization than commandline switches. + AppendWorkaroundsToCommandLine(gpu_feature_info, command_line); + return gpu_feature_info; }
diff --git a/gpu/config/gpu_util.h b/gpu/config/gpu_util.h index 489b96f2..c508302 100644 --- a/gpu/config/gpu_util.h +++ b/gpu/config/gpu_util.h
@@ -23,12 +23,18 @@ const base::CommandLine& command_line, GPUInfo* gpu_info); +// Command line contains basic GPU info collected at browser startup time in +// GpuDataManagerImplPrivate::Initialize(). +// TODO(zmo): Obsolete this. +GPU_EXPORT void GetGpuInfoFromCommandLine(const base::CommandLine& command_line, + GPUInfo* gpu_info); + // This function should only be called from the GPU process, or the Browser // process while using in-process GPU. This function is safe to call at any // point, and is not dependent on sandbox initialization. +// This function also appends a few commandline switches caused by driver bugs. GPU_EXPORT GpuFeatureInfo -GetGpuFeatureInfo(const GPUInfo& gpu_info, - const base::CommandLine& command_line); +ComputeGpuFeatureInfo(const GPUInfo& gpu_info, base::CommandLine* command_line); GPU_EXPORT void SetKeysForCrashLogging(const GPUInfo& gpu_info); } // namespace gpu
diff --git a/gpu/config/gpu_util_unittest.cc b/gpu/config/gpu_util_unittest.cc index 5fc2e5b..23d2881b 100644 --- a/gpu/config/gpu_util_unittest.cc +++ b/gpu/config/gpu_util_unittest.cc
@@ -125,7 +125,8 @@ { base::CommandLine command_line(base::CommandLine::NO_PROGRAM); GPUInfo gpu_info; - GpuFeatureInfo gpu_feature_info = GetGpuFeatureInfo(gpu_info, command_line); + GpuFeatureInfo gpu_feature_info = + ComputeGpuFeatureInfo(gpu_info, &command_line); EXPECT_FALSE(gpu_feature_info.IsWorkaroundEnabled( USE_GPU_DRIVER_WORKAROUND_FOR_TESTING)); } @@ -136,7 +137,8 @@ USE_GPU_DRIVER_WORKAROUND_FOR_TESTING), "1"); GPUInfo gpu_info; - GpuFeatureInfo gpu_feature_info = GetGpuFeatureInfo(gpu_info, command_line); + GpuFeatureInfo gpu_feature_info = + ComputeGpuFeatureInfo(gpu_info, &command_line); EXPECT_TRUE(gpu_feature_info.IsWorkaroundEnabled( USE_GPU_DRIVER_WORKAROUND_FOR_TESTING)); } @@ -147,7 +149,8 @@ // See gpu/config/gpu_driver_bug_list.json, entry 215. gpu_info.gpu.vendor_id = 0xbad9; gpu_info.gpu.device_id = 0xbad9; - GpuFeatureInfo gpu_feature_info = GetGpuFeatureInfo(gpu_info, command_line); + GpuFeatureInfo gpu_feature_info = + ComputeGpuFeatureInfo(gpu_info, &command_line); EXPECT_TRUE(gpu_feature_info.IsWorkaroundEnabled( USE_GPU_DRIVER_WORKAROUND_FOR_TESTING)); } @@ -161,7 +164,8 @@ // See gpu/config/gpu_driver_bug_list.json, entry 215. gpu_info.gpu.vendor_id = 0xbad9; gpu_info.gpu.device_id = 0xbad9; - GpuFeatureInfo gpu_feature_info = GetGpuFeatureInfo(gpu_info, command_line); + GpuFeatureInfo gpu_feature_info = + ComputeGpuFeatureInfo(gpu_info, &command_line); EXPECT_FALSE(gpu_feature_info.IsWorkaroundEnabled( USE_GPU_DRIVER_WORKAROUND_FOR_TESTING)); }
diff --git a/gpu/gles2_conform_support/egl/context.cc b/gpu/gles2_conform_support/egl/context.cc index 6d3bbeec..5ba8b95 100644 --- a/gpu/gles2_conform_support/egl/context.cc +++ b/gpu/gles2_conform_support/egl/context.cc
@@ -263,9 +263,9 @@ scoped_refptr<gpu::gles2::FeatureInfo> feature_info( new gpu::gles2::FeatureInfo(gpu_driver_bug_workarounds_)); scoped_refptr<gpu::gles2::ContextGroup> group(new gpu::gles2::ContextGroup( - gpu::GpuPreferences(), &mailbox_manager_, nullptr /* memory_tracker */, - &translator_cache_, &completeness_cache_, feature_info, true, - &image_manager_, nullptr /* image_factory */, + gpu::GpuPreferences(), true, &mailbox_manager_, + nullptr /* memory_tracker */, &translator_cache_, &completeness_cache_, + feature_info, true, &image_manager_, nullptr /* image_factory */, nullptr /* progress_reporter */, gpu::GpuFeatureInfo(), &discardable_manager_));
diff --git a/gpu/gles2_conform_support/egl/thread_state.cc b/gpu/gles2_conform_support/egl/thread_state.cc index 84d0e57..e0f02ae71 100644 --- a/gpu/gles2_conform_support/egl/thread_state.cc +++ b/gpu/gles2_conform_support/egl/thread_state.cc
@@ -82,7 +82,7 @@ if (!command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { gpu::GPUInfo gpu_info; gpu::CollectBasicGraphicsInfo(&gpu_info); - gpu_feature_info = gpu::GetGpuFeatureInfo(gpu_info, *command_line); + gpu_feature_info = gpu::ComputeGpuFeatureInfo(gpu_info, command_line); Context::SetPlatformGpuFeatureInfo(gpu_feature_info); }
diff --git a/gpu/ipc/common/gpu_message_generator.h b/gpu/ipc/common/gpu_message_generator.h index 91c23e06..e9a6e54c 100644 --- a/gpu/ipc/common/gpu_message_generator.h +++ b/gpu/ipc/common/gpu_message_generator.h
@@ -5,4 +5,8 @@ // Multiply-included file, hence no include guard. #include "build/build_config.h" +#undef GPU_IPC_COMMON_GPU_MESSAGES_H_ #include "gpu/ipc/common/gpu_messages.h" +#ifndef GPU_IPC_COMMON_GPU_MESSAGES_H_ +#error "Failed to include gpu/ipc/common/gpu_messages.h" +#endif
diff --git a/gpu/ipc/common/gpu_messages.h b/gpu/ipc/common/gpu_messages.h index 5639f4ae..7c4c691 100644 --- a/gpu/ipc/common/gpu_messages.h +++ b/gpu/ipc/common/gpu_messages.h
@@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifndef GPU_IPC_COMMON_GPU_MESSAGES_H_ +#define GPU_IPC_COMMON_GPU_MESSAGES_H_ + // Multiply-included message file, hence no include guard here, but see below // for a much smaller-than-usual include guard section. @@ -252,3 +255,5 @@ // Start or stop VSync sygnal production on GPU side (Windows only). IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_SetNeedsVSync, bool /* needs_vsync */) + +#endif // GPU_IPC_COMMON_GPU_MESSAGES_H_
diff --git a/gpu/ipc/in_process_command_buffer.cc b/gpu/ipc/in_process_command_buffer.cc index 6e251c16..15b4c53 100644 --- a/gpu/ipc/in_process_command_buffer.cc +++ b/gpu/ipc/in_process_command_buffer.cc
@@ -314,8 +314,9 @@ params.context_group ? params.context_group->decoder_->GetContextGroup() : new gles2::ContextGroup( - service_->gpu_preferences(), service_->mailbox_manager(), - nullptr /* memory_tracker */, + service_->gpu_preferences(), + gles2::PassthroughCommandDecoderSupported(), + service_->mailbox_manager(), nullptr /* memory_tracker */, service_->shader_translator_cache(), service_->framebuffer_completeness_cache(), feature_info, bind_generates_resource, service_->image_manager(), @@ -370,8 +371,8 @@ if (!context_.get()) { context_ = gl::init::CreateGLContext( gl_share_group_.get(), surface_.get(), - GenerateGLContextAttribs( - params.attribs, decoder_->GetContextGroup()->gpu_preferences())); + GenerateGLContextAttribs(params.attribs, + decoder_->GetContextGroup())); if (context_.get()) { service_->gpu_feature_info().ApplyToGLContext(context_.get()); } @@ -381,10 +382,8 @@ context_ = new GLContextVirtual(gl_share_group_.get(), context_.get(), decoder_->AsWeakPtr()); if (context_->Initialize( - surface_.get(), - GenerateGLContextAttribs( - params.attribs, - decoder_->GetContextGroup()->gpu_preferences()))) { + surface_.get(), GenerateGLContextAttribs( + params.attribs, decoder_->GetContextGroup()))) { VLOG(1) << "Created virtual GL context."; } else { context_ = NULL; @@ -392,8 +391,7 @@ } else { context_ = gl::init::CreateGLContext( gl_share_group_.get(), surface_.get(), - GenerateGLContextAttribs( - params.attribs, decoder_->GetContextGroup()->gpu_preferences())); + GenerateGLContextAttribs(params.attribs, decoder_->GetContextGroup())); if (context_.get()) { service_->gpu_feature_info().ApplyToGLContext(context_.get()); }
diff --git a/gpu/ipc/service/gpu_channel_manager.cc b/gpu/ipc/service/gpu_channel_manager.cc index d6c3aa8..6b2ced82 100644 --- a/gpu/ipc/service/gpu_channel_manager.cc +++ b/gpu/ipc/service/gpu_channel_manager.cc
@@ -24,6 +24,7 @@ #include "gpu/command_buffer/service/passthrough_program_cache.h" #include "gpu/command_buffer/service/preemption_flag.h" #include "gpu/command_buffer/service/scheduler.h" +#include "gpu/command_buffer/service/service_utils.h" #include "gpu/command_buffer/service/sync_point_manager.h" #include "gpu/ipc/common/gpu_messages.h" #include "gpu/ipc/service/gpu_channel.h" @@ -111,7 +112,8 @@ workarounds.disable_program_disk_cache; // Use the EGL cache control extension for the passthrough decoder. - if (gpu_preferences_.use_passthrough_cmd_decoder) { + if (gpu_preferences_.use_passthrough_cmd_decoder && + gles2::PassthroughCommandDecoderSupported()) { program_cache_.reset(new gles2::PassthroughProgramCache( gpu_preferences_.gpu_program_cache_size, disable_disk_cache)); } else { @@ -305,7 +307,8 @@ for (int channel : channels_to_clear) RemoveChannel(channel); - program_cache_.reset(); + if (program_cache_) + program_cache_->Trim(0u); } #endif
diff --git a/gpu/ipc/service/gpu_command_buffer_stub.cc b/gpu/ipc/service/gpu_command_buffer_stub.cc index 028c88b..c5ca7db 100644 --- a/gpu/ipc/service/gpu_command_buffer_stub.cc +++ b/gpu/ipc/service/gpu_command_buffer_stub.cc
@@ -590,7 +590,8 @@ gpu::GpuMemoryBufferFactory* gmb_factory = channel_->gpu_channel_manager()->gpu_memory_buffer_factory(); context_group_ = new gles2::ContextGroup( - manager->gpu_preferences(), manager->mailbox_manager(), + manager->gpu_preferences(), gles2::PassthroughCommandDecoderSupported(), + manager->mailbox_manager(), new GpuCommandBufferMemoryTracker( channel_, command_buffer_id_.GetUnsafeValue(), init_params.attribs.context_type, channel_->task_runner()), @@ -721,7 +722,7 @@ } } - if (context_group_->gpu_preferences().use_passthrough_cmd_decoder) { + if (context_group_->use_passthrough_cmd_decoder()) { // When using the passthrough command decoder, only share with other // contexts in the explicitly requested share group if (share_command_buffer_stub) { @@ -745,8 +746,7 @@ if (!context.get()) { context = gl::init::CreateGLContext( share_group_.get(), surface_.get(), - GenerateGLContextAttribs(init_params.attribs, - context_group_->gpu_preferences())); + GenerateGLContextAttribs(init_params.attribs, context_group_.get())); if (!context.get()) { DLOG(ERROR) << "Failed to create shared context for virtualization."; return false; @@ -768,10 +768,9 @@ gl::GetGLImplementation() == gl::kGLImplementationStubGL); context = new GLContextVirtual(share_group_.get(), context.get(), decoder_->AsWeakPtr()); - if (!context->Initialize( - surface_.get(), - GenerateGLContextAttribs(init_params.attribs, - context_group_->gpu_preferences()))) { + if (!context->Initialize(surface_.get(), + GenerateGLContextAttribs(init_params.attribs, + context_group_.get()))) { // The real context created above for the default offscreen surface // might not be compatible with this surface. context = NULL; @@ -781,8 +780,7 @@ } else { context = gl::init::CreateGLContext( share_group_.get(), surface_.get(), - GenerateGLContextAttribs(init_params.attribs, - context_group_->gpu_preferences())); + GenerateGLContextAttribs(init_params.attribs, context_group_.get())); if (!context.get()) { DLOG(ERROR) << "Failed to create context."; return false;
diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc index 654bc389..e9909a96 100644 --- a/gpu/ipc/service/gpu_init.cc +++ b/gpu/ipc/service/gpu_init.cc
@@ -12,6 +12,7 @@ #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "gpu/command_buffer/service/gpu_switches.h" +#include "gpu/command_buffer/service/service_utils.h" #include "gpu/config/gpu_driver_bug_list.h" #include "gpu/config/gpu_info_collector.h" #include "gpu/config/gpu_switches.h" @@ -36,77 +37,28 @@ namespace gpu { namespace { - -void GetGpuInfoFromCommandLine(gpu::GPUInfo& gpu_info, - const base::CommandLine& command_line) { - if (!command_line.HasSwitch(switches::kGpuVendorID) || - !command_line.HasSwitch(switches::kGpuDeviceID) || - !command_line.HasSwitch(switches::kGpuDriverVersion)) - return; - bool success = base::HexStringToUInt( - command_line.GetSwitchValueASCII(switches::kGpuVendorID), - &gpu_info.gpu.vendor_id); - DCHECK(success); - success = base::HexStringToUInt( - command_line.GetSwitchValueASCII(switches::kGpuDeviceID), - &gpu_info.gpu.device_id); - DCHECK(success); - gpu_info.driver_vendor = - command_line.GetSwitchValueASCII(switches::kGpuDriverVendor); - gpu_info.driver_version = - command_line.GetSwitchValueASCII(switches::kGpuDriverVersion); - gpu_info.driver_date = - command_line.GetSwitchValueASCII(switches::kGpuDriverDate); - gpu::ParseSecondaryGpuDevicesFromCommandLine(command_line, &gpu_info); - - // Set active gpu device. - if (command_line.HasSwitch(switches::kGpuActiveVendorID) && - command_line.HasSwitch(switches::kGpuActiveDeviceID)) { - uint32_t active_vendor_id = 0; - uint32_t active_device_id = 0; - success = base::HexStringToUInt( - command_line.GetSwitchValueASCII(switches::kGpuActiveVendorID), - &active_vendor_id); - DCHECK(success); - success = base::HexStringToUInt( - command_line.GetSwitchValueASCII(switches::kGpuActiveDeviceID), - &active_device_id); - DCHECK(success); - if (gpu_info.gpu.vendor_id == active_vendor_id && - gpu_info.gpu.device_id == active_device_id) { - gpu_info.gpu.active = true; - } else { - for (size_t i = 0; i < gpu_info.secondary_gpus.size(); ++i) { - if (gpu_info.secondary_gpus[i].vendor_id == active_vendor_id && - gpu_info.secondary_gpus[i].device_id == active_device_id) { - gpu_info.secondary_gpus[i].active = true; - break; - } - } - } - } -} - #if !defined(OS_MACOSX) -void CollectGraphicsInfo(gpu::GPUInfo& gpu_info) { +void CollectGraphicsInfo(GPUInfo* gpu_info) { + DCHECK(gpu_info); #if defined(OS_FUCHSIA) // TODO(crbug.com/707031): Implement this. NOTIMPLEMENTED(); return; #else TRACE_EVENT0("gpu,startup", "Collect Graphics Info"); - gpu::CollectInfoResult result = gpu::CollectContextGraphicsInfo(&gpu_info); + base::TimeTicks before_collect_context_graphics_info = base::TimeTicks::Now(); + CollectInfoResult result = CollectContextGraphicsInfo(gpu_info); switch (result) { - case gpu::kCollectInfoFatalFailure: + case kCollectInfoFatalFailure: LOG(ERROR) << "gpu::CollectGraphicsInfo failed (fatal)."; break; - case gpu::kCollectInfoNonFatalFailure: + case kCollectInfoNonFatalFailure: DVLOG(1) << "gpu::CollectGraphicsInfo failed (non-fatal)."; break; - case gpu::kCollectInfoNone: + case kCollectInfoNone: NOTREACHED(); break; - case gpu::kCollectInfoSuccess: + case kCollectInfoSuccess: break; } @@ -114,12 +66,18 @@ if (gl::GetGLImplementation() == gl::kGLImplementationEGLGLES2 && gl::GLSurfaceEGL::IsDirectCompositionSupported() && DirectCompositionSurfaceWin::AreOverlaysSupported()) { - gpu_info.supports_overlays = true; + gpu_info->supports_overlays = true; } if (DirectCompositionSurfaceWin::IsHDRSupported()) { - gpu_info.hdr = true; + gpu_info->hdr = true; } #endif // defined(OS_WIN) + + if (result != kCollectInfoFatalFailure) { + base::TimeDelta collect_context_time = + base::TimeTicks::Now() - before_collect_context_graphics_info; + UMA_HISTOGRAM_TIMES("GPU.CollectContextGraphicsInfo", collect_context_time); + } #endif // defined(OS_FUCHSIA) } #endif // defined(OS_MACOSX) @@ -144,13 +102,21 @@ gpu::StopForceDiscreteGPU(); } -bool GpuInit::InitializeAndStartSandbox(const base::CommandLine& command_line, +bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, bool in_process_gpu) { +#if defined(OS_ANDROID) + // Android doesn't have PCI vendor/device IDs, so collecting GL strings early + // is necessary. + CollectGraphicsInfo(&gpu_info_); + if (gpu_info_.context_info_state == gpu::kCollectInfoFatalFailure) + return false; +#else // Get vendor_id, device_id, driver_version from browser process through // commandline switches. // TODO(zmo): Collect basic GPU info (without a context) here instead of // passing from browser process. - GetGpuInfoFromCommandLine(gpu_info_, command_line); + GetGpuInfoFromCommandLine(*command_line, &gpu_info_); +#endif // OS_ANDROID #if defined(OS_LINUX) && !defined(OS_CHROMEOS) if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA gpu_info_.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile()) @@ -158,13 +124,10 @@ #endif gpu_info_.in_process_gpu = in_process_gpu; - gpu_info_.passthrough_cmd_decoder = - gl::UsePassthroughCommandDecoder(&command_line); - // Compute blacklist and driver bug workaround decisions based on basic GPU // info. - gpu_feature_info_ = gpu::GetGpuFeatureInfo(gpu_info_, command_line); - if (gpu::SwitchableGPUsSupported(gpu_info_, command_line)) { + gpu_feature_info_ = gpu::ComputeGpuFeatureInfo(gpu_info_, command_line); + if (gpu::SwitchableGPUsSupported(gpu_info_, *command_line)) { gpu::InitializeSwitchableGPUs( gpu_feature_info_.enabled_gpu_driver_bug_workarounds); } @@ -173,9 +136,8 @@ // present, disable the watchdog on valgrind because the code is expected // to run slowly in that case. bool enable_watchdog = - !command_line.HasSwitch(switches::kDisableGpuWatchdog) && - !command_line.HasSwitch(switches::kHeadless) && - !RunningOnValgrind(); + !command_line->HasSwitch(switches::kDisableGpuWatchdog) && + !command_line->HasSwitch(switches::kHeadless) && !RunningOnValgrind(); // Disable the watchdog in debug builds because they tend to only be run by // developers who will not appreciate the watchdog killing the GPU process. @@ -217,12 +179,11 @@ // On Chrome OS ARM Mali, GPU driver userspace creates threads when // initializing a GL context, so start the sandbox early. // TODO(zmo): Need to collect OS version before this. - if (command_line.HasSwitch(switches::kGpuSandboxStartEarly)) { + if (command_line->HasSwitch(switches::kGpuSandboxStartEarly)) { gpu_info_.sandboxed = sandbox_helper_->EnsureSandboxInitialized(watchdog_thread_.get()); attempted_startsandbox = true; } - #endif // defined(OS_LINUX) base::TimeTicks before_initialize_one_off = base::TimeTicks::Now(); @@ -253,17 +214,13 @@ // multiple seconds to finish, which in turn cause the GPU process to crash. // By skipping the following code on Mac, we don't really lose anything, // because the basic GPU information is passed down from the host process. - base::TimeTicks before_collect_context_graphics_info = base::TimeTicks::Now(); -#if !defined(OS_MACOSX) - CollectGraphicsInfo(gpu_info_); +#if !defined(OS_MACOSX) && !defined(OS_ANDROID) + CollectGraphicsInfo(&gpu_info_); if (gpu_info_.context_info_state == gpu::kCollectInfoFatalFailure) return false; -#endif // !defined(OS_MACOSX) - base::TimeDelta collect_context_time = - base::TimeTicks::Now() - before_collect_context_graphics_info; - UMA_HISTOGRAM_TIMES("GPU.CollectContextGraphicsInfo", collect_context_time); + gpu_feature_info_ = gpu::ComputeGpuFeatureInfo(gpu_info_, command_line); +#endif - gpu_feature_info_ = gpu::GetGpuFeatureInfo(gpu_info_, command_line); if (!gpu_feature_info_.disabled_extensions.empty()) { gl::init::SetDisabledExtensionsPlatform( gpu_feature_info_.disabled_extensions); @@ -296,6 +253,10 @@ UMA_HISTOGRAM_BOOLEAN("GPU.Sandbox.InitializedSuccessfully", gpu_info_.sandboxed); + gpu_info_.passthrough_cmd_decoder = + gl::UsePassthroughCommandDecoder(command_line) && + gles2::PassthroughCommandDecoderSupported(); + return true; }
diff --git a/gpu/ipc/service/gpu_init.h b/gpu/ipc/service/gpu_init.h index 5617bce..7b5a6a6 100644 --- a/gpu/ipc/service/gpu_init.h +++ b/gpu/ipc/service/gpu_init.h
@@ -36,7 +36,7 @@ sandbox_helper_ = helper; } - bool InitializeAndStartSandbox(const base::CommandLine& command_line, + bool InitializeAndStartSandbox(base::CommandLine* command_line, bool in_process_gpu); const GPUInfo& gpu_info() const { return gpu_info_; }
diff --git a/headless/lib/virtual_time_browsertest.cc b/headless/lib/virtual_time_browsertest.cc index 3da3d0f..b856a72 100644 --- a/headless/lib/virtual_time_browsertest.cc +++ b/headless/lib/virtual_time_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include <memory> +#include "base/strings/stringprintf.h" #include "content/public/test/browser_test.h" #include "headless/public/devtools/domains/emulation.h" #include "headless/public/devtools/domains/page.h" @@ -51,20 +52,26 @@ std::string message; if (args.size() == 1u && args[0]->HasValue() && args[0]->GetValue()->GetAsString(&message)) { - console_logs_.push_back(message); + log_.push_back(message); } } // emulation::Observer implementation: void OnVirtualTimeBudgetExpired( const emulation::VirtualTimeBudgetExpiredParams& params) override { - EXPECT_THAT(console_logs_, - ElementsAre("step1", "step2", "step3", "step4", "pass")); - + EXPECT_THAT(log_, + ElementsAre("Paused @ 0ms", "step1", "step2", "Paused @ 100ms", + "step3", "Paused @ 200ms", "step4", "pass")); FinishAsynchronousTest(); } - std::vector<std::string> console_logs_; + void OnVirtualTimePaused( + const emulation::VirtualTimePausedParams& params) override { + log_.push_back( + base::StringPrintf("Paused @ %dms", params.GetVirtualTimeElapsed())); + } + + std::vector<std::string> log_; }; HEADLESS_ASYNC_DEVTOOLED_TEST_F(VirtualTimeBrowserTest);
diff --git a/infra/config/cq.cfg b/infra/config/cq.cfg index 24605e9..9dcb739 100644 --- a/infra/config/cq.cfg +++ b/infra/config/cq.cfg
@@ -85,12 +85,32 @@ experiment_percentage: 10 } builders { name: "mac_chromium_compile_dbg_ng" } - builders { name: "mac_chromium_rel_ng" } + builders { + name: "mac_chromium_rel_ng" + equivalent_to { + # Builders in this bucket are defined in + # https://chromium.googlesource.com/chromium/src/+/infra/config/cr-buildbucket.cfg + bucket: "luci.chromium.try" + builder: "LUCI mac_chromium_rel_ng" + owner_whitelist_group: "luci-chromium-cq-dogfood" + percentage: 100 + } + } } buckets { name: "master.tryserver.chromium.win" builders { name: "win_chromium_compile_dbg_ng" } - builders { name: "win_chromium_rel_ng" } + builders { + name: "win_chromium_rel_ng" + equivalent_to { + # Builders in this bucket are defined in + # https://chromium.googlesource.com/chromium/src/+/infra/config/cr-buildbucket.cfg + bucket: "luci.chromium.try" + builder: "LUCI win_chromium_rel_ng" + owner_whitelist_group: "luci-chromium-cq-dogfood" + percentage: 100 + } + } # crbug.com/753184 - take out of the CQ temporarily. # builders { name: "win_chromium_x64_rel_ng" } builders { name: "win_clang" }
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index 8ac86d9..441cb89 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -421,8 +421,6 @@ - (void)finishDismissingStackView; // Sets up self.currentBVC for testing by closing existing tabs. - (void)setUpCurrentBVCForTesting; -// Opens an url. -- (void)openUrl:(OpenUrlCommand*)command; // Opens an url from a link in the settings UI. - (void)openUrlFromSettings:(OpenUrlCommand*)command; // Switch all global states for the given mode (normal or incognito). @@ -1276,8 +1274,7 @@ - (void)crashIfRequested { if (experimental_flags::IsStartupCrashEnabled()) { - // Flush out the value cached for - // ios_internal::breakpad::SetUploadingEnabled(). + // Flush out the value cached for breakpad::SetUploadingEnabled(). [[NSUserDefaults standardUserDefaults] synchronize]; int* x = NULL; @@ -1459,15 +1456,29 @@ completion:nil]; } +- (void)openURL:(OpenUrlCommand*)command { + if ([command fromChrome]) { + [self dismissModalsAndOpenSelectedTabInMode:ApplicationMode::NORMAL + withURL:[command url] + transition:ui::PAGE_TRANSITION_TYPED + completion:nil]; + } else { + [self dismissModalDialogsWithCompletion:^{ + self.currentBVC = [command inIncognito] ? self.otrBVC : self.mainBVC; + [self.currentBVC webPageOrderedOpen:[command url] + referrer:[command referrer] + inBackground:[command inBackground] + appendTo:[command appendTo]]; + }]; + } +} + #pragma mark - chromeExecuteCommand - (IBAction)chromeExecuteCommand:(id)sender { NSInteger command = [sender tag]; switch (command) { - case IDC_OPEN_URL: - [self openUrl:base::mac::ObjCCast<OpenUrlCommand>(sender)]; - break; case IDC_SHOW_SIGNIN_IOS: { ShowSigninCommand* command = base::mac::ObjCCastStrict<ShowSigninCommand>(sender); @@ -1528,23 +1539,6 @@ #pragma mark - chromeExecuteCommand helpers -- (void)openUrl:(OpenUrlCommand*)command { - if ([command fromChrome]) { - [self dismissModalsAndOpenSelectedTabInMode:ApplicationMode::NORMAL - withURL:[command url] - transition:ui::PAGE_TRANSITION_TYPED - completion:nil]; - } else { - [self dismissModalDialogsWithCompletion:^{ - self.currentBVC = [command inIncognito] ? self.otrBVC : self.mainBVC; - [self.currentBVC webPageOrderedOpen:[command url] - referrer:[command referrer] - inBackground:[command inBackground] - appendTo:[command appendTo]]; - }]; - } -} - - (void)openUrlFromSettings:(OpenUrlCommand*)command { DCHECK([command fromChrome]); ProceduralBlock completion = ^{
diff --git a/ios/chrome/app/safe_mode/safe_mode_view_controller.mm b/ios/chrome/app/safe_mode/safe_mode_view_controller.mm index a69e21a..d804206 100644 --- a/ios/chrome/app/safe_mode/safe_mode_view_controller.mm +++ b/ios/chrome/app/safe_mode/safe_mode_view_controller.mm
@@ -288,10 +288,9 @@ NSTimeInterval elapsed = [[NSDate date] timeIntervalSinceDate:uploadStartTime_]; // Theoretically we could stop early when the value returned by - // ios_internal::breakpad::GetCrashReportCount() changes, but this is - // simpler. If we decide to look for a change in crash report count, then we - // also probably want to replace the UIProgressView with a - // UIActivityIndicatorView. + // breakpad::GetCrashReportCount() changes, but this is simpler. If we decide + // to look for a change in crash report count, then we also probably want to + // replace the UIProgressView with a UIActivityIndicatorView. if (elapsed <= kUploadTotalTime) { [uploadProgress_ setProgress:elapsed / kUploadTotalTime animated:YES]; } else {
diff --git a/ios/chrome/browser/about_flags.mm b/ios/chrome/browser/about_flags.mm index df9416b..b746963c 100644 --- a/ios/chrome/browser/about_flags.mm +++ b/ios/chrome/browser/about_flags.mm
@@ -127,10 +127,6 @@ flag_descriptions::kContextualSearchDescription, flags_ui::kOsIos, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableContextualSearch, switches::kDisableContextualSearch)}, - {"ios-physical-web", flag_descriptions::kPhysicalWeb, - flag_descriptions::kPhysicalWebDescription, flags_ui::kOsIos, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnableIOSPhysicalWeb, - switches::kDisableIOSPhysicalWeb)}, {"browser-task-scheduler", flag_descriptions::kBrowserTaskScheduler, flag_descriptions::kBrowserTaskSchedulerDescription, flags_ui::kOsIos, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableBrowserTaskScheduler, @@ -195,15 +191,6 @@ void AppendSwitchesFromExperimentalSettings(base::CommandLine* command_line) { NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; - // Populate command line flags from PhysicalWebEnabled. - NSString* enablePhysicalWebValue = - [defaults stringForKey:@"PhysicalWebEnabled"]; - if ([enablePhysicalWebValue isEqualToString:@"Enabled"]) { - command_line->AppendSwitch(switches::kEnableIOSPhysicalWeb); - } else if ([enablePhysicalWebValue isEqualToString:@"Disabled"]) { - command_line->AppendSwitch(switches::kDisableIOSPhysicalWeb); - } - // Web page replay flags. BOOL webPageReplayEnabled = [defaults boolForKey:@"WebPageReplayEnabled"]; NSString* webPageReplayProxy =
diff --git a/ios/chrome/browser/chrome_switches.cc b/ios/chrome/browser/chrome_switches.cc index 0f76489..499dd11 100644 --- a/ios/chrome/browser/chrome_switches.cc +++ b/ios/chrome/browser/chrome_switches.cc
@@ -24,9 +24,6 @@ const char kDisableIOSPasswordSuggestions[] = "disable-ios-password-suggestions"; -// Disables Physical Web scanning for nearby URLs. -const char kDisableIOSPhysicalWeb[] = "disable-ios-physical-web"; - // Disables the Suggestions UI const char kDisableSuggestionsUI[] = "disable-suggestions-ui"; @@ -52,9 +49,6 @@ // Enables the Spotlight actions. const char kEnableSpotlightActions[] = "enable-spotlight-actions"; -// Enables Physical Web scanning for nearby URLs. -const char kEnableIOSPhysicalWeb[] = "enable-ios-physical-web"; - // Enables the Suggestions UI const char kEnableSuggestionsUI[] = "enable-suggestions-ui";
diff --git a/ios/chrome/browser/chrome_switches.h b/ios/chrome/browser/chrome_switches.h index 165cbc09..8e9f403 100644 --- a/ios/chrome/browser/chrome_switches.h +++ b/ios/chrome/browser/chrome_switches.h
@@ -13,7 +13,6 @@ extern const char kDisableIOSFeatures[]; extern const char kDisableIOSPasswordSuggestions[]; extern const char kDisableNTPFavicons[]; -extern const char kDisableIOSPhysicalWeb[]; extern const char kDisableSuggestionsUI[]; extern const char kDisableSlimNavigationManager[]; extern const char kDisableThirdPartyKeyboardWorkaround[]; @@ -23,7 +22,6 @@ extern const char kEnableIOSHandoffToOtherDevices[]; extern const char kEnableNTPFavicons[]; extern const char kEnableSpotlightActions[]; -extern const char kEnableIOSPhysicalWeb[]; extern const char kEnableSuggestionsUI[]; extern const char kEnableSlimNavigationManager[]; extern const char kEnableThirdPartyKeyboardWorkaround[];
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm index 2073976..ff36172a 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_coordinator.mm
@@ -223,8 +223,18 @@ web::NavigationManager* navigationManager = webState->GetNavigationManager(); web::NavigationItem* item = navigationManager->GetVisibleItem(); if (item && item->GetPageDisplayState().scroll_state().offset_y() > 0) { - self.suggestionsViewController.collectionView.contentOffset = - CGPointMake(0, item->GetPageDisplayState().scroll_state().offset_y()); + CGFloat offset = item->GetPageDisplayState().scroll_state().offset_y(); + UICollectionView* collection = + self.suggestionsViewController.collectionView; + // Don't set the offset such as the content of the collection is smaller + // than the part of the collection which should be displayed with that + // offset, taking into account the size of the toolbar. + offset = MAX(0, MIN(offset, collection.contentSize.height - + collection.bounds.size.height - + ntp_header::kToolbarHeight)); + collection.contentOffset = CGPointMake(0, offset); + // Update the constraints in case the omnibox needs to be moved. + [self.suggestionsViewController updateConstraints]; } } @@ -315,6 +325,7 @@ [self.alertCoordinator start]; } +// TODO(crbug.com/761096) : Promo handling should be DRY and tested. - (void)handlePromoTapped { NotificationPromoWhatsNew* notificationPromo = [self.contentSuggestionsMediator notificationPromo]; @@ -332,9 +343,14 @@ } if (notificationPromo->IsChromeCommand()) { - GenericChromeCommand* command = [[GenericChromeCommand alloc] - initWithTag:notificationPromo->command_id()]; - [self.suggestionsViewController chromeExecuteCommand:command]; + int command_id = notificationPromo->command_id(); + if (command_id == IDC_RATE_THIS_APP) { + [self.dispatcher performSelector:@selector(showRateThisAppDialog)]; + } else { + GenericChromeCommand* command = [[GenericChromeCommand alloc] + initWithTag:notificationPromo->command_id()]; + [self.suggestionsViewController chromeExecuteCommand:command]; + } return; } NOTREACHED();
diff --git a/ios/chrome/browser/content_suggestions/mediator_util.mm b/ios/chrome/browser/content_suggestions/mediator_util.mm index 2072de8..9c973f7 100644 --- a/ios/chrome/browser/content_suggestions/mediator_util.mm +++ b/ios/chrome/browser/content_suggestions/mediator_util.mm
@@ -167,5 +167,8 @@ case ntp_snippets::StatusCode::PERMANENT_ERROR: return content_suggestions::StatusCodePermanentError; break; + case ntp_snippets::StatusCode::STATUS_CODE_COUNT: + NOTREACHED(); + return content_suggestions::StatusCodeError; } }
diff --git a/ios/chrome/browser/crash_report/crash_report_helper.h b/ios/chrome/browser/crash_report/crash_report_helper.h index 274daba..961be8e 100644 --- a/ios/chrome/browser/crash_report/crash_report_helper.h +++ b/ios/chrome/browser/crash_report/crash_report_helper.h
@@ -8,7 +8,6 @@ @class NSString; @class TabModel; -namespace ios_internal { namespace breakpad { // Monitors the urls loaded in |tab_model| to allow crash reports to contain @@ -32,6 +31,5 @@ void ClearStateForTabModel(TabModel* tab_model); } // namespace breakpad -} // namespace ios_internal #endif // IOS_CHROME_BROWSER_CRASH_REPORT_CRASH_REPORT_HELPER_H_
diff --git a/ios/chrome/browser/crash_report/crash_report_helper.mm b/ios/chrome/browser/crash_report/crash_report_helper.mm index 8272205..df61b07 100644 --- a/ios/chrome/browser/crash_report/crash_report_helper.mm +++ b/ios/chrome/browser/crash_report/crash_report_helper.mm
@@ -325,7 +325,6 @@ @end -namespace ios_internal { namespace breakpad { void MonitorURLsForTabModel(TabModel* tab_model) { @@ -354,4 +353,3 @@ } } // namespace breakpad -} // namespace ios_internal
diff --git a/ios/chrome/browser/experimental_flags.mm b/ios/chrome/browser/experimental_flags.mm index 4ddf9d2..116f40f 100644 --- a/ios/chrome/browser/experimental_flags.mm +++ b/ios/chrome/browser/experimental_flags.mm
@@ -128,18 +128,9 @@ } bool IsPhysicalWebEnabled() { - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(switches::kEnableIOSPhysicalWeb)) { - return true; - } else if (command_line->HasSwitch(switches::kDisableIOSPhysicalWeb)) { - return false; - } - - // Check if the finch experiment is turned on - std::string group_name = - base::FieldTrialList::FindFullName("PhysicalWebEnabled"); - return base::StartsWith(group_name, "Enabled", - base::CompareCase::INSENSITIVE_ASCII); + // TODO(crbug.com/760104): Remove this function and its associated code. + // Either by replacing it with a base::Feature or by removing all its uses. + return false; } bool IsSafariVCSignInEnabled() {
diff --git a/ios/chrome/browser/metrics/size_class_recorder.mm b/ios/chrome/browser/metrics/size_class_recorder.mm index fa94ae2..70763f3f 100644 --- a/ios/chrome/browser/metrics/size_class_recorder.mm +++ b/ios/chrome/browser/metrics/size_class_recorder.mm
@@ -13,8 +13,6 @@ #error "This file requires ARC support." #endif -namespace ios_internal { - // Converts a UIKit size class to a size class for reporting. SizeClassForReporting SizeClassForReportingForUIUserInterfaceSizeClass( UIUserInterfaceSizeClass sizeClass) { @@ -28,11 +26,6 @@ } } -} // namespace ios_internal - -using ios_internal::SizeClassForReporting; -using ios_internal::SizeClassForReportingForUIUserInterfaceSizeClass; - namespace { // Reports the currently used horizontal size class.
diff --git a/ios/chrome/browser/metrics/size_class_recorder_private.h b/ios/chrome/browser/metrics/size_class_recorder_private.h index d9ef5ff..b1bdd13 100644 --- a/ios/chrome/browser/metrics/size_class_recorder_private.h +++ b/ios/chrome/browser/metrics/size_class_recorder_private.h
@@ -5,10 +5,8 @@ #ifndef IOS_CHROME_BROWSER_METRICS_SIZE_CLASS_RECORDER_PRIVATE_H_ #define IOS_CHROME_BROWSER_METRICS_SIZE_CLASS_RECORDER_PRIVATE_H_ -namespace ios_internal { - // Reported size classes. -enum SizeClassForReporting { +enum class SizeClassForReporting { UNSPECIFIED = 0, COMPACT, REGULAR, @@ -17,9 +15,7 @@ }; // Converts a UIKit size class to a size class for reporting. -extern SizeClassForReporting SizeClassForReportingForUIUserInterfaceSizeClass( +SizeClassForReporting SizeClassForReportingForUIUserInterfaceSizeClass( UIUserInterfaceSizeClass sizeClass); -} // namespace ios_internal - #endif // IOS_CHROME_BROWSER_METRICS_SIZE_CLASS_RECORDER_PRIVATE_H_
diff --git a/ios/chrome/browser/metrics/size_class_recorder_unittest.mm b/ios/chrome/browser/metrics/size_class_recorder_unittest.mm index 2709ad2f..d4997d9 100644 --- a/ios/chrome/browser/metrics/size_class_recorder_unittest.mm +++ b/ios/chrome/browser/metrics/size_class_recorder_unittest.mm
@@ -16,9 +16,6 @@ #error "This file requires ARC support." #endif -using ios_internal::SizeClassForReporting; -using ios_internal::SizeClassForReportingForUIUserInterfaceSizeClass; - namespace { const char kSizeClassUsedHistogramName[] = "Tab.HorizontalSizeClassUsed"; @@ -87,8 +84,9 @@ postNotificationName:UIApplicationDidBecomeActiveNotification object:nil]; - histogram_tester_->ExpectUniqueSample(kSizeClassUsedHistogramName, - SizeClassForReporting::COMPACT, 1); + histogram_tester_->ExpectUniqueSample( + kSizeClassUsedHistogramName, + static_cast<int>(SizeClassForReporting::COMPACT), 1); histogram_tester_->ExpectTotalCount(kPageLoadSizeClassHistogramName, 0); } @@ -107,8 +105,9 @@ postNotificationName:UIApplicationDidBecomeActiveNotification object:nil]; - histogram_tester_->ExpectUniqueSample(kSizeClassUsedHistogramName, - SizeClassForReporting::COMPACT, 1); + histogram_tester_->ExpectUniqueSample( + kSizeClassUsedHistogramName, + static_cast<int>(SizeClassForReporting::COMPACT), 1); histogram_tester_->ExpectTotalCount(kPageLoadSizeClassHistogramName, 0); } @@ -121,8 +120,9 @@ initWithHorizontalSizeClass:UIUserInterfaceSizeClassUnspecified]; [recorder_ horizontalSizeClassDidChange:UIUserInterfaceSizeClassRegular]; - histogram_tester_->ExpectUniqueSample(kSizeClassUsedHistogramName, - SizeClassForReporting::REGULAR, 1); + histogram_tester_->ExpectUniqueSample( + kSizeClassUsedHistogramName, + static_cast<int>(SizeClassForReporting::REGULAR), 1); histogram_tester_->ExpectTotalCount(kPageLoadSizeClassHistogramName, 0); } @@ -158,8 +158,9 @@ object:nil]; [recorder_ horizontalSizeClassDidChange:UIUserInterfaceSizeClassCompact]; - histogram_tester_->ExpectUniqueSample(kSizeClassUsedHistogramName, - SizeClassForReporting::COMPACT, 1); + histogram_tester_->ExpectUniqueSample( + kSizeClassUsedHistogramName, + static_cast<int>(SizeClassForReporting::COMPACT), 1); histogram_tester_->ExpectTotalCount(kPageLoadSizeClassHistogramName, 0); } @@ -174,8 +175,9 @@ pageLoadedWithHorizontalSizeClass:UIUserInterfaceSizeClassUnspecified]; histogram_tester_->ExpectTotalCount(kSizeClassUsedHistogramName, 0); - histogram_tester_->ExpectUniqueSample(kPageLoadSizeClassHistogramName, - SizeClassForReporting::UNSPECIFIED, 1); + histogram_tester_->ExpectUniqueSample( + kPageLoadSizeClassHistogramName, + static_cast<int>(SizeClassForReporting::UNSPECIFIED), 1); } TEST_F(SizeClassRecorderTest, RecordSizeClassOnPageLoaded_Compact) { @@ -188,8 +190,9 @@ [recorder_ pageLoadedWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; histogram_tester_->ExpectTotalCount(kSizeClassUsedHistogramName, 0); - histogram_tester_->ExpectUniqueSample(kPageLoadSizeClassHistogramName, - SizeClassForReporting::COMPACT, 1); + histogram_tester_->ExpectUniqueSample( + kPageLoadSizeClassHistogramName, + static_cast<int>(SizeClassForReporting::COMPACT), 1); } TEST_F(SizeClassRecorderTest, RecordSizeClassOnPageLoaded_Regular) { @@ -202,8 +205,9 @@ [recorder_ pageLoadedWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular]; histogram_tester_->ExpectTotalCount(kSizeClassUsedHistogramName, 0); - histogram_tester_->ExpectUniqueSample(kPageLoadSizeClassHistogramName, - SizeClassForReporting::REGULAR, 1); + histogram_tester_->ExpectUniqueSample( + kPageLoadSizeClassHistogramName, + static_cast<int>(SizeClassForReporting::REGULAR), 1); } } // namespace
diff --git a/ios/chrome/browser/metrics/tab_usage_recorder.h b/ios/chrome/browser/metrics/tab_usage_recorder.h index 1806bf0..458658de 100644 --- a/ios/chrome/browser/metrics/tab_usage_recorder.h +++ b/ios/chrome/browser/metrics/tab_usage_recorder.h
@@ -7,6 +7,7 @@ #include <deque> #include <map> +#include <memory> #include <vector> #include "base/ios/weak_nsobject.h" @@ -65,6 +66,10 @@ // kills renderers in batches. extern const char kRendererTerminationRecentlyAliveRenderers[]; +// Name of histogram for recording the state of the tab when the renderer is +// terminated. +extern const char kRendererTerminationStateHistogram[]; + // The recently alive renderer count metric counts all renderers that were alive // x seconds before a renderer termination. |kSecondsBeforeRendererTermination| // specifies x. @@ -102,6 +107,18 @@ USER_BEHAVIOR_COUNT, }; + // Enum corresponding to UMA's TabForegroundState, for + // Tab.StateAtRendererTermination. Must be kept in sync with the UMA enum. + enum RendererTerminationTabState { + // These two values are for when the app is in the foreground. + FOREGROUND_TAB_FOREGROUND_APP = 0, + BACKGROUND_TAB_FOREGROUND_APP, + // These are for when the app is in the background or inactive. + FOREGROUND_TAB_BACKGROUND_APP, + BACKGROUND_TAB_BACKGROUND_APP, + TERMINATION_TAB_STATE_COUNT + }; + // Initializes the TabUsageRecorder to watch |web_state_list|. TabUsageRecorder(WebStateList* web_state_list, PrerenderService* prerender_service); @@ -134,10 +151,13 @@ // Called when there is a user-initiated reload. void RecordReload(web::WebState* tab); - // Called when WKWebView's renderer is terminated. |web_state| contains the - // tab whose renderer was terminated, and |visible| indicates whether or not - // the tab was visible when the renderer terminated. - void RendererTerminated(web::WebState* tab, bool visible); + // Called when WKWebView's renderer is terminated. |tab| contains the tab + // whose renderer was terminated, |tab_visible| indicates whether or not + // the tab was visible when the renderer terminated and |application_active| + // indicates whether the application was in the foreground or background. + void RendererTerminated(web::WebState* tab, + bool tab_visible, + bool application_active); // Called when the app has been backgrounded. void AppDidEnterBackground(); @@ -159,6 +179,11 @@ // to depends on injecting values in |termination_timestamps_|. friend class TabUsageRecorderTest; + // Sub-class of web::WebStateObserver to allow track events from multiple + // web::WebState (needs to be forward-declared here because the destructor + // of web::WebStateObserver is protected). + class WebStateObserver; + // Clear out all state regarding a current evicted tab. void ResetEvictedTab(); @@ -178,6 +203,10 @@ // Returns the number of WebState that are still alive (in-memory). int GetLiveTabsCount() const; + // Called after a WebState is added to the WebStateList; will create the + // observer used to track the WebState's events. + void OnWebStateInserted(web::WebState* web_state); + // Called before one of the tracked WebState is destroyed. The WebState is // still valid but will become invalid afterwards, so any reference to it // should be removed. @@ -235,6 +264,10 @@ // Keep track of the tabs that have a known eviction cause. std::map<web::WebState*, TabStateWhenSelected> evicted_tabs_; + // Maps WebStates to the WebStateObserver used to track its events. + std::map<web::WebState*, std::unique_ptr<WebStateObserver>> + web_state_observers_; + // The WebStateList containing all the monitored tabs. WebStateList* web_state_list_; // weak
diff --git a/ios/chrome/browser/metrics/tab_usage_recorder.mm b/ios/chrome/browser/metrics/tab_usage_recorder.mm index 621a5aa..088de329 100644 --- a/ios/chrome/browser/metrics/tab_usage_recorder.mm +++ b/ios/chrome/browser/metrics/tab_usage_recorder.mm
@@ -11,7 +11,10 @@ #import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/web/public/navigation_item.h" #import "ios/web/public/navigation_manager.h" +#import "ios/web/public/web_state/navigation_context.h" #import "ios/web/public/web_state/web_state.h" +#import "ios/web/public/web_state/web_state_observer.h" +#include "ui/base/page_transition_types.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -58,11 +61,76 @@ const char kRendererTerminationRecentlyAliveRenderers[] = "Tab.RendererTermination.RecentlyAliveRenderersCount"; +// Name of histogram for recording the state of the tab when the renderer is +// terminated. +const char kRendererTerminationStateHistogram[] = + "Tab.StateAtRendererTermination"; + // The recently alive renderer count metric counts all renderers that were alive // x seconds before a renderer termination. |kSecondsBeforeRendererTermination| // specifies x. const int kSecondsBeforeRendererTermination = 2; +class TabUsageRecorder::WebStateObserver : public web::WebStateObserver { + public: + WebStateObserver(web::WebState* web_state, + TabUsageRecorder* tab_usage_recorder); + ~WebStateObserver() override; + + private: + // web::WebStateObserver implementation. + void WasShown() override; + void WasHidden() override; + void DidStartNavigation(web::NavigationContext* navigation_context) override; + void PageLoaded( + web::PageLoadCompletionStatus load_completion_status) override; + void RenderProcessGone() override; + + TabUsageRecorder* tab_usage_recorder_; + bool web_state_visible_ = false; + + DISALLOW_COPY_AND_ASSIGN(WebStateObserver); +}; + +TabUsageRecorder::WebStateObserver::WebStateObserver( + web::WebState* web_state, + TabUsageRecorder* tab_usage_recorder) + : web::WebStateObserver(web_state), + tab_usage_recorder_(tab_usage_recorder) { + DCHECK(tab_usage_recorder_); +} + +TabUsageRecorder::WebStateObserver::~WebStateObserver() = default; + +void TabUsageRecorder::WebStateObserver::WasShown() { + web_state_visible_ = true; +} + +void TabUsageRecorder::WebStateObserver::WasHidden() { + web_state_visible_ = false; +} + +void TabUsageRecorder::WebStateObserver::DidStartNavigation( + web::NavigationContext* navigation_context) { + if (PageTransitionCoreTypeIs(navigation_context->GetPageTransition(), + ui::PAGE_TRANSITION_RELOAD)) { + tab_usage_recorder_->RecordReload(web_state()); + } +} + +void TabUsageRecorder::WebStateObserver::PageLoaded( + web::PageLoadCompletionStatus load_completion_status) { + tab_usage_recorder_->RecordPageLoadDone( + web_state(), + load_completion_status == web::PageLoadCompletionStatus::SUCCESS); +} + +void TabUsageRecorder::WebStateObserver::RenderProcessGone() { + tab_usage_recorder_->RendererTerminated( + web_state(), web_state_visible_, + [UIApplication sharedApplication].applicationState); +} + TabUsageRecorder::TabUsageRecorder(WebStateList* web_state_list, PrerenderService* prerender_service) : restore_start_time_(base::TimeTicks::Now()), @@ -253,8 +321,20 @@ } void TabUsageRecorder::RendererTerminated(web::WebState* terminated_tab, - bool visible) { - if (!visible) { + bool tab_visible, + bool application_active) { + // Log the tab state for the termination. + const RendererTerminationTabState tab_state = + application_active ? (tab_visible ? FOREGROUND_TAB_FOREGROUND_APP + : BACKGROUND_TAB_FOREGROUND_APP) + : (tab_visible ? FOREGROUND_TAB_BACKGROUND_APP + : BACKGROUND_TAB_BACKGROUND_APP); + + UMA_HISTOGRAM_ENUMERATION(kRendererTerminationStateHistogram, + static_cast<int>(tab_state), + static_cast<int>(TERMINATION_TAB_STATE_COUNT)); + + if (!tab_visible) { DCHECK(!TabAlreadyEvicted(terminated_tab)); evicted_tabs_[terminated_tab] = EVICTED_DUE_TO_RENDERER_TERMINATION; } @@ -379,6 +459,13 @@ return count; } +void TabUsageRecorder::OnWebStateInserted(web::WebState* web_state) { + DCHECK(web_state_observers_.find(web_state) == web_state_observers_.end()); + web_state_observers_.insert(std::make_pair( + web_state, + std::make_unique<TabUsageRecorder::WebStateObserver>(web_state, this))); +} + void TabUsageRecorder::OnWebStateDestroyed(web::WebState* web_state) { if (web_state == tab_created_selected_) tab_created_selected_ = nullptr; @@ -389,19 +476,23 @@ if (web_state == mode_switch_tab_) mode_switch_tab_ = nullptr; - auto iter = evicted_tabs_.find(web_state); - if (iter != evicted_tabs_.end()) - evicted_tabs_.erase(iter); + auto evicted_tabs_iter = evicted_tabs_.find(web_state); + if (evicted_tabs_iter != evicted_tabs_.end()) + evicted_tabs_.erase(evicted_tabs_iter); + + auto web_state_observers_iter = web_state_observers_.find(web_state); + if (web_state_observers_iter != web_state_observers_.end()) + web_state_observers_.erase(web_state_observers_iter); } void TabUsageRecorder::WebStateInsertedAt(WebStateList* web_state_list, web::WebState* web_state, int index, bool activating) { - if (!activating) - return; + if (activating) + tab_created_selected_ = web_state; - tab_created_selected_ = web_state; + OnWebStateInserted(web_state); } void TabUsageRecorder::WebStateReplacedAt(WebStateList* web_state_list, @@ -409,6 +500,7 @@ web::WebState* new_web_state, int index) { OnWebStateDestroyed(old_web_state); + OnWebStateInserted(new_web_state); } void TabUsageRecorder::WebStateDetachedAt(WebStateList* web_state_list, @@ -422,8 +514,6 @@ web::WebState* new_web_state, int active_index, bool user_action) { - if (!user_action) - return; - - RecordTabSwitched(old_web_state, new_web_state); + if (user_action) + RecordTabSwitched(old_web_state, new_web_state); }
diff --git a/ios/chrome/browser/metrics/tab_usage_recorder_unittest.mm b/ios/chrome/browser/metrics/tab_usage_recorder_unittest.mm index c7d8768c..b7c4aebe 100644 --- a/ios/chrome/browser/metrics/tab_usage_recorder_unittest.mm +++ b/ios/chrome/browser/metrics/tab_usage_recorder_unittest.mm
@@ -282,7 +282,7 @@ now - base::TimeDelta::FromSeconds(kSecondsBeforeRendererTermination / 2); AddTimeToDequeInTabUsageRecorder(recent_time); - tab_usage_recorder_.RendererTerminated(mock_tab_a, false); + tab_usage_recorder_.RendererTerminated(mock_tab_a, false, true); NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; BOOL saw_memory_warning = @@ -306,10 +306,44 @@ web::WebState* mock_tab_a = InsertTestWebState(kURL, true); web::WebState* mock_tab_b = InsertTestWebState(kURL, false); - tab_usage_recorder_.RendererTerminated(mock_tab_b, false); + tab_usage_recorder_.RendererTerminated(mock_tab_b, false, true); tab_usage_recorder_.RecordTabSwitched(mock_tab_a, mock_tab_b); histogram_tester_.ExpectUniqueSample( kSelectedTabHistogramName, TabUsageRecorder::EVICTED_DUE_TO_RENDERER_TERMINATION, 1); } + +// Verifies that Tab.StateAtRendererTermination metric is correctly reported +// when the application is in the foreground. +TEST_F(TabUsageRecorderTest, StateAtRendererTerminationForeground) { + web::WebState* mock_tab_a = InsertTestWebState(kURL, true); + web::WebState* mock_tab_b = InsertTestWebState(kURL, true); + + tab_usage_recorder_.RendererTerminated(mock_tab_a, true, true); + histogram_tester_.ExpectBucketCount( + kRendererTerminationStateHistogram, + TabUsageRecorder::FOREGROUND_TAB_FOREGROUND_APP, 1); + + tab_usage_recorder_.RendererTerminated(mock_tab_b, false, true); + histogram_tester_.ExpectBucketCount( + kRendererTerminationStateHistogram, + TabUsageRecorder::BACKGROUND_TAB_FOREGROUND_APP, 1); +} + +// Verifies that Tab.StateAtRendererTermination metric is correctly reported +// when the application is in the background. +TEST_F(TabUsageRecorderTest, StateAtRendererTerminationBackground) { + web::WebState* mock_tab_a = InsertTestWebState(kURL, true); + web::WebState* mock_tab_b = InsertTestWebState(kURL, true); + + tab_usage_recorder_.RendererTerminated(mock_tab_a, true, false); + histogram_tester_.ExpectBucketCount( + kRendererTerminationStateHistogram, + TabUsageRecorder::FOREGROUND_TAB_BACKGROUND_APP, 1); + + tab_usage_recorder_.RendererTerminated(mock_tab_b, false, false); + histogram_tester_.ExpectBucketCount( + kRendererTerminationStateHistogram, + TabUsageRecorder::BACKGROUND_TAB_BACKGROUND_APP, 1); +}
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h index c27caa03..63f6a94d 100644 --- a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h +++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h
@@ -71,6 +71,7 @@ void ForceSavePassword() override; autofill::AutofillDriver* GetAutofillDriver() override; bool IsMainFrame() const override; + void MatchingBlacklistedFormFound() override; private: id<PasswordManagerDriverDelegate> delegate_; // (weak)
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm index 76382480..16be379 100644 --- a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm +++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm
@@ -96,3 +96,7 @@ // On IOS only processing of password forms in main frame is implemented. return true; } + +void IOSChromePasswordManagerDriver::MatchingBlacklistedFormFound() { + NOTIMPLEMENTED(); +}
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.h index 7a0035ea..8f315b3f 100644 --- a/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.h +++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.h
@@ -11,6 +11,8 @@ #include "components/infobars/core/confirm_infobar_delegate.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" +@protocol ApplicationCommands; + namespace password_manager { class PasswordFormManager; } @@ -45,6 +47,10 @@ return infobar_response_; } + void set_dispatcher(id<ApplicationCommands> dispatcher) { + dispatcher_ = dispatcher; + } + private: // ConfirmInfoBarDelegate implementation. Type GetInfoBarType() const override; @@ -62,6 +68,9 @@ // Whether to show the password manager branded as Smart Lock. const bool is_smart_lock_branding_enabled_; + // Dispatcher for calling Application commands. + __weak id<ApplicationCommands> dispatcher_ = nil; + DISALLOW_COPY_AND_ASSIGN(IOSChromePasswordManagerInfoBarDelegate); }; #endif // IOS_CHROME_BROWSER_PASSWORDS_IOS_CHROME_PASSWORD_MANAGER_INFOBAR_DELEGATE_H_
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.mm index ecbb0ab..f88834a 100644 --- a/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.mm +++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.mm
@@ -10,7 +10,7 @@ #include "components/password_manager/core/browser/password_form_manager.h" #include "components/password_manager/core/browser/password_manager_constants.h" #include "components/strings/grit/components_strings.h" -#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" +#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/open_url_command.h" #include "ios/chrome/grit/ios_strings.h" #include "ios/chrome/grit/ios_theme_resources.h" @@ -58,7 +58,6 @@ inIncognito:NO inBackground:NO appendTo:kCurrentTab]; - UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow]; - [mainWindow chromeExecuteCommand:command]; + [dispatcher_ openURL:command]; return true; };
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h index 821581c..d3ed29a 100644 --- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h +++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
@@ -10,6 +10,8 @@ #include "base/macros.h" #include "ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.h" +@protocol ApplicationCommands; + namespace password_manager { class PasswordFormManager; } @@ -26,11 +28,13 @@ : public IOSChromePasswordManagerInfoBarDelegate { public: // Creates the infobar for |form_to_save| and adds it to |infobar_manager|. - // |is_smart_lock_enabled| controls the branding string. + // |is_smart_lock_enabled| controls the branding string. |dispatcher| is not + // retained. static void Create( bool is_smart_lock_branding_enabled, infobars::InfoBarManager* infobar_manager, - std::unique_ptr<password_manager::PasswordFormManager> form_to_save); + std::unique_ptr<password_manager::PasswordFormManager> form_to_save, + id<ApplicationCommands> dispatcher); ~IOSChromeSavePasswordInfoBarDelegate() override;
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm index e9838a9..41dc556 100644 --- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm +++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
@@ -26,10 +26,12 @@ void IOSChromeSavePasswordInfoBarDelegate::Create( bool is_smart_lock_branding_enabled, infobars::InfoBarManager* infobar_manager, - std::unique_ptr<PasswordFormManager> form_to_save) { + std::unique_ptr<PasswordFormManager> form_to_save, + id<ApplicationCommands> dispatcher) { DCHECK(infobar_manager); auto delegate = base::WrapUnique(new IOSChromeSavePasswordInfoBarDelegate( is_smart_lock_branding_enabled, std::move(form_to_save))); + delegate->set_dispatcher(dispatcher); infobar_manager->AddInfoBar( infobar_manager->CreateConfirmInfoBar(std::move(delegate))); }
diff --git a/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.h b/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.h index bf5e790..27c5d8f 100644 --- a/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.h +++ b/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.h
@@ -10,6 +10,8 @@ #include "base/macros.h" #include "ios/chrome/browser/passwords/ios_chrome_password_manager_infobar_delegate.h" +@protocol ApplicationCommands; + namespace password_manager { class PasswordFormManager; } @@ -23,11 +25,13 @@ : public IOSChromePasswordManagerInfoBarDelegate { public: // Creates the infobar for |form_to_save| and adds it to |infobar_manager|. - // |is_smart_lock_enabled| controls the branding string. + // |is_smart_lock_enabled| controls the branding string. |dispatcher| is not + // retained. static void Create( bool is_smart_lock_branding_enabled, infobars::InfoBarManager* infobar_manager, - std::unique_ptr<password_manager::PasswordFormManager> form_to_save); + std::unique_ptr<password_manager::PasswordFormManager> form_to_save, + id<ApplicationCommands> dispatcher); ~IOSChromeUpdatePasswordInfoBarDelegate() override;
diff --git a/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm index e015593..86f6ec8 100644 --- a/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm +++ b/ios/chrome/browser/passwords/ios_chrome_update_password_infobar_delegate.mm
@@ -30,10 +30,12 @@ void IOSChromeUpdatePasswordInfoBarDelegate::Create( bool is_smart_lock_branding_enabled, infobars::InfoBarManager* infobar_manager, - std::unique_ptr<PasswordFormManager> form_manager) { + std::unique_ptr<PasswordFormManager> form_manager, + id<ApplicationCommands> dispatcher) { DCHECK(infobar_manager); auto delegate = base::WrapUnique(new IOSChromeUpdatePasswordInfoBarDelegate( is_smart_lock_branding_enabled, std::move(form_manager))); + delegate->set_dispatcher(dispatcher); std::unique_ptr<InfoBarIOS> infobar(new InfoBarIOS(std::move(delegate))); UpdatePasswordInfoBarController* controller = [[UpdatePasswordInfoBarController alloc] initWithDelegate:infobar.get()];
diff --git a/ios/chrome/browser/passwords/password_controller.mm b/ios/chrome/browser/passwords/password_controller.mm index 11a9e83..81a9b56 100644 --- a/ios/chrome/browser/passwords/password_controller.mm +++ b/ios/chrome/browser/passwords/password_controller.mm
@@ -901,12 +901,14 @@ switch (type) { case PasswordInfoBarType::SAVE: IOSChromeSavePasswordInfoBarDelegate::Create( - isSmartLockBrandingEnabled, infoBarManager, std::move(form)); + isSmartLockBrandingEnabled, infoBarManager, std::move(form), + self.dispatcher); break; case PasswordInfoBarType::UPDATE: IOSChromeUpdatePasswordInfoBarDelegate::Create( - isSmartLockBrandingEnabled, infoBarManager, std::move(form)); + isSmartLockBrandingEnabled, infoBarManager, std::move(form), + self.dispatcher); break; } }
diff --git a/ios/chrome/browser/payments/ios_payment_instrument_finder_unittest.mm b/ios/chrome/browser/payments/ios_payment_instrument_finder_unittest.mm index f61a683..959027c 100644 --- a/ios/chrome/browser/payments/ios_payment_instrument_finder_unittest.mm +++ b/ios/chrome/browser/payments/ios_payment_instrument_finder_unittest.mm
@@ -16,7 +16,7 @@ namespace payments { -class TestIOSPaymentInstrumentFinder : public IOSPaymentInstrumentFinder { +class TestIOSPaymentInstrumentFinder final : public IOSPaymentInstrumentFinder { public: TestIOSPaymentInstrumentFinder( net::TestURLRequestContextGetter* context_getter)
diff --git a/ios/chrome/browser/payments/ios_payment_instrument_launcher.mm b/ios/chrome/browser/payments/ios_payment_instrument_launcher.mm index 54f4e50..061a50a 100644 --- a/ios/chrome/browser/payments/ios_payment_instrument_launcher.mm +++ b/ios/chrome/browser/payments/ios_payment_instrument_launcher.mm
@@ -100,9 +100,10 @@ SerializeCertificateChain( active_web_state->GetNavigationManager()->GetVisibleItem())); + DCHECK(payment_request->web_payment_request().details.total); params_to_payment_app->SetDictionary( kTotal, payment_request->web_payment_request() - .details.total.amount.ToDictionaryValue()); + .details.total->amount.ToDictionaryValue()); params_to_payment_app->SetList( kModifiers,
diff --git a/ios/chrome/browser/payments/ios_payment_instrument_launcher_unittest.mm b/ios/chrome/browser/payments/ios_payment_instrument_launcher_unittest.mm index c82f848b..239232f8 100644 --- a/ios/chrome/browser/payments/ios_payment_instrument_launcher_unittest.mm +++ b/ios/chrome/browser/payments/ios_payment_instrument_launcher_unittest.mm
@@ -16,6 +16,7 @@ #include "components/autofill/core/browser/test_personal_data_manager.h" #include "components/payments/core/payment_instrument.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" +#include "ios/chrome/browser/payments/payment_request_test_util.h" #include "ios/chrome/browser/payments/test_payment_request.h" #include "ios/web/public/payments/payment_request.h" #include "ios/web/public/test/fakes/test_navigation_manager.h" @@ -171,7 +172,8 @@ base::MakeUnique<web::TestNavigationManager>(); web_state_.SetNavigationManager(std::move(navigation_manager)); - web::PaymentRequest web_payment_request; + web::PaymentRequest web_payment_request = + payment_request_test_util::CreateTestWebPaymentRequest(); autofill::TestPersonalDataManager personal_data_manager; TestPaymentRequest payment_request(web_payment_request, chrome_browser_state_.get(), &web_state_,
diff --git a/ios/chrome/browser/payments/payment_request.h b/ios/chrome/browser/payments/payment_request.h index 02400d9..d3c4d83 100644 --- a/ios/chrome/browser/payments/payment_request.h +++ b/ios/chrome/browser/payments/payment_request.h
@@ -327,6 +327,9 @@ // instrument in the JourneyLogger. void RecordNumberOfSuggestionsShown(); + // Records the Contact Info that is requested, and the payment method types. + void RecordRequestedInformation(); + // The current state of the payment request. State state_;
diff --git a/ios/chrome/browser/payments/payment_request.mm b/ios/chrome/browser/payments/payment_request.mm index 30439c82..16f50a47 100644 --- a/ios/chrome/browser/payments/payment_request.mm +++ b/ios/chrome/browser/payments/payment_request.mm
@@ -5,6 +5,7 @@ #include "ios/chrome/browser/payments/payment_request.h" #include <algorithm> +#include <memory> #include "base/containers/adapters.h" #include "base/feature_list.h" @@ -128,6 +129,7 @@ } RecordNumberOfSuggestionsShown(); + RecordRequestedInformation(); } PaymentRequest::~PaymentRequest() {} @@ -199,7 +201,15 @@ } void PaymentRequest::UpdatePaymentDetails(const PaymentDetails& details) { + DCHECK(web_payment_request_.details.total); + std::unique_ptr<PaymentItem> old_total = + std::move(web_payment_request_.details.total); web_payment_request_.details = details; + // Restore the old total amount if the PaymentDetails passed to updateWith() + // is missing a total value. + if (!web_payment_request_.details.total) + web_payment_request_.details.total = std::move(old_total); + PopulateAvailableShippingOptions(); SetSelectedShippingOption(); } @@ -226,10 +236,11 @@ CurrencyFormatter* PaymentRequest::GetOrCreateCurrencyFormatter() { if (!currency_formatter_) { - currency_formatter_.reset(new CurrencyFormatter( - web_payment_request_.details.total.amount.currency, - web_payment_request_.details.total.amount.currency_system, - GetApplicationLocale())); + DCHECK(web_payment_request_.details.total); + currency_formatter_ = base::MakeUnique<CurrencyFormatter>( + web_payment_request_.details.total->amount.currency, + web_payment_request_.details.total->amount.currency_system, + GetApplicationLocale()); } return currency_formatter_.get(); } @@ -504,4 +515,32 @@ payment_methods().size(), has_complete_instrument); } +void PaymentRequest::RecordRequestedInformation() { + journey_logger().SetRequestedInformation( + request_shipping(), request_payer_email(), request_payer_phone(), + request_payer_name()); + + // Log metrics around which payment methods are requested by the merchant. + const GURL kGooglePayUrl("https://google.com/pay"); + const GURL kAndroidPayUrl("https://android.com/pay"); + + // Looking for payment methods that are NOT Google-related as well as the + // Google-related ones. + bool requestedMethodGoogle = false; + bool requestedMethodOther = false; + for (const GURL& url_payment_method : url_payment_method_identifiers()) { + if (url_payment_method == kGooglePayUrl || + url_payment_method == kAndroidPayUrl) { + requestedMethodGoogle = true; + } else { + requestedMethodOther = true; + } + } + + journey_logger().SetRequestedPaymentMethodTypes( + /*requested_basic_card=*/!supported_card_networks().empty(), + /*requested_method_google=*/requestedMethodGoogle, + /*requested_method_other=*/requestedMethodOther); +} + } // namespace payments
diff --git a/ios/chrome/browser/payments/payment_request_test_util.mm b/ios/chrome/browser/payments/payment_request_test_util.mm index 4b34817..91751e0 100644 --- a/ios/chrome/browser/payments/payment_request_test_util.mm +++ b/ios/chrome/browser/payments/payment_request_test_util.mm
@@ -4,6 +4,7 @@ #include "ios/chrome/browser/payments/payment_request_test_util.h" +#include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" #include "components/payments/core/payment_item.h" #include "components/payments/core/payment_method_data.h" @@ -22,9 +23,10 @@ method_datum.supported_methods.push_back("visa"); method_datum.supported_methods.push_back("amex"); web_payment_request.method_data.push_back(method_datum); - web_payment_request.details.total.label = "Total"; - web_payment_request.details.total.amount.value = "1.00"; - web_payment_request.details.total.amount.currency = "USD"; + web_payment_request.details.total = base::MakeUnique<payments::PaymentItem>(); + web_payment_request.details.total->label = "Total"; + web_payment_request.details.total->amount.value = "1.00"; + web_payment_request.details.total->amount.currency = "USD"; payments::PaymentItem display_item; display_item.label = "Subtotal"; display_item.amount.value = "1.00";
diff --git a/ios/chrome/browser/payments/payment_request_unittest.mm b/ios/chrome/browser/payments/payment_request_unittest.mm index 2d278e2..559aad4f3 100644 --- a/ios/chrome/browser/payments/payment_request_unittest.mm +++ b/ios/chrome/browser/payments/payment_request_unittest.mm
@@ -6,6 +6,7 @@ #include <memory> +#include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" @@ -92,7 +93,8 @@ web::PaymentRequest web_payment_request; autofill::TestPersonalDataManager personal_data_manager; - web_payment_request.details.total.amount.currency = "USD"; + web_payment_request.details.total = base::MakeUnique<PaymentItem>(); + web_payment_request.details.total->amount.currency = "USD"; TestPaymentRequest payment_request1(web_payment_request, chrome_browser_state_.get(), &web_state_, &personal_data_manager); @@ -102,7 +104,7 @@ EXPECT_EQ(base::UTF8ToUTF16("$55.00"), currency_formatter->Format("55.00")); EXPECT_EQ("USD", currency_formatter->formatted_currency_code()); - web_payment_request.details.total.amount.currency = "JPY"; + web_payment_request.details.total->amount.currency = "JPY"; TestPaymentRequest payment_request2(web_payment_request, chrome_browser_state_.get(), &web_state_, &personal_data_manager); @@ -111,8 +113,8 @@ EXPECT_EQ(base::UTF8ToUTF16("¥55"), currency_formatter->Format("55.00")); EXPECT_EQ("JPY", currency_formatter->formatted_currency_code()); - web_payment_request.details.total.amount.currency_system = "NOT_ISO4217"; - web_payment_request.details.total.amount.currency = "USD"; + web_payment_request.details.total->amount.currency_system = "NOT_ISO4217"; + web_payment_request.details.total->amount.currency = "USD"; TestPaymentRequest payment_request3(web_payment_request, chrome_browser_state_.get(), &web_state_, &personal_data_manager); @@ -375,6 +377,7 @@ autofill::TestPersonalDataManager personal_data_manager; PaymentDetails details; + details.total = base::MakeUnique<PaymentItem>(); std::vector<PaymentShippingOption> shipping_options; PaymentShippingOption option1; option1.id = "option:1"; @@ -404,6 +407,54 @@ EXPECT_EQ(nullptr, payment_request.selected_shipping_option()); } +// Tests that updating the payment details updates the total amount. +TEST_F(PaymentRequestTest, UpdatePaymentDetailsNewTotal) { + web::PaymentRequest web_payment_request; + autofill::TestPersonalDataManager personal_data_manager; + + PaymentDetails details; + details.total = base::MakeUnique<PaymentItem>(); + details.total->amount.value = "10.00"; + details.total->amount.currency = "USD"; + web_payment_request.details = std::move(details); + + TestPaymentRequest payment_request(web_payment_request, + chrome_browser_state_.get(), &web_state_, + &personal_data_manager); + + // Simulate an update with a new total amount. + PaymentDetails new_details; + new_details.total = base::MakeUnique<PaymentItem>(); + new_details.total->amount.value = "20.00"; + new_details.total->amount.currency = "CAD"; + payment_request.UpdatePaymentDetails(std::move(new_details)); + EXPECT_EQ("20.00", payment_request.payment_details().total->amount.value); + EXPECT_EQ("CAD", payment_request.payment_details().total->amount.currency); +} + +// Tests that updating the payment details with a PaymentDetails instance that +// is missing the total amount, maintains the old total amount. +TEST_F(PaymentRequestTest, UpdatePaymentDetailsNoTotal) { + web::PaymentRequest web_payment_request; + autofill::TestPersonalDataManager personal_data_manager; + + PaymentDetails details; + details.total = base::MakeUnique<PaymentItem>(); + details.total->amount.value = "10.00"; + details.total->amount.currency = "USD"; + web_payment_request.details = std::move(details); + + TestPaymentRequest payment_request(web_payment_request, + chrome_browser_state_.get(), &web_state_, + &personal_data_manager); + + // Simulate an update with the total amount missing. + PaymentDetails new_details; + payment_request.UpdatePaymentDetails(std::move(new_details)); + EXPECT_EQ("10.00", payment_request.payment_details().total->amount.value); + EXPECT_EQ("USD", payment_request.payment_details().total->amount.currency); +} + // Test that loading profiles when none are available works as expected. TEST_F(PaymentRequestTest, SelectedProfiles_NoProfiles) { autofill::TestPersonalDataManager personal_data_manager;
diff --git a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist index a9e89ba..b5f1d22 100644 --- a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist +++ b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
@@ -262,34 +262,6 @@ <key>Type</key> <string>PSGroupSpecifier</string> <key>Title</key> - <string>Physical Web Settings</string> - </dict> - <dict> - <key>Type</key> - <string>PSMultiValueSpecifier</string> - <key>Title</key> - <string>Physical Web</string> - <key>Key</key> - <string>PhysicalWebEnabled</string> - <key>DefaultValue</key> - <string></string> - <key>Values</key> - <array> - <string></string> - <string>Disabled</string> - <string>Enabled</string> - </array> - <key>Titles</key> - <array> - <string>Default</string> - <string>Disabled</string> - <string>Enabled</string> - </array> - </dict> - <dict> - <key>Type</key> - <string>PSGroupSpecifier</string> - <key>Title</key> <string>Extra Flags (one per line)</string> </dict> <dict>
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm index 8be272e..538dd3f 100644 --- a/ios/chrome/browser/tabs/tab.mm +++ b/ios/chrome/browser/tabs/tab.mm
@@ -157,29 +157,6 @@ class FaviconDriverObserverBridge; class TabInfoBarObserver; -// Name of histogram for recording the state of the tab when the renderer is -// terminated. -const char kRendererTerminationStateHistogram[] = - "Tab.StateAtRendererTermination"; - -// Enum corresponding to UMA's TabForegroundState, for -// Tab.StateAtRendererTermination. Must be kept in sync with the UMA enum. -enum class RendererTerminationTabState { - // These two values are for when the app is in the foreground. - FOREGROUND_TAB_FOREGROUND_APP = 0, - BACKGROUND_TAB_FOREGROUND_APP, - // These are for when the app is in the background. - FOREGROUND_TAB_BACKGROUND_APP, - BACKGROUND_TAB_BACKGROUND_APP, - TERMINATION_TAB_STATE_COUNT -}; - -// Returns true if the application is in the background or inactive state. -bool IsApplicationStateNotActive(UIApplicationState state) { - return (state == UIApplicationStateBackground || - state == UIApplicationStateInactive); -} - // Returns true if |item| is the result of a HTTP redirect. // Returns false if |item| is nullptr; bool IsItemRedirectItem(web::NavigationItem* item) { @@ -1247,12 +1224,6 @@ - (void)webState:(web::WebState*)webState didStartNavigation:(web::NavigationContext*)navigation { - if ([_parentTabModel tabUsageRecorder] && - PageTransitionCoreTypeIs(navigation->GetPageTransition(), - ui::PAGE_TRANSITION_RELOAD)) { - [_parentTabModel tabUsageRecorder]->RecordReload(self.webState); - } - if (!navigation->IsSameDocument()) { // Reset |isVoiceSearchResultsTab| since a new page is being navigated to. self.isVoiceSearchResultsTab = NO; @@ -1359,10 +1330,6 @@ [_parentTabModel notifyTabChanged:self]; if (_parentTabModel) { - if ([_parentTabModel tabUsageRecorder]) { - [_parentTabModel tabUsageRecorder]->RecordPageLoadDone(self.webState, - loadSuccess); - } [[NSNotificationCenter defaultCenter] postNotificationName:kTabModelTabDidFinishLoadingNotification object:_parentTabModel @@ -1563,28 +1530,7 @@ - (void)renderProcessGoneForWebState:(web::WebState*)webState { UIApplicationState state = [UIApplication sharedApplication].applicationState; - BOOL applicationIsNotActive = IsApplicationStateNotActive(state); - if (_browserState && !_browserState->IsOffTheRecord()) { - // Log the tab state for the termination. - RendererTerminationTabState tab_state = - _visible ? RendererTerminationTabState::FOREGROUND_TAB_FOREGROUND_APP - : RendererTerminationTabState::BACKGROUND_TAB_FOREGROUND_APP; - if (applicationIsNotActive) { - tab_state = - _visible ? RendererTerminationTabState::FOREGROUND_TAB_BACKGROUND_APP - : RendererTerminationTabState::BACKGROUND_TAB_BACKGROUND_APP; - } - UMA_HISTOGRAM_ENUMERATION( - kRendererTerminationStateHistogram, static_cast<int>(tab_state), - static_cast<int>( - RendererTerminationTabState::TERMINATION_TAB_STATE_COUNT)); - if ([_parentTabModel tabUsageRecorder]) { - [_parentTabModel tabUsageRecorder]->RendererTerminated(self.webState, - _visible); - } - } - - if (_visible && !applicationIsNotActive) { + if (_visible && state == UIApplicationStateActive) { [_fullScreenController disableFullScreen]; } [self.dialogDelegate cancelDialogForTab:self]; @@ -1661,7 +1607,7 @@ inIncognito:YES inBackground:NO appendTo:kLastTab]; - [self.view chromeExecuteCommand:command]; + [self.dispatcher openURL:command]; } else { [self.dispatcher openNewTab:[OpenNewTabCommand command]]; }
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm b/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm index 9c2b866..baa001c 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm +++ b/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm
@@ -357,8 +357,7 @@ viewController:(UIViewController*)viewController { DCHECK(!_alertCoordinator); - _alertCoordinator = - ios_internal::ErrorCoordinatorNoItem(error, viewController); + _alertCoordinator = ErrorCoordinatorNoItem(error, viewController); __weak AuthenticationFlowPerformer* weakSelf = self; __weak AlertCoordinator* weakAlert = _alertCoordinator;
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util.h b/ios/chrome/browser/ui/authentication/authentication_ui_util.h index 4bba7f0..fbc08ca 100644 --- a/ios/chrome/browser/ui/authentication/authentication_ui_util.h +++ b/ios/chrome/browser/ui/authentication/authentication_ui_util.h
@@ -11,8 +11,6 @@ @class AlertCoordinator; -namespace ios_internal { - // Returns the sign in alert coordinator for |error|. |dismissAction| is called // when the dialog is dismissed (the user taps on the Ok button) or cancelled // (the alert coordinator is cancelled programatically). @@ -33,6 +31,4 @@ AlertCoordinator* ErrorCoordinatorNoItem(NSError* error, UIViewController* viewController); -} // namespace ios_internal - #endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_UI_UTIL_H_
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util.mm b/ios/chrome/browser/ui/authentication/authentication_ui_util.mm index f6be0ec..9cea8c21 100644 --- a/ios/chrome/browser/ui/authentication/authentication_ui_util.mm +++ b/ios/chrome/browser/ui/authentication/authentication_ui_util.mm
@@ -15,8 +15,6 @@ #error "This file requires ARC support." #endif -namespace ios_internal { - AlertCoordinator* ErrorCoordinator(NSError* error, ProceduralBlock dismissAction, UIViewController* viewController) { @@ -76,5 +74,3 @@ message:errorMessage]; return alertCoordinator; } - -} // namespace ios_internal
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util_unittest.mm b/ios/chrome/browser/ui/authentication/authentication_ui_util_unittest.mm index 6861649..eea4959 100644 --- a/ios/chrome/browser/ui/authentication/authentication_ui_util_unittest.mm +++ b/ios/chrome/browser/ui/authentication/authentication_ui_util_unittest.mm
@@ -30,7 +30,7 @@ @{NSLocalizedDescriptionKey : @"MyLocalizedDescription"}; NSError* error = [NSError errorWithDomain:@"MyErrorDomain" code:-1234 userInfo:userInfo]; - NSString* message = ios_internal::DialogMessageFromError(error); + NSString* message = DialogMessageFromError(error); ExpectErrorInMessage(error, message, YES); } @@ -38,7 +38,7 @@ TEST(AuthenticationUIUtil, DialogMessageFromErrorWithoutLocalizedDescription) { NSError* error = [NSError errorWithDomain:@"MyErrorDomain" code:-1234 userInfo:nil]; - NSString* message = ios_internal::DialogMessageFromError(error); + NSString* message = DialogMessageFromError(error); ExpectErrorInMessage(error, message, NO); } @@ -66,7 +66,7 @@ NSError* error3 = [NSError errorWithDomain:@"MyErrorDomain3" code:-890 userInfo:userInfo3]; - NSString* message = ios_internal::DialogMessageFromError(error3); + NSString* message = DialogMessageFromError(error3); ExpectErrorInMessage(error3, message, YES); ExpectErrorInMessage(error2, message, NO); ExpectErrorInMessage(error1, message, NO);
diff --git a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm index b7076e1..38bb691d 100644 --- a/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm +++ b/ios/chrome/browser/ui/authentication/chrome_signin_view_controller.mm
@@ -322,7 +322,7 @@ if (!ShouldHandleSigninError(error)) { return; } - _alertCoordinator = ios_internal::ErrorCoordinator(error, nil, self); + _alertCoordinator = ErrorCoordinator(error, nil, self); [_alertCoordinator start]; }
diff --git a/ios/chrome/browser/ui/authentication/signin_interaction_controller.mm b/ios/chrome/browser/ui/authentication/signin_interaction_controller.mm index 84d7504e..59f90c87 100644 --- a/ios/chrome/browser/ui/authentication/signin_interaction_controller.mm +++ b/ios/chrome/browser/ui/authentication/signin_interaction_controller.mm
@@ -222,7 +222,7 @@ }; // TODO(crbug.com/754642): Stop using TopPresentedViewControllerFrom(). - alertCoordinator_ = ios_internal::ErrorCoordinator( + alertCoordinator_ = ErrorCoordinator( error, dismissAction, top_view_controller::TopPresentedViewControllerFrom(viewController)); [alertCoordinator_ start];
diff --git a/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm b/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm index e76f84b..fcaea5b 100644 --- a/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm +++ b/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm
@@ -7,11 +7,13 @@ #include "base/strings/sys_string_conversions.h" #import "base/test/ios/wait_util.h" +#include "base/test/scoped_feature_list.h" #include "components/signin/core/browser/signin_manager.h" #include "ios/chrome/browser/bookmarks/bookmark_new_generation_features.h" #include "ios/chrome/browser/experimental_flags.h" #include "ios/chrome/browser/signin/signin_manager_factory.h" #import "ios/chrome/browser/ui/authentication/signin_promo_view.h" +#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/open_url_command.h" #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" #import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h" @@ -372,7 +374,7 @@ // Open new tab to cancel sign-in. OpenUrlCommand* command = [[OpenUrlCommand alloc] initWithURLFromChrome:GURL("about:blank")]; - chrome_test_util::RunCommandWithActiveViewController(command); + [chrome_test_util::DispatcherForActiveViewController() openURL:command]; // Re-open the sign-in screen. If it wasn't correctly dismissed previously, // this will fail. @@ -413,7 +415,7 @@ // Open new tab to cancel sign-in. OpenUrlCommand* command = [[OpenUrlCommand alloc] initWithURLFromChrome:GURL("about:blank")]; - chrome_test_util::RunCommandWithActiveViewController(command); + [chrome_test_util::DispatcherForActiveViewController() openURL:command]; // Re-open the sign-in screen. If it wasn't correctly dismissed previously, // this will fail. @@ -475,7 +477,7 @@ // Open new tab to cancel sign-in. OpenUrlCommand* command = [[OpenUrlCommand alloc] initWithURLFromChrome:GURL("about:blank")]; - chrome_test_util::RunCommandWithActiveViewController(command); + [chrome_test_util::DispatcherForActiveViewController() openURL:command]; // Re-open the sign-in screen. If it wasn't correctly dismissed previously, // this will fail. @@ -497,11 +499,13 @@ // Opens the sign in screen from the bookmarks and then cancel it by opening a // new tab. Ensures that the sign in screen is correctly dismissed. // Regression test for crbug.com/596029. +// TODO(crbug.com/695749): Check if we need to rewrite this test for the new +// Bookmarks UI. - (void)testSignInCancelFromBookmarks { - if (base::FeatureList::IsEnabled( - bookmark_new_generation::features::kBookmarkNewGeneration)) { - EARL_GREY_TEST_SKIPPED(@"Only enabled with old Bookmarks UI."); - } + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndDisableFeature( + bookmark_new_generation::features::kBookmarkNewGeneration); + ChromeIdentity* identity = GetFakeIdentity1(); ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()->AddIdentity( identity); @@ -541,7 +545,7 @@ // Open new tab to cancel sign-in. OpenUrlCommand* command = [[OpenUrlCommand alloc] initWithURLFromChrome:GURL("about:blank")]; - chrome_test_util::RunCommandWithActiveViewController(command); + [chrome_test_util::DispatcherForActiveViewController() openURL:command]; // Re-open the sign-in screen. If it wasn't correctly dismissed previously, // this will fail.
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm index be0bbfb..0dee672 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -38,6 +38,7 @@ #import "ios/chrome/browser/ui/url_loader.h" #import "ios/chrome/browser/ui/util/constraints_ui_util.h" #include "ios/chrome/grit/ios_strings.h" +#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h" #include "ios/web/public/referrer.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util_mac.h" @@ -47,6 +48,9 @@ namespace { // The width of the bookmark menu, displaying the different sections. const CGFloat kMenuWidth = 264; + +// The spacer between title and done button on the navigation bar. +const CGFloat kSpacer = 50; } @interface BookmarkHomeViewController ()< @@ -132,6 +136,29 @@ action:@selector(navigationBarWantsEditing:)]; [self.navigationBar setBackTarget:self action:@selector(navigationBarBack:)]; + } else { + [self setupNavigationBar]; + } +} + +- (void)viewWillLayoutSubviews { + [super viewWillLayoutSubviews]; + if (base::FeatureList::IsEnabled( + bookmark_new_generation::features::kBookmarkNewGeneration)) { + // Resize the custom title view (placed as leftBarButtonItem) on the + // navigation bar according to the space available, so that we truncate it + // correctly. + CGRect frame = self.navigationItem.leftBarButtonItem.customView.frame; + NSDictionary* attributes = [self.navigationItem.rightBarButtonItem + titleTextAttributesForState:UIControlStateNormal]; + CGFloat rightButtonWidth = + attributes ? [self.navigationItem.rightBarButtonItem.title + sizeWithAttributes:attributes] + .width + : 0; + frame.size.width = self.view.bounds.size.width - frame.origin.x - + rightButtonWidth - kSpacer; + self.navigationItem.leftBarButtonItem.customView.frame = frame; } } @@ -147,92 +174,9 @@ - (void)loadBookmarkViews { if (base::FeatureList::IsEnabled( bookmark_new_generation::features::kBookmarkNewGeneration)) { - // Set up new UI view. TODO(crbug.com/695749): Polish UI according to mocks. - _containerView = [[UIView alloc] initWithFrame:self.view.bounds]; - [_containerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | - UIViewAutoresizingFlexibleHeight]; - [self.view addSubview:_containerView]; - - self.bookmarksTableView = - [[BookmarkTableView alloc] initWithBrowserState:self.browserState - delegate:self - rootNode:_rootNode - frame:self.view.bounds]; - - [self.bookmarksTableView setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_containerView addSubview:self.bookmarksTableView]; - - // TODO(crbug.com/695749): Hide the context bar when browsing - // bookmarkModel->root_node. - self.contextBar = [[BookmarkContextBar alloc] initWithFrame:CGRectZero]; - self.contextBar.delegate = self; - [self.contextBar setTranslatesAutoresizingMaskIntoConstraints:NO]; - - // TODO(crbug.com/695749): Check if we need to create new strings for the - // context bar buttons. - [self.contextBar setButtonVisibility:YES forButton:ContextBarLeadingButton]; - [self.contextBar - setButtonTitle:l10n_util::GetNSStringWithFixup( - IDS_IOS_BOOKMARK_NEW_GROUP_EDITOR_CREATE_TITLE) - forButton:ContextBarLeadingButton]; - - [self.contextBar setButtonVisibility:YES - forButton:ContextBarTrailingButton]; - [self.contextBar setButtonTitle:l10n_util::GetNSStringWithFixup( - IDS_IOS_BOOKMARK_ACTION_SELECT) - forButton:ContextBarTrailingButton]; - - [_containerView addSubview:self.contextBar]; - - // Set up the navigation bar. - NSString* doneTitle = - l10n_util::GetNSString(IDS_IOS_NAVIGATION_BAR_DONE_BUTTON) - .uppercaseString; - UIBarButtonItem* doneButton = - [[UIBarButtonItem alloc] initWithTitle:doneTitle - style:UIBarButtonItemStyleDone - target:self - action:@selector(navigationBarCancel:)]; - doneButton.accessibilityIdentifier = @"DONE"; - self.navigationItem.rightBarButtonItem = doneButton; - self.navigationItem.backBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:@"" - style:UIBarButtonItemStylePlain - target:nil - action:nil]; - self.navigationItem.title = - bookmark_utils_ios::TitleForBookmarkNode(_rootNode); - self.navigationController.navigationBar.tintColor = UIColor.blackColor; - self.navigationController.navigationBar.backgroundColor = - bookmark_utils_ios::mainBackgroundColor(); + [self loadBookmarkViewsForNewUI]; } else { - // Set up old UI view. - LayoutRect menuLayout = - LayoutRectMake(0, self.view.bounds.size.width, 0, self.menuWidth, - self.view.bounds.size.height); - - // Create menu view. - self.menuView = [[BookmarkMenuView alloc] - initWithBrowserState:self.browserState - frame:LayoutRectGetRect(menuLayout)]; - self.menuView.autoresizingMask = - UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - // Create panel view. - self.panelView = [[BookmarkPanelView alloc] initWithFrame:CGRectZero - menuViewWidth:self.menuWidth]; - self.panelView.autoresizingMask = - UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - // Create folder view. - BookmarkCollectionView* view = - [[BookmarkCollectionView alloc] initWithBrowserState:self.browserState - frame:CGRectZero]; - self.folderView = view; - [self.folderView setEditing:self.editing animated:NO]; - self.folderView.autoresizingMask = - UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.folderView.delegate = self; + [self loadBookmarkViewsForOldUI]; } } @@ -862,6 +806,150 @@ #pragma mark - private +// Set up UI views for the old UI. +- (void)loadBookmarkViewsForOldUI { + LayoutRect menuLayout = + LayoutRectMake(0, self.view.bounds.size.width, 0, self.menuWidth, + self.view.bounds.size.height); + + // Create menu view. + self.menuView = [[BookmarkMenuView alloc] + initWithBrowserState:self.browserState + frame:LayoutRectGetRect(menuLayout)]; + self.menuView.autoresizingMask = + UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + // Create panel view. + self.panelView = [[BookmarkPanelView alloc] initWithFrame:CGRectZero + menuViewWidth:self.menuWidth]; + self.panelView.autoresizingMask = + UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + // Create folder view. + BookmarkCollectionView* view = + [[BookmarkCollectionView alloc] initWithBrowserState:self.browserState + frame:CGRectZero]; + self.folderView = view; + [self.folderView setEditing:self.editing animated:NO]; + self.folderView.autoresizingMask = + UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.folderView.delegate = self; +} + +// Set up UI views for the new UI. +- (void)loadBookmarkViewsForNewUI { + // TODO(crbug.com/695749): Polish UI according to mocks. + _containerView = [[UIView alloc] initWithFrame:self.view.bounds]; + [_containerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | + UIViewAutoresizingFlexibleHeight]; + [self.view addSubview:_containerView]; + + self.bookmarksTableView = + [[BookmarkTableView alloc] initWithBrowserState:self.browserState + delegate:self + rootNode:_rootNode + frame:self.view.bounds]; + [self.bookmarksTableView + setAutoresizingMask:UIViewAutoresizingFlexibleWidth | + UIViewAutoresizingFlexibleHeight]; + [self.bookmarksTableView setTranslatesAutoresizingMaskIntoConstraints:NO]; + [_containerView addSubview:self.bookmarksTableView]; + + if (_rootNode != self.bookmarks->root_node()) { + [self setupContextBar]; + } + [self setupNavigationBar]; +} + +// Set up context bar for the new UI. +- (void)setupContextBar { + self.contextBar = [[BookmarkContextBar alloc] initWithFrame:CGRectZero]; + self.contextBar.delegate = self; + [self.contextBar setTranslatesAutoresizingMaskIntoConstraints:NO]; + + // TODO(crbug.com/695749): Check if we need to create new strings for the + // context bar buttons. + [self.contextBar setButtonVisibility:YES forButton:ContextBarLeadingButton]; + [self.contextBar + setButtonTitle:l10n_util::GetNSStringWithFixup( + IDS_IOS_BOOKMARK_NEW_GROUP_EDITOR_CREATE_TITLE) + forButton:ContextBarLeadingButton]; + + [self.contextBar setButtonVisibility:YES forButton:ContextBarTrailingButton]; + [self.contextBar setButtonTitle:l10n_util::GetNSStringWithFixup( + IDS_IOS_BOOKMARK_ACTION_SELECT) + forButton:ContextBarTrailingButton]; + + [_containerView addSubview:self.contextBar]; +} + +// Set up navigation bar for the new UI. +- (void)setupNavigationBar { + // Add custom back button. + self.navigationItem.backBarButtonItem = [self customizedBackButton]; + + // Add custom title. + self.navigationItem.leftBarButtonItem = [self customizedNavigationTitle]; + + // Add custom done button. + self.navigationItem.rightBarButtonItem = [self customizedDoneButton]; + + self.navigationController.navigationBar.tintColor = UIColor.blackColor; + self.navigationController.navigationBar.backgroundColor = + bookmark_utils_ios::mainBackgroundColor(); +} + +- (UIBarButtonItem*)customizedBackButton { + UIImage* backImage = [UIImage imageNamed:@"bookmark_gray_back"]; + // Set these two properties to customize the back button. + [UINavigationBar appearance].backIndicatorImage = backImage; + [UINavigationBar appearance].backIndicatorTransitionMaskImage = backImage; + // Removes back button label. + UIBarButtonItem* backButton = + [[UIBarButtonItem alloc] initWithTitle:@"" + style:UIBarButtonItemStylePlain + target:nil + action:nil]; + backImage.accessibilityLabel = + l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_BACK_LABEL); + return backButton; +} + +- (UIBarButtonItem*)customizedNavigationTitle { + NSDictionary* titleAttributes = @{ + NSForegroundColorAttributeName : + [UIColor colorWithWhite:68 / 255.0 alpha:1.0], + NSFontAttributeName : [MDCTypography titleFont] + }; + UILabel* titleView = [[UILabel alloc] initWithFrame:CGRectZero]; + [titleView + setAttributedText: + [[NSAttributedString alloc] + initWithString:bookmark_utils_ios::TitleForBookmarkNode(_rootNode) + attributes:titleAttributes]]; + [titleView sizeToFit]; + self.navigationItem.leftItemsSupplementBackButton = YES; + return [[UIBarButtonItem alloc] initWithCustomView:titleView]; +} + +- (UIBarButtonItem*)customizedDoneButton { + UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] + initWithTitle:l10n_util::GetNSString(IDS_IOS_NAVIGATION_BAR_DONE_BUTTON) + .uppercaseString + style:UIBarButtonItemStylePlain + target:self + action:@selector(navigationBarCancel:)]; + NSDictionary* attributes = @{ + NSForegroundColorAttributeName : + [UIColor colorWithWhite:68 / 255.0 alpha:1.0], + NSFontAttributeName : [MDCTypography buttonFont] + }; + [doneButton setTitleTextAttributes:attributes forState:UIControlStateNormal]; + doneButton.accessibilityLabel = doneButton.title; + doneButton.accessibilityIdentifier = @"bookmark_done_button"; + return doneButton; +} + // Saves the current position and asks the delegate to open the url, if delegate // is set, otherwise opens the URL using loader. - (void)dismissWithURL:(const GURL&)url { @@ -915,15 +1003,27 @@ - (void)updateViewConstraints { if (base::FeatureList::IsEnabled( bookmark_new_generation::features::kBookmarkNewGeneration)) { - NSDictionary* views = @{ - @"tableView" : self.bookmarksTableView, - @"contextBar" : self.contextBar, - }; - NSArray* constraints = @[ - @"V:|[tableView][contextBar(==48)]|", @"H:|[tableView]|", - @"H:|[contextBar]|" - ]; - ApplyVisualConstraints(constraints, views); + if (self.contextBar) { + NSDictionary* views = @{ + @"tableView" : self.bookmarksTableView, + @"contextBar" : self.contextBar, + }; + NSArray* constraints = @[ + @"V:|[tableView][contextBar(==48)]|", + @"H:|[tableView]|", + @"H:|[contextBar]|", + ]; + ApplyVisualConstraints(constraints, views); + } else { + NSDictionary* views = @{ + @"tableView" : self.bookmarksTableView, + }; + NSArray* constraints = @[ + @"V:|[tableView]|", + @"H:|[tableView]|", + ]; + ApplyVisualConstraints(constraints, views); + } } [super updateViewConstraints]; }
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.h b/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.h index ca662a6..36ea6ff 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.h +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.h
@@ -16,6 +16,8 @@ // |startWaiting| is called. @interface BookmarkHomeWaitingView : UIView +- (instancetype)initWithFrame:(CGRect)frame backgroundColor:(UIColor*)color; + // Call this method when this view is added to the visible view hierarchy. // After a delay, an activity indicator will be presented if this view is still // in the view hierarchy at that time.
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.mm index 6133d1ed1..b158b927 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.mm
@@ -24,9 +24,14 @@ @synthesize animateOutCompletionBlock = _animateOutCompletionBlock; - (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame + backgroundColor:bookmark_utils_ios::mainBackgroundColor()]; +} + +- (instancetype)initWithFrame:(CGRect)frame backgroundColor:(UIColor*)color { self = [super initWithFrame:frame]; if (self) { - self.backgroundColor = bookmark_utils_ios::mainBackgroundColor(); + self.backgroundColor = color; self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; }
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm index 11ec486..7730d70 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.mm
@@ -171,9 +171,9 @@ if (base::FeatureList::IsEnabled( bookmark_new_generation::features::kBookmarkNewGeneration)) { + [self.bookmarkBrowser setRootNode:self.bookmarkModel->root_node()]; UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self.bookmarkBrowser]; - [self.bookmarkBrowser setRootNode:self.bookmarkModel->root_node()]; [navController setModalPresentationStyle:UIModalPresentationFormSheet]; [_parentController presentViewController:navController animated:YES
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_table_view.mm b/ios/chrome/browser/ui/bookmarks/bookmark_table_view.mm index 3f786b7..4f48183 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_table_view.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_table_view.mm
@@ -22,6 +22,7 @@ #import "ios/chrome/browser/ui/authentication/signin_promo_view_consumer.h" #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" #include "ios/chrome/browser/ui/bookmarks/bookmark_collection_view_background.h" +#import "ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.h" #include "ios/chrome/browser/ui/bookmarks/bookmark_model_bridge_observer.h" #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" #import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_cell.h" @@ -50,17 +51,23 @@ // collections. using IntegerPair = std::pair<NSInteger, NSInteger>; -@interface BookmarkTableView ()<BookmarkTablePromoCellDelegate, +@interface BookmarkTableView ()<BookmarkModelBridgeObserver, + BookmarkTablePromoCellDelegate, SigninPromoViewConsumer, + SyncedSessionsObserver, UITableViewDataSource, - UITableViewDelegate, - BookmarkModelBridgeObserver> { + UITableViewDelegate> { // A vector of bookmark nodes to display in the table view. std::vector<const BookmarkNode*> _bookmarkItems; const BookmarkNode* _currentRootNode; // Bridge to register for bookmark changes. std::unique_ptr<bookmarks::BookmarkModelBridge> _modelBridge; + + // Observer to keep track of the signin and syncing status. + std::unique_ptr<synced_sessions::SyncedSessionsObserverBridge> + _syncedSessionsObserver; + // Map of favicon load tasks for each index path. Used to keep track of // pending favicon load operations so that they can be cancelled upon cell // reuse. Keys are (section, item) pairs of cell index paths. @@ -82,10 +89,13 @@ // The browser state. @property(nonatomic, assign) ios::ChromeBrowserState* browserState; // The delegate for actions on the table. -@property(nonatomic, assign) id<BookmarkTableViewDelegate> delegate; -// Background view of the collection view shown when there is no items. +@property(nonatomic, weak) id<BookmarkTableViewDelegate> delegate; +// Background shown when there is no bookmarks or folders at the current root +// node. @property(nonatomic, strong) BookmarkCollectionViewBackground* emptyTableBackgroundView; +// The loading spinner background which appears when syncing. +@property(nonatomic, strong) BookmarkHomeWaitingView* spinnerView; // Section indices. @property(nonatomic, readonly, assign) NSInteger promoSection; @@ -101,6 +111,7 @@ @synthesize tableView = _tableView; @synthesize delegate = _delegate; @synthesize emptyTableBackgroundView = _emptyTableBackgroundView; +@synthesize spinnerView = _spinnerView; + (void)registerBrowserStatePrefs:(user_prefs::PrefRegistrySyncable*)registry { registry->RegisterIntegerPref(prefs::kIosBookmarkSigninPromoDisplayedCount, @@ -125,6 +136,8 @@ // Set up observers. _modelBridge.reset( new bookmarks::BookmarkModelBridge(self, _bookmarkModel)); + _syncedSessionsObserver.reset( + new synced_sessions::SyncedSessionsObserverBridge(self, _browserState)); [self computeBookmarkTableViewData]; @@ -150,15 +163,7 @@ [self addSubview:self.tableView]; [self bringSubviewToFront:self.tableView]; - // Set up the background view shown when the table is empty. - self.emptyTableBackgroundView = - [[BookmarkCollectionViewBackground alloc] initWithFrame:frame]; - self.emptyTableBackgroundView.autoresizingMask = - UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.emptyTableBackgroundView.text = - l10n_util::GetNSString(IDS_IOS_BOOKMARK_NO_BOOKMARKS_LABEL); - [self updateEmptyBackground]; - [self addSubview:self.emptyTableBackgroundView]; + [self showEmptyOrLoadingSpinnerBackgroundIfNeeded]; } return self; } @@ -182,8 +187,9 @@ _signinPromoViewMediator.signinPromoViewState == ios::SigninPromoViewState::SigninStarted); - if (promoVisible == _promoVisible) + if (promoVisible == _promoVisible) { return; + } _promoVisible = promoVisible; @@ -212,10 +218,12 @@ - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { - if (section == self.bookmarksSection) + if (section == self.bookmarksSection) { return _bookmarkItems.size(); - if (section == self.promoSection) + } + if (section == self.promoSection) { return 1; + } NOTREACHED(); return -1; @@ -340,8 +348,9 @@ BookmarkTableSigninPromoCell* signinPromoCell = static_cast<BookmarkTableSigninPromoCell*>( [self.tableView cellForRowAtIndexPath:indexPath]); - if (!signinPromoCell) + if (!signinPromoCell) { return; + } // Should always reconfigure the cell size even if it has to be reloaded. [configurator configureSigninPromoView:signinPromoCell.signinPromoView]; if (identityChanged) { @@ -368,8 +377,9 @@ // The node has changed, but not its children. - (void)bookmarkNodeChanged:(const BookmarkNode*)bookmarkNode { // The root folder changed. Do nothing. - if (bookmarkNode == _currentRootNode) + if (bookmarkNode == _currentRootNode) { return; + } // A specific cell changed. Reload, if currently shown. if (std::find(_bookmarkItems.begin(), _bookmarkItems.end(), bookmarkNode) != @@ -419,13 +429,15 @@ // Update image of corresponding cell. NSIndexPath* indexPath = [self indexPathForNode:bookmarkNode]; - if (!indexPath) + if (!indexPath) { return; + } // Check that this cell is visible. NSArray* visiblePaths = [self.tableView indexPathsForVisibleRows]; - if (![visiblePaths containsObject:indexPath]) + if (![visiblePaths containsObject:indexPath]) { return; + } [self loadFaviconAtIndexPath:indexPath]; } @@ -458,7 +470,7 @@ - (void)refreshContents { [self computeBookmarkTableViewData]; - [self updateEmptyBackground]; + [self showEmptyOrLoadingSpinnerBackgroundIfNeeded]; [self cancelAllFaviconLoads]; [self.tableView reloadData]; } @@ -475,11 +487,22 @@ // Computes the bookmarks table view based on the current root node. - (void)computeBookmarkTableViewData { - if (!self.bookmarkModel->loaded() || _currentRootNode == NULL) + if (!self.bookmarkModel->loaded() || _currentRootNode == NULL) { return; + } // Regenerate the list of all bookmarks. _bookmarkItems.clear(); + if (_currentRootNode == self.bookmarkModel->root_node()) { + [self generateTableViewDataForRootNode]; + return; + } + [self generateTableViewData]; +} + +// Generate the table view data when the current root node is a child node. +- (void)generateTableViewData { + // Add all bookmarks and folders of the current root node to the table. int childCount = _currentRootNode->child_count(); for (int i = 0; i < childCount; ++i) { const BookmarkNode* node = _currentRootNode->GetChild(i); @@ -487,9 +510,85 @@ } } -- (void)updateEmptyBackground { - self.emptyTableBackgroundView.alpha = - _currentRootNode != NULL && _currentRootNode->child_count() > 0 ? 0 : 1; +// Generate the table view data when the current root node is the outermost +// root. +- (void)generateTableViewDataForRootNode { + // Add "Mobile Bookmarks" to the table. + _bookmarkItems.push_back(self.bookmarkModel->mobile_node()); + + // Add "Bookmarks Bar" and "Other Bookmarks" only when they are not empty. + const BookmarkNode* bookmarkBar = self.bookmarkModel->bookmark_bar_node(); + if (!bookmarkBar->empty()) { + _bookmarkItems.push_back(bookmarkBar); + } + + const BookmarkNode* otherBookmarks = self.bookmarkModel->other_node(); + if (!otherBookmarks->empty()) { + _bookmarkItems.push_back(otherBookmarks); + } +} + +// If the current root node is the outermost root, check if we need to show the +// spinner backgound. Otherwise, check if we need to show the empty background. +- (void)showEmptyOrLoadingSpinnerBackgroundIfNeeded { + if (_currentRootNode == self.bookmarkModel->root_node()) { + if (self.bookmarkModel->HasNoUserCreatedBookmarksOrFolders() && + _syncedSessionsObserver->IsSyncing()) { + [self showLoadingSpinnerBackground]; + } else { + [self hideLoadingSpinner]; + } + return; + } + + if (_currentRootNode->empty()) { + [self showEmptyBackground]; + } else { + // Hides the empty bookmarks background if it is showing. + self.tableView.backgroundView = nil; + } +} + +// Shows loading spinner background view. +- (void)showLoadingSpinnerBackground { + if (!self.spinnerView) { + self.spinnerView = + [[BookmarkHomeWaitingView alloc] initWithFrame:self.tableView.bounds + backgroundColor:[UIColor clearColor]]; + [self.spinnerView startWaiting]; + } + self.tableView.backgroundView = self.spinnerView; +} + +// Hide the loading spinner if it is showing. +- (void)hideLoadingSpinner { + if (self.spinnerView) { + [self.spinnerView stopWaitingWithCompletion:^{ + [UIView animateWithDuration:0.2 + animations:^{ + self.spinnerView.alpha = 0.0; + } + completion:^(BOOL finished) { + self.tableView.backgroundView = nil; + self.spinnerView = nil; + }]; + }]; + } +} + +// Shows empty bookmarks background view. +- (void)showEmptyBackground { + if (!self.emptyTableBackgroundView) { + // Set up the background view shown when the table is empty. + self.emptyTableBackgroundView = [[BookmarkCollectionViewBackground alloc] + initWithFrame:self.tableView.bounds]; + self.emptyTableBackgroundView.autoresizingMask = + UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.emptyTableBackgroundView.text = + l10n_util::GetNSString(IDS_IOS_BOOKMARK_NO_BOOKMARKS_LABEL); + self.emptyTableBackgroundView.frame = self.tableView.bounds; + } + self.tableView.backgroundView = self.emptyTableBackgroundView; } - (NSIndexPath*)indexPathForNode:(const bookmarks::BookmarkNode*)bookmarkNode { @@ -509,8 +608,9 @@ textColor:(UIColor*)textColor fallbackText:(NSString*)text { BookmarkTableCell* cell = [self.tableView cellForRowAtIndexPath:indexPath]; - if (!cell) + if (!cell) { return; + } if (image) { [cell setImage:image]; @@ -551,8 +651,9 @@ void (^faviconBlock)(const favicon_base::LargeIconResult&) = ^(const favicon_base::LargeIconResult& result) { BookmarkTableView* strongSelf = weakSelf; - if (!strongSelf) + if (!strongSelf) { return; + } UIImage* favIcon = nil; UIColor* backgroundColor = nil; UIColor* textColor = nil; @@ -591,4 +692,19 @@ _faviconLoadTasks[IntegerPair(indexPath.section, indexPath.item)] = taskId; } +#pragma mark - Exposed to the SyncedSessionsObserver + +- (void)reloadSessions { +} + +- (void)onSyncStateChanged { + // Permanent nodes ("Bookmarks Bar", "Other Bookmarks") at the root node might + // be added after syncing. So we need to refresh here. + if (_currentRootNode == self.bookmarkModel->root_node()) { + [self refreshContents]; + return; + } + [self showEmptyOrLoadingSpinnerBackgroundIfNeeded]; +} + @end
diff --git a/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm b/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm index c17d2bf7..454ee29 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm
@@ -51,13 +51,12 @@ // Matcher for the Back button on the bookmarks UI. id<GREYMatcher> BookmarksBackButton() { - return ButtonWithAccessibilityLabel(@"Back"); + return grey_accessibilityLabel(@"Back"); } -// Matcher for the Back button on the bookmarks UI. +// Matcher for the DONE button on the bookmarks UI. id<GREYMatcher> BookmarksDoneButton() { - return grey_allOf(grey_accessibilityID(@"DONE"), grey_sufficientlyVisible(), - nil); + return grey_accessibilityID(@"bookmark_done_button"); } // Bookmark integration tests for Chrome. @@ -150,8 +149,6 @@ // Tests that the promo view is only seen at root level and not in any of the // child nodes. - (void)testPromoViewIsSeenOnlyInRootNode { - // TODO(crbug.com/760065): Re-enable this test. - EARL_GREY_TEST_DISABLED(@"Test disabled, issue with back button."); if (IsIPadIdiom()) { EARL_GREY_TEST_DISABLED(@"Test disabled on iPad."); } @@ -351,6 +348,37 @@ checkSigninPromoVisibleWithMode:SigninPromoViewModeWarmState]; } +// Tests that the sign-in promo should not be shown after been shown 19 times. +- (void)testAutomaticSigninPromoDismiss { + if (IsIPadIdiom()) { + EARL_GREY_TEST_DISABLED(@"Test disabled on iPad."); + } + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + bookmark_new_generation::features::kBookmarkNewGeneration); + + ios::ChromeBrowserState* browser_state = + chrome_test_util::GetOriginalBrowserState(); + PrefService* prefs = browser_state->GetPrefs(); + prefs->SetInteger(prefs::kIosBookmarkSigninPromoDisplayedCount, 19); + [BookmarksNewGenTestCase openBookmarks]; + // Check the sign-in promo view is visible. + [SignPromoViewEarlgreyUtils + checkSigninPromoVisibleWithMode:SigninPromoViewModeColdState]; + // Check the sign-in promo will not be shown anymore. + [BookmarksNewGenTestCase verifyPromoAlreadySeen:YES]; + GREYAssertEqual( + 20, prefs->GetInteger(prefs::kIosBookmarkSigninPromoDisplayedCount), + @"Should have incremented the display count"); + // Close the bookmark view and open it again. + [[EarlGrey selectElementWithMatcher:BookmarksDoneButton()] + performAction:grey_tap()]; + [BookmarksNewGenTestCase openBookmarks]; + [[GREYUIThreadExecutor sharedInstance] drainUntilIdle]; + // Check that the sign-in promo is not visible anymore. + [SignPromoViewEarlgreyUtils checkSigninPromoNotVisible]; +} + #pragma mark - Helpers // Navigates to the bookmark manager UI. @@ -470,5 +498,6 @@ }), @"Bookmark model was not loaded"); } +// TODO(crbug.com/695749): Add egtest for spinner and empty background @end
diff --git a/ios/shared/chrome/browser/ui/broadcaster/BUILD.gn b/ios/chrome/browser/ui/broadcaster/BUILD.gn similarity index 88% rename from ios/shared/chrome/browser/ui/broadcaster/BUILD.gn rename to ios/chrome/browser/ui/broadcaster/BUILD.gn index 6c327a2..9c64426 100644 --- a/ios/shared/chrome/browser/ui/broadcaster/BUILD.gn +++ b/ios/chrome/browser/ui/broadcaster/BUILD.gn
@@ -10,6 +10,7 @@ ] deps = [ "//base", + "//ios/chrome/browser/ui/content_suggestions:content_suggestions_constant", ] configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h similarity index 66% rename from ios/shared/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h rename to ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h index 2852f317..eadf33f 100644 --- a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h +++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h
@@ -2,11 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_SHARED_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCAST_OBSERVER_H_ -#define IOS_SHARED_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCAST_OBSERVER_H_ +#ifndef IOS_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCAST_OBSERVER_H_ +#define IOS_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCAST_OBSERVER_H_ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" + // Protocol collecting all of the methods that broadcast keys will trigger // in an observer. Each key maps to a specific observer method as indicated. // (this mapping is generated in the implementation of the Broadcaster class). @@ -24,6 +26,10 @@ // scroll offset of the tab content area. - (void)broadcastContentScrollOffset:(CGFloat)offset; +// Observer method for objects that care about the current panel selected on the +// NTP. +- (void)broadcastSelectedNTPPanel:(ntp_home::PanelIdentifier)panelIdentifier; + @end -#endif // IOS_SHARED_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCAST_OBSERVER_H_ +#endif // IOS_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCAST_OBSERVER_H_
diff --git a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h b/ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h similarity index 89% rename from ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h rename to ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h index c5dab0360..8c530c6 100644 --- a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h +++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_SHARED_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCASTER_H_ -#define IOS_SHARED_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCASTER_H_ +#ifndef IOS_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCASTER_H_ +#define IOS_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCASTER_H_ #import <UIKit/UIKit.h> -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h" // An interface for lightweight synchronization of object properties; it is // generally intended to allow properties of UI-layer objects (typically view @@ -57,4 +57,4 @@ @end -#endif // IOS_SHARED_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCASTER_H_ +#endif // IOS_CHROME_BROWSER_UI_BROADCASTER_CHROME_BROADCASTER_H_
diff --git a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.mm b/ios/chrome/browser/ui/broadcaster/chrome_broadcaster.mm similarity index 97% rename from ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.mm rename to ios/chrome/browser/ui/broadcaster/chrome_broadcaster.mm index fea4569..310eed0e 100644 --- a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.mm +++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcaster.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #import <objc/runtime.h> #include <memory> @@ -314,6 +314,10 @@ CGFloat cgfloatValue = valueAsNumber.floatValue; #endif [invocation setArgument:&cgfloatValue atIndex:2]; + } else if (type == @encode(int)) { + DCHECK(valueAsNumber); + int intValue = valueAsNumber.intValue; + [invocation setArgument:&intValue atIndex:2]; } else { // Add more clauses as needed. NOTREACHED() << "Unknown argument type: " << type;
diff --git a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster_unittest.mm b/ios/chrome/browser/ui/broadcaster/chrome_broadcaster_unittest.mm similarity index 98% rename from ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster_unittest.mm rename to ios/chrome/browser/ui/broadcaster/chrome_broadcaster_unittest.mm index 4e7b1c2..2fc28bf 100644 --- a/ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster_unittest.mm +++ b/ios/chrome/browser/ui/broadcaster/chrome_broadcaster_unittest.mm
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h" -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h" #include "testing/perf/perf_test.h"
diff --git a/ios/chrome/browser/ui/browser_list/BUILD.gn b/ios/chrome/browser/ui/browser_list/BUILD.gn index d443d72..f5ecaaf 100644 --- a/ios/chrome/browser/ui/browser_list/BUILD.gn +++ b/ios/chrome/browser/ui/browser_list/BUILD.gn
@@ -29,10 +29,10 @@ "//ios/chrome/browser/sessions", "//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/ssl", + "//ios/chrome/browser/ui/broadcaster", "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/web", "//ios/chrome/browser/web_state_list", - "//ios/shared/chrome/browser/ui/broadcaster", "//ios/web", ] configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/chrome/browser/ui/browser_list/browser.mm b/ios/chrome/browser/ui/browser_list/browser.mm index c71c7f3..b705943d 100644 --- a/ios/chrome/browser/ui/browser_list/browser.mm +++ b/ios/chrome/browser/ui/browser_list/browser.mm
@@ -7,10 +7,10 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #import "ios/chrome/browser/ui/browser_list/browser_web_state_list_delegate.h" #import "ios/chrome/browser/ui/commands/command_dispatcher.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/browser_view_controller.h b/ios/chrome/browser/ui/browser_view_controller.h index 88a7947..4619343 100644 --- a/ios/chrome/browser/ui/browser_view_controller.h +++ b/ios/chrome/browser/ui/browser_view_controller.h
@@ -39,7 +39,6 @@ class ChromeBrowserState; } -namespace ios_internal { // Notification sent when the page info is shown. extern NSString* const kPageInfoWillShowNotification; // Notification sent when the page info is hidden. @@ -48,7 +47,6 @@ extern NSString* const kLocationBarBecomesFirstResponderNotification; // Notification sent when the location bar resigns first responder. extern NSString* const kLocationBarResignsFirstResponderNotification; -} // namespace ios_internal // The top-level view controller for the browser UI. Manages other controllers // which implement the interface.
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm index 158c20f..cc62225 100644 --- a/ios/chrome/browser/ui/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -219,7 +219,6 @@ class BrowserBookmarkModelBridge; class InfoBarContainerDelegateIOS; -namespace ios_internal { NSString* const kPageInfoWillShowNotification = @"kPageInfoWillShowNotification"; NSString* const kPageInfoWillHideNotification = @@ -228,7 +227,6 @@ @"kLocationBarBecomesFirstResponderNotification"; NSString* const kLocationBarResignsFirstResponderNotification = @"kLocationBarResignsFirstResponderNotification"; -} // namespace ios_internal namespace { @@ -661,8 +659,6 @@ - (void)uninstallDelegatesForTab:(Tab*)tab; // Closes the current tab, with animation if applicable. - (void)closeCurrentTab; -// Shows the Online Help Page in a tab. -- (void)showHelpPage; // Show the bookmarks page. - (void)showAllBookmarks; // Shows a panel within the New Tab Page. @@ -732,10 +728,7 @@ - (void)showFindBarWithAnimation:(BOOL)animate selectText:(BOOL)selectText shouldFocus:(BOOL)shouldFocus; -// Show the Page Security Info. -- (void)showPageInfoPopupForView:(UIView*)sourceView; -// Hide the Page Security Info. -- (void)hidePageInfoPopupForView:(UIView*)sourceView; + // The infobar state (typically height) has changed. - (void)infoBarContainerStateChanged:(bool)is_animating; // Adds a CardView on top of the contentArea either taking the size of the full @@ -1000,7 +993,8 @@ new JavaScriptDialogPresenterImpl(_dialogPresenter)); _webStateDelegate.reset(new web::WebStateDelegateBridge(self)); // TODO(leng): Delay this. - [[UpgradeCenter sharedInstance] registerClient:self]; + [[UpgradeCenter sharedInstance] registerClient:self + withDispatcher:self.dispatcher]; _inNewTabAnimation = NO; if (model && browserState) [self updateWithTabModel:model browserState:browserState]; @@ -1581,7 +1575,7 @@ [[UpgradeCenter sharedInstance] addInfoBarToManager:infoBarManager forTabId:[tab tabId]]; if (!ReSignInInfoBarDelegate::Create(_browserState, tab)) { - ios_internal::sync::displaySyncErrors(_browserState, tab); + DisplaySyncErrors(_browserState, tab); } // The rest of this function initiates the new tab animation, which is @@ -1630,7 +1624,7 @@ newPage.image = [tab updateSnapshotWithOverlay:YES visibleFrameOnly:YES]; [animationParentView addSubview:newPage]; CGPoint origin = [self lastTapPoint]; - ios_internal::page_animation_util::AnimateInPaperWithAnimationAndCompletion( + page_animation_util::AnimateInPaperWithAnimationAndCompletion( newPage, -newPageOffset, newPage.frame.size.height - newPage.image.size.height, origin, _isOffTheRecord, NULL, ^{ @@ -1675,7 +1669,7 @@ // 3. A new, blank CardView to represent the new tab being added. // Launch the new background tab animation. - ios_internal::page_animation_util::AnimateNewBackgroundPageWithCompletion( + page_animation_util::AnimateNewBackgroundPageWithCompletion( topCard, [_contentArea frame], IsPortrait(), ^{ [background removeFromSuperview]; [topCard removeFromSuperview]; @@ -2034,7 +2028,7 @@ - (void)dismissPopups { [_toolbarController dismissToolsMenuPopup]; - [self hidePageInfoPopupForView:nil]; + [self hidePageInfo]; [self.tabTipBubblePresenter dismissAnimated:YES]; } @@ -3068,7 +3062,7 @@ offset:headerOffset]; }; if (animate) { - [UIView animateWithDuration:ios_internal::kToolbarAnimationDuration + [UIView animateWithDuration:kFullScreenControllerToolbarAnimationDuration delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:block @@ -3112,7 +3106,7 @@ offset:headerOffset]; }; - [UIView animateWithDuration:ios_internal::kToolbarAnimationDuration + [UIView animateWithDuration:kFullScreenControllerToolbarAnimationDuration delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:block @@ -3619,68 +3613,6 @@ #pragma mark - Showing popups -- (void)showPageInfoPopupForView:(UIView*)sourceView { - Tab* tab = [_model currentTab]; - DCHECK([tab navigationManager]); - web::NavigationItem* navItem = [tab navigationManager]->GetVisibleItem(); - - // It is fully expected to have a navItem here, as showPageInfoPopup can only - // be trigerred by a button enabled when a current item matches some - // conditions. However a crash was seen were navItem was NULL hence this - // test after a DCHECK. - DCHECK(navItem); - if (!navItem) - return; - - // Don't show if the page is native except for offline pages (to show the - // offline page info). - if ([self isTabNativePage:tab] && - !reading_list::IsOfflineURL(navItem->GetURL())) { - return; - } - - // Don't show the bubble twice (this can happen when tapping very quickly in - // accessibility mode). - if (_pageInfoController) - return; - - base::RecordAction(UserMetricsAction("MobileToolbarPageSecurityInfo")); - - // Dismiss the omnibox (if open). - [_toolbarController cancelOmniboxEdit]; - - [[NSNotificationCenter defaultCenter] - postNotificationName:ios_internal::kPageInfoWillShowNotification - object:nil]; - - // TODO(rohitrao): Get rid of PageInfoModel completely. - PageInfoModelBubbleBridge* bridge = new PageInfoModelBubbleBridge(); - PageInfoModel* pageInfoModel = new PageInfoModel( - _browserState, navItem->GetURL(), navItem->GetSSL(), bridge); - - UIView* view = [self view]; - _pageInfoController = [[PageInfoViewController alloc] - initWithModel:pageInfoModel - bridge:bridge - sourceFrame:[sourceView convertRect:[sourceView bounds] toView:view] - parentView:view]; - _pageInfoController.dispatcher = self.dispatcher; - bridge->set_controller(_pageInfoController); -} - -- (void)hidePageInfoPopupForView:(UIView*)sourceView { - [_pageInfoController dismiss]; - _pageInfoController = nil; -} - -- (void)showSecurityHelpPage { - [self webPageOrderedOpen:GURL(kPageInfoHelpCenterURL) - referrer:web::Referrer() - inBackground:NO - appendTo:kCurrentTab]; - [self hidePageInfoPopupForView:nil]; -} - - (void)addToReadingListURL:(const GURL&)URL title:(NSString*)title { base::RecordAction(UserMetricsAction("MobileReadingListAdd")); @@ -3969,7 +3901,7 @@ inIncognito:inIncognito inBackground:inBackground appendTo:kLastTab]; - [self chromeExecuteCommand:command]; + [self.dispatcher openURL:command]; } - (void)loadSessionTab:(const sessions::SessionTab*)sessionTab { @@ -3997,8 +3929,7 @@ return; // TODO(crbug.com/244366): This should not be necessary. _locationBarHasFocus = YES; [[NSNotificationCenter defaultCenter] - postNotificationName:ios_internal:: - kLocationBarBecomesFirstResponderNotification + postNotificationName:kLocationBarBecomesFirstResponderNotification object:nil]; [_sideSwipeController setEnabled:NO]; if ([[_model currentTab].webController wantsKeyboardShield]) { @@ -4020,8 +3951,7 @@ _locationBarHasFocus = NO; [_sideSwipeController setEnabled:YES]; [[NSNotificationCenter defaultCenter] - postNotificationName:ios_internal:: - kLocationBarResignsFirstResponderNotification + postNotificationName:kLocationBarResignsFirstResponderNotification object:nil]; [UIView animateWithDuration:0.3 animations:^{ @@ -4088,7 +4018,7 @@ CGFloat shortAxis = frame.size.width; CGFloat shortInset = kCardImageInsets.left + kCardImageInsets.right; - shortAxis -= shortInset + 2 * ios_internal::page_animation_util::kCardMargin; + shortAxis -= shortInset + 2 * page_animation_util::kCardMargin; CGFloat aspectRatio = frame.size.height / frame.size.width; CGFloat longAxis = std::floor(aspectRatio * shortAxis); CGFloat longInset = kCardImageInsets.top + kCardImageInsets.bottom; @@ -4407,6 +4337,84 @@ }); } +- (void)showPageInfoForOriginPoint:(CGPoint)originPoint { + Tab* tab = [_model currentTab]; + DCHECK([tab navigationManager]); + web::NavigationItem* navItem = [tab navigationManager]->GetVisibleItem(); + + // It is fully expected to have a navItem here, as showPageInfoPopup can only + // be trigerred by a button enabled when a current item matches some + // conditions. However a crash was seen were navItem was NULL hence this + // test after a DCHECK. + DCHECK(navItem); + if (!navItem) + return; + + // Don't show if the page is native except for offline pages (to show the + // offline page info). + if ([self isTabNativePage:tab] && + !reading_list::IsOfflineURL(navItem->GetURL())) { + return; + } + + // Don't show the bubble twice (this can happen when tapping very quickly in + // accessibility mode). + if (_pageInfoController) + return; + + base::RecordAction(UserMetricsAction("MobileToolbarPageSecurityInfo")); + + // Dismiss the omnibox (if open). + [_toolbarController cancelOmniboxEdit]; + + [[NSNotificationCenter defaultCenter] + postNotificationName:kPageInfoWillShowNotification + object:nil]; + + // TODO(crbug.com/760387): Get rid of PageInfoModel completely. + PageInfoModelBubbleBridge* bridge = new PageInfoModelBubbleBridge(); + PageInfoModel* pageInfoModel = new PageInfoModel( + _browserState, navItem->GetURL(), navItem->GetSSL(), bridge); + + UIView* view = [self view]; + _pageInfoController = [[PageInfoViewController alloc] + initWithModel:pageInfoModel + bridge:bridge + sourcePoint:[view convertPoint:originPoint fromView:nil] + parentView:view]; + _pageInfoController.dispatcher = self.dispatcher; + bridge->set_controller(_pageInfoController); +} + +- (void)hidePageInfo { + // Early return if the PageInfoPopup is not presented. + if (!_pageInfoController) + return; + + [[NSNotificationCenter defaultCenter] + postNotificationName:kPageInfoWillHideNotification + object:nil]; + + [_pageInfoController dismiss]; + _pageInfoController = nil; +} + +- (void)showSecurityHelpPage { + [self webPageOrderedOpen:GURL(kPageInfoHelpCenterURL) + referrer:web::Referrer() + inBackground:NO + appendTo:kCurrentTab]; + [self hidePageInfo]; +} + +- (void)showHelpPage { + GURL helpUrl(l10n_util::GetStringUTF16(IDS_IOS_TOOLS_MENU_HELP_URL)); + [self webPageOrderedOpen:helpUrl + referrer:web::Referrer() + inBackground:NO + appendTo:kCurrentTab]; +} + #pragma mark - Command Handling - (IBAction)chromeExecuteCommand:(id)sender { @@ -4416,9 +4424,6 @@ return; switch (command) { - case IDC_HELP_PAGE_VIA_MENU: - [self showHelpPage]; - break; case IDC_SHOW_MAIL_COMPOSER: [self showMailComposer:sender]; break; @@ -4452,19 +4457,6 @@ } break; } - case IDC_SHOW_PAGE_INFO: - DCHECK([sender isKindOfClass:[UIButton class]]); - [self showPageInfoPopupForView:sender]; - break; - case IDC_HIDE_PAGE_INFO: - [[NSNotificationCenter defaultCenter] - postNotificationName:ios_internal::kPageInfoWillHideNotification - object:nil]; - [self hidePageInfoPopupForView:sender]; - break; - case IDC_SHOW_SECURITY_HELP: - [self showSecurityHelpPage]; - break; default: // Unknown commands get sent up the responder chain. [super chromeExecuteCommand:sender]; @@ -4490,7 +4482,7 @@ // Do not animate close in iPad. if (!IsIPadIdiom()) { [_contentArea addSubview:exitingPage]; - ios_internal::page_animation_util::AnimateOutWithCompletion( + page_animation_util::AnimateOutWithCompletion( exitingPage, 0, YES, IsPortrait(), ^{ [exitingPage removeFromSuperview]; }); @@ -4503,7 +4495,7 @@ [_bookmarkInteractionController dismissSnackbar]; [_toolbarController cancelOmniboxEdit]; [_dialogPresenter cancelAllDialogs]; - [self hidePageInfoPopupForView:nil]; + [self hidePageInfo]; [self.tabTipBubblePresenter dismissAnimated:NO]; if (_voiceSearchController) _voiceSearchController->DismissMicPermissionsHelp(); @@ -4555,14 +4547,6 @@ } } -- (void)showHelpPage { - GURL helpUrl(l10n_util::GetStringUTF16(IDS_IOS_TOOLS_MENU_HELP_URL)); - [self webPageOrderedOpen:helpUrl - referrer:web::Referrer() - inBackground:NO - appendTo:kCurrentTab]; -} - #pragma mark - Find Bar - (void)hideFindBarWithAnimation:(BOOL)animate {
diff --git a/ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item_unittest.mm b/ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item_unittest.mm index f921f84..a7711bd 100644 --- a/ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item_unittest.mm +++ b/ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item_unittest.mm
@@ -22,7 +22,7 @@ NSString* text = @"Test Footer"; item.text = text; - UIImage* image = ios_internal::CollectionViewTestImage(); + UIImage* image = CollectionViewTestImage(); item.image = image; CollectionViewFooterCell* cell = [[[item cellClass] alloc] init];
diff --git a/ios/chrome/browser/ui/collection_view/cells/test_utils.h b/ios/chrome/browser/ui/collection_view/cells/test_utils.h index 6c8aed8..ccbfeca 100644 --- a/ios/chrome/browser/ui/collection_view/cells/test_utils.h +++ b/ios/chrome/browser/ui/collection_view/cells/test_utils.h
@@ -7,11 +7,7 @@ #import <UIKit/UIKit.h> -namespace ios_internal { - // Returns a 1*1 test image. UIImage* CollectionViewTestImage(); -} // namespace ios_internal - #endif // IOS_CHROME_BROWSER_UI_COLLECTION_VIEW_CELLS_TEST_UTILS_H_
diff --git a/ios/chrome/browser/ui/collection_view/cells/test_utils.mm b/ios/chrome/browser/ui/collection_view/cells/test_utils.mm index 54cb5ae..3d33b755 100644 --- a/ios/chrome/browser/ui/collection_view/cells/test_utils.mm +++ b/ios/chrome/browser/ui/collection_view/cells/test_utils.mm
@@ -8,8 +8,6 @@ #error "This file requires ARC support." #endif -namespace ios_internal { - UIImage* CollectionViewTestImage() { CGRect rect = CGRectMake(0.0, 0.0, 1.0, 1.0); UIGraphicsBeginImageContext(rect.size); @@ -23,5 +21,3 @@ return image; } - -} // namespace ios_internal
diff --git a/ios/chrome/browser/ui/commands/application_commands.h b/ios/chrome/browser/ui/commands/application_commands.h index b8de1db..e465000 100644 --- a/ios/chrome/browser/ui/commands/application_commands.h +++ b/ios/chrome/browser/ui/commands/application_commands.h
@@ -70,6 +70,9 @@ // Shows the Report an Issue UI. - (void)showReportAnIssue; +// Opens the |command| URL. +- (void)openURL:(OpenUrlCommand*)command; + @end #endif // IOS_CHROME_BROWSER_UI_COMMANDS_APPLICATION_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/commands/browser_commands.h b/ios/chrome/browser/ui/commands/browser_commands.h index 7eacd16..69ffafc 100644 --- a/ios/chrome/browser/ui/commands/browser_commands.h +++ b/ios/chrome/browser/ui/commands/browser_commands.h
@@ -5,6 +5,7 @@ #ifndef IOS_CHROME_BROWSER_UI_COMMANDS_BROWSER_COMMANDS_H_ #define IOS_CHROME_BROWSER_UI_COMMANDS_BROWSER_COMMANDS_H_ +#include <CoreGraphics/CoreGraphics.h> #import <Foundation/Foundation.h> #import "ios/chrome/browser/ui/commands/activity_service_commands.h" @@ -87,6 +88,19 @@ // tab. - (void)findPreviousStringInPage; +// Show the page security info. |originPoint| is the midpoint of the UI element +// which triggered this command and should be in window coordinates. +- (void)showPageInfoForOriginPoint:(CGPoint)originPoint; + +// Hide the page security info. +- (void)hidePageInfo; + +// Show the security help page. +- (void)showSecurityHelpPage; + +// Shows the online help page in a tab. +- (void)showHelpPage; + @end #endif // IOS_CHROME_BROWSER_UI_COMMANDS_BROWSER_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/commands/ios_command_ids.h b/ios/chrome/browser/ui/commands/ios_command_ids.h index 162a342..cdd34d7 100644 --- a/ios/chrome/browser/ui/commands/ios_command_ids.h +++ b/ios/chrome/browser/ui/commands/ios_command_ids.h
@@ -14,14 +14,9 @@ // clang-format off #define IDC_SHOW_BOOKMARK_MANAGER 40011 -#define IDC_HELP_PAGE_VIA_MENU 40020 #define IDC_SHOW_SIGNIN_IOS 40905 #define IDC_SHOW_ADD_ACCOUNT 40910 -#define IDC_SHOW_PAGE_INFO 40911 -#define IDC_HIDE_PAGE_INFO 40912 -#define IDC_SHOW_SECURITY_HELP 40913 #define IDC_SHOW_SYNC_SETTINGS 40914 -#define IDC_OPEN_URL 40915 #define IDC_SHOW_OTHER_DEVICES 40917 #define IDC_REQUEST_DESKTOP_SITE 40921 #define IDC_REQUEST_MOBILE_SITE 40922
diff --git a/ios/chrome/browser/ui/commands/open_url_command.mm b/ios/chrome/browser/ui/commands/open_url_command.mm index 0045fa5..4f45d4b 100644 --- a/ios/chrome/browser/ui/commands/open_url_command.mm +++ b/ios/chrome/browser/ui/commands/open_url_command.mm
@@ -33,7 +33,7 @@ inIncognito:(BOOL)inIncognito inBackground:(BOOL)inBackground appendTo:(OpenPosition)appendTo { - if ((self = [super initWithTag:IDC_OPEN_URL])) { + if ((self = [super initWithTag:0])) { _url = url; _referrer = referrer; _inIncognito = inIncognito;
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.h b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.h index 16ad2109..6dd31f5 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.h +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.h
@@ -17,6 +17,8 @@ // Text describing what is new. @property(nonatomic, copy, nullable) NSString* text; ++ (nonnull NSString*)accessibilityIdentifier; + @end // Associated cell, displaying what is new.
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.mm index 2d4038f..152ddc7 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.mm +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.mm
@@ -49,12 +49,17 @@ [super configureCell:cell]; [cell setIcon:self.icon]; [cell setText:self.text]; + cell.accessibilityIdentifier = [[self class] accessibilityIdentifier]; } - (CGFloat)cellHeightForWidth:(CGFloat)width { return [self.cellClass heightForWidth:width withText:self.text]; } ++ (NSString*)accessibilityIdentifier { + return @"ContentSuggestionsWhatsNewIdentifier"; +} + @end #pragma mark - ContentSuggestionsWhatsNewCell
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h index a9a1f5d..e138bbf2 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h
@@ -64,6 +64,8 @@ // Returns the number of sections containing suggestions displayed above this // |section|. - (NSInteger)numberOfSectionsAbove:(NSInteger)section; +// Updates the constraints of the collection. +- (void)updateConstraints; // Returns the accessibility identifier of the collection. + (NSString*)collectionAccessibilityIdentifier;
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm index 1a4ae45..569837d 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -105,7 +105,6 @@ [self.collectionView performBatchUpdates:^{ [self collectionView:self.collectionView willDeleteItemsAtIndexPaths:@[ indexPath ]]; - [self.collectionView deleteItemsAtIndexPaths:@[ indexPath ]]; // Check if the section is now empty. @@ -190,6 +189,20 @@ return sectionsAbove; } +- (void)updateConstraints { + [self.collectionUpdater + updateMostVisitedForSize:self.collectionView.bounds.size]; + [self.headerCommandHandler + updateFakeOmniboxOnNewWidth:self.collectionView.bounds.size.width]; + [self.collectionView reloadData]; + if (ShouldCellsBeFullWidth( + [UIApplication sharedApplication].keyWindow.traitCollection)) { + self.styler.cellStyle = MDCCollectionViewCellStyleGrouped; + } else { + self.styler.cellStyle = MDCCollectionViewCellStyleCard; + } +} + + (NSString*)collectionAccessibilityIdentifier { return @"ContentSuggestionsCollectionIdentifier"; } @@ -239,17 +252,7 @@ [super viewDidAppear:animated]; // Resize the collection as it might have been rotated while not being // presented (e.g. rotation on stack view). - [self.collectionUpdater - updateMostVisitedForSize:self.collectionView.bounds.size]; - [self.headerCommandHandler - updateFakeOmniboxOnNewWidth:self.collectionView.bounds.size.width]; - [self.collectionView reloadData]; - if (ShouldCellsBeFullWidth( - [UIApplication sharedApplication].keyWindow.traitCollection)) { - self.styler.cellStyle = MDCCollectionViewCellStyleGrouped; - } else { - self.styler.cellStyle = MDCCollectionViewCellStyleCard; - } + [self updateConstraints]; // Update the shadow bar. [self.audience contentOffsetDidChange]; } @@ -307,7 +310,7 @@ atIndex:indexPath.item]; break; case ContentSuggestionTypePromo: - [self dismissEntryAtIndexPath:indexPath]; + [self dismissSection:indexPath.section]; [self.suggestionCommandHandler handlePromoTapped]; [self.collectionViewLayout invalidateLayout]; break;
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm index 9d62e04..84f9330 100644 --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
@@ -6,12 +6,16 @@ #import <XCTest/XCTest.h> #include "base/test/scoped_command_line.h" +#include "base/values.h" #include "components/reading_list/core/reading_list_model.h" +#include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_switches.h" +#include "ios/chrome/browser/experimental_flags.h" #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h" #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.h" #include "ios/chrome/browser/reading_list/reading_list_model_factory.h" +#import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_whats_new_item.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.h" #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" @@ -34,6 +38,11 @@ using namespace ntp_snippets; namespace { +const char kPrefPromoObject[] = "ios.ntppromo"; +const char kPrefPromoFirstViewTime[] = "first_view_time"; +const char kPrefPromoViews[] = "views"; +const char kPrefPromoClosed[] = "closed"; + // Returns a matcher, which is true if the view has its width equals to |width|. id<GREYMatcher> OmniboxWidth(CGFloat width) { MatchesBlock matches = ^BOOL(UIView* view) { @@ -295,4 +304,43 @@ 1)]; } +// Tests that the promo is correctly displayed and removed once tapped. +- (void)testPromoTap { + // Setup the promo. + NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; + [defaults setInteger:experimental_flags::WHATS_NEW_APP_RATING + forKey:@"WhatsNewPromoStatus"]; + auto ntp_promo = base::MakeUnique<base::DictionaryValue>(); + ntp_promo->SetPath({kPrefPromoFirstViewTime}, + base::Value(base::Time::Now().ToDoubleT())); + ntp_promo->SetPath({kPrefPromoViews}, base::Value(0)); + ntp_promo->SetPath({kPrefPromoClosed}, base::Value(false)); + + PrefService* local_state = GetApplicationContext()->GetLocalState(); + base::DictionaryValue promo_dict; + promo_dict.MergeDictionary(local_state->GetDictionary(kPrefPromoObject)); + promo_dict.Set(std::to_string(experimental_flags::WHATS_NEW_APP_RATING), + std::move(ntp_promo)); + local_state->Set(kPrefPromoObject, promo_dict); + + // Open a new tab to have the promo. + [ChromeEarlGreyUI openNewTab]; + + // Tap the promo. + [[EarlGrey selectElementWithMatcher:grey_accessibilityID( + [ContentSuggestionsWhatsNewItem + accessibilityIdentifier])] + performAction:grey_tap()]; + + // Promo dismissed. + [[EarlGrey selectElementWithMatcher:grey_accessibilityID( + [ContentSuggestionsWhatsNewItem + accessibilityIdentifier])] + assertWithMatcher:grey_not(grey_sufficientlyVisible())]; + + // Reset the promo. + [defaults setInteger:experimental_flags::WHATS_NEW_DEFAULT + forKey:@"WhatsNewPromoStatus"]; +} + @end
diff --git a/ios/chrome/browser/ui/dialogs/dialog_presenter.mm b/ios/chrome/browser/ui/dialogs/dialog_presenter.mm index a7492fe..9938910 100644 --- a/ios/chrome/browser/ui/dialogs/dialog_presenter.mm +++ b/ios/chrome/browser/ui/dialogs/dialog_presenter.mm
@@ -265,8 +265,7 @@ NSString* password))handler { NSString* title = l10n_util::GetNSStringWithFixup(IDS_LOGIN_DIALOG_TITLE); NSString* message = - ios_internal::nsurlprotectionspace_util::MessageForHTTPAuth( - protectionSpace); + nsurlprotectionspace_util::MessageForHTTPAuth(protectionSpace); InputAlertCoordinator* alertCoordinator = [[InputAlertCoordinator alloc] initWithBaseViewController:self.viewController
diff --git a/ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm b/ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm index 2312766..52b6bc5 100644 --- a/ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm +++ b/ios/chrome/browser/ui/first_run/first_run_chrome_signin_view_controller.mm
@@ -99,13 +99,11 @@ - (void)finishFirstRunAndDismiss { DCHECK(self.presentingViewController); - ios_internal::FinishFirstRun(self.browserState, [_tabModel currentTab], - _firstRunConfig); - [self.presentingViewController - dismissViewControllerAnimated:YES - completion:^{ - ios_internal::FirstRunDismissed(); - }]; + FinishFirstRun(self.browserState, [_tabModel currentTab], _firstRunConfig); + [self.presentingViewController dismissViewControllerAnimated:YES + completion:^{ + FirstRunDismissed(); + }]; } #pragma mark ChromeSigninViewControllerDelegate @@ -135,8 +133,8 @@ DCHECK_EQ(self, controller); // User is considered done with First Run only after successful sign-in. - ios_internal::WriteFirstRunSentinelAndRecordMetrics( - self.browserState, YES, [_firstRunConfig hasSSOAccount]); + WriteFirstRunSentinelAndRecordMetrics(self.browserState, YES, + [_firstRunConfig hasSSOAccount]); } - (void)didUndoSignIn:(ChromeSigninViewController*)controller
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.h b/ios/chrome/browser/ui/first_run/first_run_util.h index a2fcaac..a1f9239e 100644 --- a/ios/chrome/browser/ui/first_run/first_run_util.h +++ b/ios/chrome/browser/ui/first_run/first_run_util.h
@@ -26,8 +26,6 @@ // of Service modal view. extern NSString* const kChromeFirstRunUIDidFinishNotification; -namespace ios_internal { - // Checks if the last line of the label only contains one word and if so, insert // a newline character before the second to last word so that there are two // words on the last line. Should only be called on labels that span multiple @@ -62,6 +60,4 @@ BOOL enabled, BOOL toggled_switch); -} // namespace ios_internal - #endif // IOS_CHROME_BROWSER_UI_FIRST_RUN_FIRST_RUN_UTIL_H_
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.mm b/ios/chrome/browser/ui/first_run/first_run_util.mm index 10c1c01..79f2d2af 100644 --- a/ios/chrome/browser/ui/first_run/first_run_util.mm +++ b/ios/chrome/browser/ui/first_run/first_run_util.mm
@@ -121,8 +121,6 @@ } // namespace -namespace ios_internal { - BOOL FixOrphanWord(UILabel* label) { // Calculate the height of the label's text. NSString* text = label.text; @@ -169,7 +167,7 @@ config.hasSSOAccount); // Display the sync errors infobar. - ios_internal::sync::displaySyncErrors(browserState, tab); + DisplaySyncErrors(browserState, tab); } void RecordProductTourTimingMetrics(NSString* timer_name, @@ -188,5 +186,3 @@ postNotificationName:kChromeFirstRunUIDidFinishNotification object:nil]; } - -} // namespace ios_internal
diff --git a/ios/chrome/browser/ui/first_run/first_run_util_unittest.mm b/ios/chrome/browser/ui/first_run/first_run_util_unittest.mm index 5b95b30..50c7820 100644 --- a/ios/chrome/browser/ui/first_run/first_run_util_unittest.mm +++ b/ios/chrome/browser/ui/first_run/first_run_util_unittest.mm
@@ -36,13 +36,13 @@ UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 500)]; [label setText:englishString]; - ios_internal::FixOrphanWord(label); + FixOrphanWord(label); NSRange range = [[label text] rangeOfString:@"\n"]; // Check that the label's text does not contain a newline. EXPECT_EQ(NSNotFound, static_cast<NSInteger>(range.location)); [label setText:englishStringWithOrphan]; - ios_internal::FixOrphanWord(label); + FixOrphanWord(label); range = [[label text] rangeOfString:@"\n"]; // Check that the label's text contains a newline. EXPECT_NE(NSNotFound, static_cast<NSInteger>(range.location)); @@ -53,13 +53,13 @@ EXPECT_TRUE([@"laoreet nisi." isEqualToString:wordsAfterNewline]); [label setText:chineseString]; - ios_internal::FixOrphanWord(label); + FixOrphanWord(label); range = [[label text] rangeOfString:@"\n"]; // Check that the label's text does not contain a newline. EXPECT_EQ(NSNotFound, static_cast<NSInteger>(range.location)); [label setText:chineseStringWithOrphan]; - ios_internal::FixOrphanWord(label); + FixOrphanWord(label); range = [[label text] rangeOfString:@"\n"]; // Check that the label's text contains a newline. ASSERT_NE(NSNotFound, static_cast<NSInteger>(range.location));
diff --git a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm index 283f5688..1300680 100644 --- a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm +++ b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm
@@ -366,7 +366,7 @@ DCHECK_NE(0u, linkTextRange.length); self.TOSLabel.text = strippedText; - if (ios_internal::FixOrphanWord(self.TOSLabel)) { + if (FixOrphanWord(self.TOSLabel)) { // If a newline is inserted, check whether it was added mid-link and adjust // |linkTextRange| accordingly. NSRange newlineRange = @@ -416,7 +416,7 @@ CGRectMake(optInLabelOriginX, CGRectGetMaxY(self.TOSLabel.frame) + optInLabelTopPadding, optInLabelSize.width, optInLabelSize.height)); - ios_internal::FixOrphanWord(self.optInLabel); + FixOrphanWord(self.optInLabel); } - (void)layoutCheckBoxButton {
diff --git a/ios/chrome/browser/ui/fullscreen_controller.h b/ios/chrome/browser/ui/fullscreen_controller.h index bc6f858..8937dc4 100644 --- a/ios/chrome/browser/ui/fullscreen_controller.h +++ b/ios/chrome/browser/ui/fullscreen_controller.h
@@ -10,10 +10,8 @@ #import "ios/web/public/web_state/crw_web_controller_observer.h" #import "ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h" -namespace ios_internal { // Duration of the toolbar animation. -const NSTimeInterval kToolbarAnimationDuration = 0.3; -} // namespace ios_internal +const NSTimeInterval kFullScreenControllerToolbarAnimationDuration = 0.3; @class CRWWebViewScrollViewProxy; @class FullScreenController;
diff --git a/ios/chrome/browser/ui/fullscreen_controller.mm b/ios/chrome/browser/ui/fullscreen_controller.mm index aee4c268..6818fc27 100644 --- a/ios/chrome/browser/ui/fullscreen_controller.mm +++ b/ios/chrome/browser/ui/fullscreen_controller.mm
@@ -257,22 +257,20 @@ object:nil]; [center addObserver:self selector:@selector(incrementFullScreenLock) - name:ios_internal::kPageInfoWillShowNotification + name:kPageInfoWillShowNotification object:nil]; [center addObserver:self selector:@selector(decrementFullScreenLock) - name:ios_internal::kPageInfoWillHideNotification + name:kPageInfoWillHideNotification object:nil]; - [center - addObserver:self - selector:@selector(incrementFullScreenLock) - name:ios_internal::kLocationBarBecomesFirstResponderNotification - object:nil]; - [center - addObserver:self - selector:@selector(decrementFullScreenLock) - name:ios_internal::kLocationBarResignsFirstResponderNotification - object:nil]; + [center addObserver:self + selector:@selector(incrementFullScreenLock) + name:kLocationBarBecomesFirstResponderNotification + object:nil]; + [center addObserver:self + selector:@selector(decrementFullScreenLock) + name:kLocationBarResignsFirstResponderNotification + object:nil]; [center addObserver:self selector:@selector(incrementFullScreenLock) name:kTabStripDragStarted @@ -283,11 +281,11 @@ object:nil]; [center addObserver:self selector:@selector(incrementFullScreenLock) - name:ios_internal::kSideSwipeWillStartNotification + name:kSideSwipeWillStartNotification object:nil]; [center addObserver:self selector:@selector(decrementFullScreenLock) - name:ios_internal::kSideSwipeDidStopNotification + name:kSideSwipeDidStopNotification object:nil]; // TODO(crbug.com/451373): Evaluate using listeners instead of // notifications.
diff --git a/ios/chrome/browser/ui/key_commands_provider.mm b/ios/chrome/browser/ui/key_commands_provider.mm index 69a1272..517a654 100644 --- a/ios/chrome/browser/ui/key_commands_provider.mm +++ b/ios/chrome/browser/ui/key_commands_provider.mm
@@ -6,8 +6,6 @@ #include "base/logging.h" #include "components/strings/grit/components_strings.h" -#import "ios/chrome/browser/ui/commands/generic_chrome_command.h" -#include "ios/chrome/browser/ui/commands/ios_command_ids.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h" #include "ios/chrome/browser/ui/commands/start_voice_search_command.h" #import "ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h" @@ -28,12 +26,6 @@ __weak id<KeyCommandsPlumbing> weakConsumer = consumer; __weak id<ApplicationCommands, BrowserCommands> weakDispatcher = dispatcher; - // Block to execute a command from the |tag|. - void (^execute)(NSInteger) = ^(NSInteger tag) { - [weakConsumer - chromeExecuteCommand:[GenericChromeCommand commandWithTag:tag]]; - }; - // Block to have the tab model open the tab at |index|, if there is one. void (^focusTab)(NSUInteger) = ^(NSUInteger index) { [weakConsumer focusTabAtIndex:index]; @@ -246,7 +238,7 @@ modifierFlags:UIKeyModifierCommand title:nil action:^{ - execute(IDC_HELP_PAGE_VIA_MENU); + [weakDispatcher showHelpPage]; }], [UIKeyCommand cr_keyCommandWithInput:@"1" modifierFlags:UIKeyModifierCommand
diff --git a/ios/chrome/browser/ui/keyboard_commands_egtest.mm b/ios/chrome/browser/ui/keyboard_commands_egtest.mm index f2dd406..6ac0e806 100644 --- a/ios/chrome/browser/ui/keyboard_commands_egtest.mm +++ b/ios/chrome/browser/ui/keyboard_commands_egtest.mm
@@ -5,6 +5,7 @@ #import <EarlGrey/EarlGrey.h> #import <XCTest/XCTest.h> +#include "base/test/scoped_feature_list.h" #include "components/strings/grit/components_strings.h" #include "ios/chrome/browser/bookmarks/bookmark_new_generation_features.h" #import "ios/chrome/browser/ui/browser_view_controller.h" @@ -176,11 +177,13 @@ // Tests that keyboard commands are not registered when the Bookmarks UI is // shown on iPhone and registered on iPad. +// TODO(crbug.com/695749): Check if we need to rewrite this test for the new +// Bookmarks UI. - (void)testKeyboardCommandsNotRegistered_BookmarksPresented { - if (base::FeatureList::IsEnabled( - bookmark_new_generation::features::kBookmarkNewGeneration)) { - EARL_GREY_TEST_SKIPPED(@"Only enabled with old Bookmarks UI."); - } + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndDisableFeature( + bookmark_new_generation::features::kBookmarkNewGeneration); + // Open Bookmarks [self selectToolsMenuItem:grey_accessibilityID(kToolsMenuBookmarksId)];
diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.mm b/ios/chrome/browser/ui/main/browser_view_wrangler.mm index b6de33b..0c6b5a0b 100644 --- a/ios/chrome/browser/ui/main/browser_view_wrangler.mm +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
@@ -119,7 +119,7 @@ self.mainTabModel = [self tabModelForBrowserState:_browserState empty:NO]; // Follow loaded URLs in the main tab model to send those in case of // crashes. - ios_internal::breakpad::MonitorURLsForTabModel(_mainTabModel); + breakpad::MonitorURLsForTabModel(_mainTabModel); ios::GetChromeBrowserProvider()->InitializeCastService(_mainTabModel); } return _mainTabModel; @@ -278,7 +278,7 @@ DCHECK(_browserState); // Stop watching the OTR tab model's state for crashes. - ios_internal::breakpad::StopMonitoringTabStateForTabModel(self.otrTabModel); + breakpad::StopMonitoringTabStateForTabModel(self.otrTabModel); // At this stage, a new OTR BVC shouldn't be lazily constructed by calling the // .otrBVC property getter. Instead, the ivar is accessed directly through the @@ -326,11 +326,11 @@ [_otrTabModel removeObserver:self]; // Stop URL monitoring of the main tab model. - ios_internal::breakpad::StopMonitoringURLsForTabModel(_mainTabModel); + breakpad::StopMonitoringURLsForTabModel(_mainTabModel); // Stop Breakpad state monitoring of both tab models (if necessary). - ios_internal::breakpad::StopMonitoringTabStateForTabModel(_mainTabModel); - ios_internal::breakpad::StopMonitoringTabStateForTabModel(_otrTabModel); + breakpad::StopMonitoringTabStateForTabModel(_mainTabModel); + breakpad::StopMonitoringTabStateForTabModel(_otrTabModel); // Normally other objects will take care of unhooking the tab models from // the browser state, but this code should ensure that it happens regardless. @@ -379,7 +379,7 @@ [tabModel addObserver:_tabModelObserver]; [tabModel addObserver:self]; } - ios_internal::breakpad::MonitorTabStateForTabModel(tabModel); + breakpad::MonitorTabStateForTabModel(tabModel); return tabModel; }
diff --git a/ios/chrome/browser/ui/ntp/google_landing_mediator.mm b/ios/chrome/browser/ui/ntp/google_landing_mediator.mm index 26a73f60..50636b9 100644 --- a/ios/chrome/browser/ui/ntp/google_landing_mediator.mm +++ b/ios/chrome/browser/ui/ntp/google_landing_mediator.mm
@@ -225,16 +225,14 @@ // Set up notifications; NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter]; - [defaultCenter - addObserver:self.consumer - selector:@selector(locationBarBecomesFirstResponder) - name:ios_internal::kLocationBarBecomesFirstResponderNotification - object:nil]; - [defaultCenter - addObserver:self.consumer - selector:@selector(locationBarResignsFirstResponder) - name:ios_internal::kLocationBarResignsFirstResponderNotification - object:nil]; + [defaultCenter addObserver:self.consumer + selector:@selector(locationBarBecomesFirstResponder) + name:kLocationBarBecomesFirstResponderNotification + object:nil]; + [defaultCenter addObserver:self.consumer + selector:@selector(locationBarResignsFirstResponder) + name:kLocationBarResignsFirstResponderNotification + object:nil]; // Set up what's new. _notificationPromo.reset( @@ -437,6 +435,7 @@ [self.consumer setPromoCanShow:_notificationPromo->CanShow()]; } +// TODO(crbug.com/761096) : Promo handling should be DRY and tested. - (void)promoTapped { DCHECK(_notificationPromo); _notificationPromo->HandleClosed();
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm index 84d3250e..a62d7c7 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm
@@ -365,8 +365,11 @@ - (void)wasShown { [_currentController wasShown]; - // Ensure that the NTP has the latest data when it is shown. - [self reload]; + if (_currentController != self.homePanel) { + // Ensure that the NTP has the latest data when it is shown, except for + // Home. + [self reload]; + } [self.ntpView.tabBar updateColorsForScrollView:self.ntpView.scrollView]; [self.ntpView.tabBar setShadowAlpha:[_currentController alphaForBottomShadow]];
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm b/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm index 51254725..c0f372de5 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_egtest.mm
@@ -6,6 +6,7 @@ #import <XCTest/XCTest.h> #include "base/ios/ios_util.h" +#include "base/test/scoped_feature_list.h" #include "components/strings/grit/components_strings.h" #include "ios/chrome/browser/bookmarks/bookmark_new_generation_features.h" #import "ios/chrome/browser/ui/commands/generic_chrome_command.h" @@ -122,11 +123,13 @@ } // Tests that all items are accessible on the bookmarks page. +// TODO(crbug.com/695749): Check if we need to rewrite this test for the new +// Bookmarks UI. - (void)testAccessibilityOnBookmarks { - if (base::FeatureList::IsEnabled( - bookmark_new_generation::features::kBookmarkNewGeneration)) { - EARL_GREY_TEST_SKIPPED(@"Only enabled with old Bookmarks UI."); - } + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndDisableFeature( + bookmark_new_generation::features::kBookmarkNewGeneration); + SelectNewTabPagePanel(ntp_home::BOOKMARKS_PANEL); chrome_test_util::VerifyAccessibilityForCurrentScreen(); DismissNewTabPagePanel();
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_handset_coordinator.mm b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_handset_coordinator.mm index fd69dbe1..9626afa 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_handset_coordinator.mm +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_handset_coordinator.mm
@@ -36,6 +36,7 @@ [[RecentTabsTableCoordinator alloc] initWithLoader:self.loader browserState:self.browserState dispatcher:self.dispatcher]; + self.tableCoordinator.handsetCommandHandler = self; [self.tableCoordinator start]; self.recentTabsViewController = [[RecentTabsHandsetViewController alloc] @@ -55,6 +56,9 @@ completion:nil]; [self.tableCoordinator dismissKeyboard]; [self.tableCoordinator dismissModals]; + [self.tableCoordinator stop]; + self.tableCoordinator = nil; + self.recentTabsViewController = nil; } #pragma mark - RecentTabsHandsetViewControllerCommand
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.h b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.h index e71568d4..308bb82d 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.h +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.h
@@ -15,6 +15,7 @@ } @protocol ApplicationCommands; +@protocol RecentTabsHandsetViewControllerCommand; @class RecentTabsTableViewController; @protocol UrlLoader; @@ -28,6 +29,11 @@ @interface RecentTabsTableCoordinator : ChromeCoordinator<NewTabPagePanelProtocol> +// Command handler for the command sent when the device is a handset. Nil +// otherwise. +@property(nonatomic, weak) id<RecentTabsHandsetViewControllerCommand> + handsetCommandHandler; + // Public initializer. - (instancetype)initWithLoader:(id<UrlLoader>)loader browserState:(ios::ChromeBrowserState*)browserState
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.mm b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.mm index b8a8b77..668a0b20 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.mm +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_coordinator.mm
@@ -54,6 +54,7 @@ // UITableViewController of any signed in state change. @implementation RecentTabsTableCoordinator +@synthesize handsetCommandHandler = _handsetCommandHandler; // Property declared in NewTabPagePanelProtocol. @synthesize delegate = _delegate; @@ -81,6 +82,7 @@ } - (void)start { + _tableViewController.handsetCommandHandler = self.handsetCommandHandler; [self initObservers]; [self reloadSessions]; }
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.h b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.h index 709cd923..cea788a 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.h +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.h
@@ -19,6 +19,7 @@ } @protocol ApplicationCommands; +@protocol RecentTabsHandsetViewControllerCommand; @protocol RecentTabsTableViewControllerDelegate<NSObject> // Tells the delegate when the table view content scrolled or changed size. @@ -46,6 +47,8 @@ : UITableViewController<UIGestureRecognizerDelegate> @property(nonatomic, weak) id<RecentTabsTableViewControllerDelegate> delegate; +@property(nonatomic, weak) id<RecentTabsHandsetViewControllerCommand> + handsetCommandHandler; // Designated initializer. The controller opens link with |loader|. // |browserState|
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.mm b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.mm index 5906a830..c32d19a 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.mm +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_table_view_controller.mm
@@ -28,6 +28,7 @@ #import "ios/chrome/browser/ui/commands/generic_chrome_command.h" #include "ios/chrome/browser/ui/commands/ios_command_ids.h" #import "ios/chrome/browser/ui/context_menu/context_menu_coordinator.h" +#import "ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_handset_view_controller.h" #include "ios/chrome/browser/ui/ntp/recent_tabs/synced_sessions.h" #import "ios/chrome/browser/ui/ntp/recent_tabs/views/generic_section_header_view.h" #import "ios/chrome/browser/ui/ntp/recent_tabs/views/header_of_collapsable_section_protocol.h" @@ -167,6 +168,7 @@ @synthesize delegate = delegate_; @synthesize dispatcher = _dispatcher; +@synthesize handsetCommandHandler = _handsetCommandHandler; - (instancetype)init { NOTREACHED(); @@ -363,13 +365,7 @@ } - (void)dismissRecentTabsModalWithCompletion:(ProceduralBlock)completion { - // Recent Tabs are modally presented only on iPhone. - if (!IsIPadIdiom()) { - // TODO(crbug.com/434683): Use a delegate to dismiss the table view. - [self.tableView.window.rootViewController - dismissViewControllerAnimated:YES - completion:completion]; - } + [self.handsetCommandHandler dismissRecentTabs]; } - (void)openTabWithContentOfDistantTab:
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/views/signed_in_sync_off_view.mm b/ios/chrome/browser/ui/ntp/recent_tabs/views/signed_in_sync_off_view.mm index 0649a25c..2379f16 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/views/signed_in_sync_off_view.mm +++ b/ios/chrome/browser/ui/ntp/recent_tabs/views/signed_in_sync_off_view.mm
@@ -74,8 +74,7 @@ } - (void)showSyncSettings { - [self chromeExecuteCommand:ios_internal::sync::GetSyncCommandForBrowserState( - _browserState)]; + [self chromeExecuteCommand:GetSyncCommandForBrowserState(_browserState)]; } @end
diff --git a/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.h b/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.h index 8c99cc2..ce7e087 100644 --- a/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.h +++ b/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.h
@@ -9,7 +9,6 @@ #include <memory> -#include "base/mac/scoped_nsobject.h" #include "base/strings/utf_string_conversions.h" #include "components/omnibox/browser/omnibox_view.h" #include "ios/shared/chrome/browser/ui/omnibox/location_bar_controller.h" @@ -24,7 +23,9 @@ class WebState; } +@protocol BrowserCommands; @protocol LocationBarDelegate; +@class PageInfoBridge; class OmniboxViewIOS; @class OmniboxClearButtonBridge; @protocol OmniboxPopupPositioner; @@ -39,7 +40,8 @@ ios::ChromeBrowserState* browser_state, id<PreloadProvider> preloader, id<OmniboxPopupPositioner> positioner, - id<LocationBarDelegate> delegate); + id<LocationBarDelegate> delegate, + id<BrowserCommands> dispatcher); ~LocationBarControllerImpl() override; // OmniboxEditController implementation @@ -82,13 +84,16 @@ void UpdateRightDecorations(); bool show_hint_text_; - base::scoped_nsobject<UIButton> clear_text_button_; + __strong UIButton* clear_text_button_; std::unique_ptr<OmniboxViewIOS> edit_view_; - base::scoped_nsobject<OmniboxClearButtonBridge> clear_button_bridge_; - // |field_| should be __weak but is included from non-ARC code. - __unsafe_unretained OmniboxTextFieldIOS* field_; - // |delegate_| should be __weak but is included from non-ARC code. - __unsafe_unretained id<LocationBarDelegate> delegate_; + __strong OmniboxClearButtonBridge* clear_button_bridge_; + // A bridge from a UIControl action to the dispatcher to display a page + // info popup. + __strong PageInfoBridge* page_info_bridge_; + __weak OmniboxTextFieldIOS* field_; + __weak id<LocationBarDelegate> delegate_; + // Dispatcher to send commands from the location bar. + __weak id<BrowserCommands> dispatcher_; bool is_showing_placeholder_while_collapsed_; };
diff --git a/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.mm b/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.mm index 8e4da991..7bad6d5 100644 --- a/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.mm +++ b/ios/chrome/browser/ui/omnibox/location_bar_controller_impl.mm
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/logging.h" +#include "base/mac/foundation_util.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/strings/string16.h" @@ -18,8 +19,7 @@ #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/browser/experimental_flags.h" -#include "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" -#include "ios/chrome/browser/ui/commands/ios_command_ids.h" +#import "ios/chrome/browser/ui/commands/browser_commands.h" #import "ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.h" #include "ios/chrome/browser/ui/omnibox/omnibox_view_ios.h" #include "ios/chrome/browser/ui/ui_util.h" @@ -113,19 +113,47 @@ @end +// An ObjC bridge class to map between a UIControl action and the +// dispatcher command that displays the page info popup. +@interface PageInfoBridge : NSObject + +// A method (in the form of a UIControl action) that invokes the command on the +// dispatcher to open the page info popup. +- (void)showPageInfoPopup:(id)sender; + +// The dispatcher to which commands invoked by the bridge will be sent. +@property(nonatomic, weak) id<BrowserCommands> dispatcher; + +@end + +@implementation PageInfoBridge +@synthesize dispatcher = _dispatcher; + +- (void)showPageInfoPopup:(id)sender { + UIView* view = base::mac::ObjCCastStrict<UIView>(sender); + CGPoint originPoint = + CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds)); + [self.dispatcher + showPageInfoForOriginPoint:[view convertPoint:originPoint toView:nil]]; +} + +@end + LocationBarControllerImpl::LocationBarControllerImpl( OmniboxTextFieldIOS* field, ios::ChromeBrowserState* browser_state, id<PreloadProvider> preloader, id<OmniboxPopupPositioner> positioner, - id<LocationBarDelegate> delegate) + id<LocationBarDelegate> delegate, + id<BrowserCommands> dispatcher) : edit_view_(base::MakeUnique<OmniboxViewIOS>(field, this, browser_state, preloader, positioner)), field_(field), - delegate_(delegate) { + delegate_(delegate), + dispatcher_(dispatcher) { DCHECK([delegate_ toolbarModel]); show_hint_text_ = true; @@ -264,15 +292,16 @@ } void LocationBarControllerImpl::InstallLocationIcon() { + page_info_bridge_ = [[PageInfoBridge alloc] init]; + page_info_bridge_.dispatcher = dispatcher_; // Set the placeholder for empty omnibox. UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; UIImage* image = NativeImage(IDR_IOS_OMNIBOX_SEARCH); [button setImage:image forState:UIControlStateNormal]; [button setFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; - [button addTarget:nil - action:@selector(chromeExecuteCommand:) + [button addTarget:page_info_bridge_ + action:@selector(showPageInfoPopup:) forControlEvents:UIControlEventTouchUpInside]; - [button setTag:IDC_SHOW_PAGE_INFO]; SetA11yLabelAndUiAutomationName( button, IDS_IOS_PAGE_INFO_SECURITY_BUTTON_ACCESSIBILITY_LABEL, @"Page Security Info"); @@ -307,12 +336,12 @@ frame.size = CGSizeMake(kClearTextButtonWidth, kClearTextButtonHeight); [button setFrame:frame]; - clear_button_bridge_.reset( - [[OmniboxClearButtonBridge alloc] initWithOmniboxView:edit_view_.get()]); + clear_button_bridge_ = + [[OmniboxClearButtonBridge alloc] initWithOmniboxView:edit_view_.get()]; [button addTarget:clear_button_bridge_ action:@selector(clearText) forControlEvents:UIControlEventTouchUpInside]; - clear_text_button_.reset(button); + clear_text_button_ = button; SetA11yLabelAndUiAutomationName(clear_text_button_, IDS_IOS_ACCNAME_CLEAR_TEXT, @"Clear Text");
diff --git a/ios/chrome/browser/ui/omnibox/page_info_view_controller.h b/ios/chrome/browser/ui/omnibox/page_info_view_controller.h index a64984d..c4f8dc1 100644 --- a/ios/chrome/browser/ui/omnibox/page_info_view_controller.h +++ b/ios/chrome/browser/ui/omnibox/page_info_view_controller.h
@@ -24,11 +24,11 @@ @interface PageInfoViewController : NSObject // Designated initializer. // The |source| parameter should be in the coordinate system of the parent. -// Typically this would be the frame of a button that resulted in this popup +// Typically this would be the midpoint of a button that resulted in this popup // being displayed. - (id)initWithModel:(PageInfoModel*)model bridge:(PageInfoModelObserver*)bridge - sourceFrame:(CGRect)source + sourcePoint:(CGPoint)sourcePoint parentView:(UIView*)parent; // Dispatcher for browser commands.
diff --git a/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm b/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm index 051bb5e..2c51565f 100644 --- a/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm +++ b/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm
@@ -14,8 +14,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "components/strings/grit/components_strings.h" #import "ios/chrome/browser/ui/animation_util.h" -#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" -#include "ios/chrome/browser/ui/commands/ios_command_ids.h" +#import "ios/chrome/browser/ui/commands/browser_commands.h" #import "ios/chrome/browser/ui/fancy_ui/bidi_container_view.h" #include "ios/chrome/browser/ui/omnibox/page_info_model.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_view.h" @@ -190,9 +189,6 @@ toSubviews:(NSMutableArray*)subviews atOffset:(CGFloat)offset; -// Sends the IDC_HIDE_PAGE_INFO command to hide the current popup. -- (void)close; - @property(nonatomic, strong) UIView* containerView; @property(nonatomic, strong) UIView* popupContainer; @end @@ -205,7 +201,7 @@ - (id)initWithModel:(PageInfoModel*)model bridge:(PageInfoModelObserver*)bridge - sourceFrame:(CGRect)source + sourcePoint:(CGPoint)sourcePoint parentView:(UIView*)parent { DCHECK(parent); self = [super init]; @@ -231,7 +227,7 @@ model_.reset(model); bridge_.reset(bridge); - origin_ = CGPointMake(CGRectGetMidX(source), CGRectGetMaxY(source)); + origin_ = sourcePoint; UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; @@ -256,7 +252,6 @@ [containerView_ addGestureRecognizer:touchDownRecognizer]; [containerView_ setBackgroundColor:[UIColor colorWithWhite:0 alpha:kShieldAlpha]]; - [containerView_ setTag:IDC_HIDE_PAGE_INFO]; [containerView_ setOpaque:NO]; [containerView_ setAlpha:0]; [containerView_ setAccessibilityViewIsModal:YES]; @@ -272,7 +267,7 @@ [parent addSubview:self.containerView]; [self performLayout]; - [self animatePageInfoViewIn:source]; + [self animatePageInfoViewIn:sourcePoint]; UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, containerView_); } @@ -406,11 +401,6 @@ [scrollView_ setContentSize:innerContainerView_.frame.size]; } -- (void)close { - // Refactoring note: _containerView.tag is IDC_HIDE_PAGE_INFO. - [containerView_ chromeExecuteCommand:containerView_]; -} - - (void)dismiss { [self animatePageInfoViewOut]; UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, @@ -481,17 +471,16 @@ return nil; case PageInfoModel::BUTTON_SHOW_SECURITY_HELP: messageId = IDS_LEARN_MORE; - button.tag = IDC_SHOW_SECURITY_HELP; accessibilityID = @"Learn more"; - [button addTarget:nil - action:@selector(chromeExecuteCommand:) + [button addTarget:self.dispatcher + action:@selector(showSecurityHelpPage) forControlEvents:UIControlEventTouchUpInside]; break; case PageInfoModel::BUTTON_RELOAD: messageId = IDS_IOS_PAGE_INFO_RELOAD; accessibilityID = @"Reload button"; - [button addTarget:self - action:@selector(close) + [button addTarget:self.dispatcher + action:@selector(hidePageInfo) forControlEvents:UIControlEventTouchUpInside]; [button addTarget:self.dispatcher action:@selector(reload) @@ -544,7 +533,7 @@ - (void)rootViewTapped:(UIGestureRecognizer*)sender { CGPoint pt = [sender locationInView:containerView_]; if (!CGRectContainsPoint([popupContainer_ frame], pt)) { - [self close]; + [self.dispatcher hidePageInfo]; } } @@ -554,10 +543,9 @@ return !CGRectContainsPoint([popupContainer_ frame], pt); } -- (void)animatePageInfoViewIn:(CGRect)source { +- (void)animatePageInfoViewIn:(CGPoint)sourcePoint { // Animate the info card itself. CATransform3D scaleTransform = PageInfoAnimationScale(); - CGPoint fromPoint = CGPointMake(CGRectGetMidX(source), CGRectGetMidY(source)); CABasicAnimation* scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; @@ -565,7 +553,7 @@ CABasicAnimation* positionAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; - [positionAnimation setFromValue:[NSValue valueWithCGPoint:fromPoint]]; + [positionAnimation setFromValue:[NSValue valueWithCGPoint:sourcePoint]]; CAAnimationGroup* sizeAnimation = [CAAnimationGroup animation]; [sizeAnimation setAnimations:@[ scaleAnimation, positionAnimation ]];
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm index 6cefbc79..a31ee8b 100644 --- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm +++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
@@ -264,12 +264,10 @@ kVoiceSearchWillHideNotification : kVoiceSearchWillShowNotification, kVoiceSearchBarViewButtonDeselectedNotification : kVoiceSearchBarViewButtonSelectedNotification, - ios_internal::kPageInfoWillHideNotification : - ios_internal::kPageInfoWillShowNotification, - ios_internal::kLocationBarResignsFirstResponderNotification : - ios_internal::kLocationBarBecomesFirstResponderNotification, - ios_internal::kSideSwipeDidStopNotification : - ios_internal::kSideSwipeWillStartNotification + kPageInfoWillHideNotification : kPageInfoWillShowNotification, + kLocationBarResignsFirstResponderNotification : + kLocationBarBecomesFirstResponderNotification, + kSideSwipeDidStopNotification : kSideSwipeWillStartNotification }; [self registerNotifications]; }
diff --git a/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item_unittest.mm index 0c9da325..0d736ce 100644 --- a/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item_unittest.mm +++ b/ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item_unittest.mm
@@ -20,10 +20,8 @@ AcceptedPaymentMethodsItem* item = [[AcceptedPaymentMethodsItem alloc] init]; NSString* message = @"Lorem ipsum dolor sit amet"; - NSArray* methodTypeIcons = @[ - ios_internal::CollectionViewTestImage(), - ios_internal::CollectionViewTestImage() - ]; + NSArray* methodTypeIcons = + @[ CollectionViewTestImage(), CollectionViewTestImage() ]; item.message = message; item.methodTypeIcons = methodTypeIcons;
diff --git a/ios/chrome/browser/ui/payments/cells/page_info_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/page_info_item_unittest.mm index 29eb222..cf8e1d5 100644 --- a/ios/chrome/browser/ui/payments/cells/page_info_item_unittest.mm +++ b/ios/chrome/browser/ui/payments/cells/page_info_item_unittest.mm
@@ -19,7 +19,7 @@ TEST(PaymentRequestPageInfoItemTest, TextLabels) { PageInfoItem* item = [[PageInfoItem alloc] init]; - UIImage* pageFavicon = ios_internal::CollectionViewTestImage(); + UIImage* pageFavicon = CollectionViewTestImage(); NSString* pageTitle = @"The Greatest Website Ever"; NSString* pageHost = @"http://localhost"; NSString* pageHostSecure = @"https://www.greatest.example.com";
diff --git a/ios/chrome/browser/ui/payments/cells/payment_method_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/payment_method_item_unittest.mm index 663acd6..d3895f2 100644 --- a/ios/chrome/browser/ui/payments/cells/payment_method_item_unittest.mm +++ b/ios/chrome/browser/ui/payments/cells/payment_method_item_unittest.mm
@@ -23,7 +23,7 @@ NSString* methodDetail = @"Bobs Your Uncle III, esq."; NSString* methodAddress = @"123 Bob St, Halifax, NS"; NSString* notification = @"More information is required."; - UIImage* methodTypeIcon = ios_internal::CollectionViewTestImage(); + UIImage* methodTypeIcon = CollectionViewTestImage(); MDCCollectionViewCellAccessoryType accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator;
diff --git a/ios/chrome/browser/ui/payments/cells/payments_text_item_unittest.mm b/ios/chrome/browser/ui/payments/cells/payments_text_item_unittest.mm index 5080b0b9..9a21700 100644 --- a/ios/chrome/browser/ui/payments/cells/payments_text_item_unittest.mm +++ b/ios/chrome/browser/ui/payments/cells/payments_text_item_unittest.mm
@@ -21,7 +21,7 @@ NSString* text = @"Lorem ipsum"; NSString* detailText = @"Dolor sit amet"; - UIImage* image = ios_internal::CollectionViewTestImage(); + UIImage* image = CollectionViewTestImage(); item.text = text; item.detailText = detailText;
diff --git a/ios/chrome/browser/ui/payments/payment_items_display_mediator.mm b/ios/chrome/browser/ui/payments/payment_items_display_mediator.mm index bcecf1ca..13154cbb 100644 --- a/ios/chrome/browser/ui/payments/payment_items_display_mediator.mm +++ b/ios/chrome/browser/ui/payments/payment_items_display_mediator.mm
@@ -57,14 +57,14 @@ - (CollectionViewItem*)totalItem { PriceItem* totalItem = [[PriceItem alloc] init]; totalItem.item = - base::SysUTF8ToNSString(_paymentRequest->payment_details().total.label); + base::SysUTF8ToNSString(_paymentRequest->payment_details().total->label); payments::CurrencyFormatter* currencyFormatter = _paymentRequest->GetOrCreateCurrencyFormatter(); totalItem.price = base::SysUTF16ToNSString(l10n_util::GetStringFUTF16( IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SHEET_TOTAL_FORMAT, base::UTF8ToUTF16(currencyFormatter->formatted_currency_code()), currencyFormatter->Format( - _paymentRequest->payment_details().total.amount.value))); + _paymentRequest->payment_details().total->amount.value))); return totalItem; }
diff --git a/ios/chrome/browser/ui/payments/payment_request_coordinator.mm b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm index 31a9c09..63d0c41 100644 --- a/ios/chrome/browser/ui/payments/payment_request_coordinator.mm +++ b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm
@@ -172,8 +172,10 @@ - (void)updatePaymentDetails:(payments::PaymentDetails)paymentDetails { [_updatePaymentSummaryItemTimer invalidate]; + DCHECK(_paymentRequest->payment_details().total); BOOL totalValueChanged = - (_paymentRequest->payment_details().total != paymentDetails.total); + (paymentDetails.total && + *_paymentRequest->payment_details().total != *paymentDetails.total); [_mediator setTotalValueChanged:totalValueChanged]; _paymentRequest->UpdatePaymentDetails(paymentDetails);
diff --git a/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm b/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm index 563efc7..8a4ab49 100644 --- a/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm +++ b/ios/chrome/browser/ui/payments/payment_request_journey_logger_egtest.mm
@@ -2,13 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/test/histogram_tester.h" +#include "base/ios/ios_util.h" #include "components/autofill/core/browser/autofill_profile.h" #include "components/autofill/core/browser/autofill_test_utils.h" #include "components/payments/core/journey_logger.h" #include "components/strings/grit/components_strings.h" #import "ios/chrome/browser/ui/payments/payment_request_egtest_base.h" +#import "ios/chrome/test/app/histogram_test_util.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" +#import "ios/chrome/test/earl_grey/chrome_matchers.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -23,7 +25,8 @@ @end @implementation PaymentRequestJourneyLoggerEGTest { - autofill::AutofillProfile _profile; + autofill::AutofillProfile _profile1; + autofill::AutofillProfile _profile2; autofill::CreditCard _creditCard1; } @@ -33,11 +36,14 @@ - (void)setUp { [super setUp]; - _profile = autofill::test::GetFullProfile(); - [self addAutofillProfile:_profile]; + _profile1 = autofill::test::GetFullProfile(); + [self addAutofillProfile:_profile1]; + + _profile2 = autofill::test::GetFullProfile2(); + [self addAutofillProfile:_profile2]; _creditCard1 = autofill::test::GetCreditCard(); - _creditCard1.set_billing_address_id(_profile.guid()); + _creditCard1.set_billing_address_id(_profile1.guid()); [self addCreditCard:_creditCard1]; } @@ -46,16 +52,16 @@ // Tests that the selected instrument metric is correctly logged when the // Payment Request is completed with a credit card. - (void)testSelectedPaymentMethod { - base::HistogramTester histogramTester; + chrome_test_util::HistogramTester histogramTester; [self loadTestPage:"payment_request_no_shipping_test.html"]; [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; [self payWithCreditCardUsingCVC:@"123"]; // Make sure the correct events were logged. - std::vector<base::Bucket> buckets = + std::vector<chrome_test_util::Bucket> buckets = histogramTester.GetAllSamples("PaymentRequest.Events"); - GREYAssertEqual(1U, buckets.size(), @"Only one bucket"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); GREYAssertTrue( @@ -92,4 +98,525 @@ GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); } +- (void)testOnlyBobpaySupported { + if (!base::ios::IsRunningOnOrLater(10, 3, 0)) { + EARL_GREY_TEST_SKIPPED( + @"Disabled on iOS versions below 10.3 because DOMException is not " + @"available."); + } + + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage:"payment_request_bobpay_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [self waitForWebViewContainingTexts:{"rejected"}]; + + FailureBlock failureBlock = ^(NSString* error) { + GREYFail(error); + }; + histogramTester.ExpectBucketCount( + "PaymentRequest.CheckoutFunnel.NoShow", + JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD, 1, + failureBlock); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertFalse( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertFalse( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertFalse( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertFalse( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + +- (void)testShowSameRequest { + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage:"payment_request_multiple_show_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [ChromeEarlGrey tapWebViewElementWithID:@"showAgain"]; + [self payWithCreditCardUsingCVC:@"123"]; + + // Trying to show the same request twice is not considered a concurrent + // request. + GREYAssertTrue( + histogramTester.GetAllSamples("PaymentRequest.CheckoutFunnel.NoShow") + .empty(), + @""); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + +// TODO(crbug.com/602666): add a test to verify that the correct metrics get +// recorded if the page tries to show() a second PaymentRequest, similar to +// PaymentRequestJourneyLoggerMultipleShowTest.StartNewRequest from +// payment_request_journey_logger_browsertest.cc. + +// Tests that the correct number of suggestions shown for each section is logged +// when a Payment Request is completed. +- (void)testAllSectionStats_NumberOfSuggestionsShown_Completed { + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage: + "payment_request_contact_details_and_free_shipping_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [self payWithCreditCardUsingCVC:@"123"]; + + FailureBlock failureBlock = ^(NSString* error) { + GREYFail(error); + }; + + // Expect the appropriate number of suggestions shown to be logged. + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.PaymentMethod.Completed", 1, 1, + failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ShippingAddress.Completed", 2, 1, + failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ContactInfo.Completed", 2, 1, + failureBlock); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + +// Tests that the correct number of suggestions shown for each section is logged +// when a Payment Request is aborted by the user. +- (void)testAllSectionStats_NumberOfSuggestionsShown_UserAborted { + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage: + "payment_request_contact_details_and_free_shipping_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [[EarlGrey + selectElementWithMatcher:chrome_test_util::ButtonWithAccessibilityLabelId( + IDS_CANCEL)] performAction:grey_tap()]; + + FailureBlock failureBlock = ^(NSString* error) { + GREYFail(error); + }; + + // Expect the appropriate number of suggestions shown to be logged. + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.PaymentMethod.UserAborted", 1, 1, + failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ShippingAddress.UserAborted", 2, + 1, failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ContactInfo.UserAborted", 2, 1, + failureBlock); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertFalse( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + +// Tests that the correct number of suggestions shown for each section is logged +// when a Payment Request is completed. +- (void)testNoShippingSectionStats_NumberOfSuggestionsShown_Completed { + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage:"payment_request_contact_details_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [self payWithCreditCardUsingCVC:@"123"]; + + FailureBlock failureBlock = ^(NSString* error) { + GREYFail(error); + }; + + // Expect the appropriate number of suggestions shown to be logged. + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.PaymentMethod.Completed", 1, 1, + failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ContactInfo.Completed", 2, 1, + failureBlock); + + // There should be no log for shipping address since it was not requested. + histogramTester.ExpectTotalCount( + "PaymentRequest.NumberOfSuggestionsShown.ShippingAddress.Completed", 0, + failureBlock); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + +// Tests that the correct number of suggestions shown for each section is logged +// when a Payment Request is aborted by the user. +- (void)testNoShippingSectionStats_NumberOfSuggestionsShown_UserAborted { + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage:"payment_request_contact_details_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [[EarlGrey + selectElementWithMatcher:chrome_test_util::ButtonWithAccessibilityLabelId( + IDS_CANCEL)] performAction:grey_tap()]; + + FailureBlock failureBlock = ^(NSString* error) { + GREYFail(error); + }; + + // Expect the appropriate number of suggestions shown to be logged. + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.PaymentMethod.UserAborted", 1, 1, + failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ContactInfo.UserAborted", 2, 1, + failureBlock); + + // There should be no log for shipping address since it was not requested. + histogramTester.ExpectTotalCount( + "PaymentRequest.NumberOfSuggestionsShown.ShippingAddress.UserAborted", 0, + failureBlock); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertFalse( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + +// Tests that the correct number of suggestions shown for each section is logged +// when a Payment Request is completed. +- (void)testNoContactDetailSectionStats_NumberOfSuggestionsShown_Completed { + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage:"payment_request_free_shipping_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [self payWithCreditCardUsingCVC:@"123"]; + + FailureBlock failureBlock = ^(NSString* error) { + GREYFail(error); + }; + + // Expect the appropriate number of suggestions shown to be logged. + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.PaymentMethod.Completed", 1, 1, + failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ShippingAddress.Completed", 2, 1, + failureBlock); + + // There should be no log for contact info since it was not requested. + histogramTester.ExpectTotalCount( + "PaymentRequest.NumberOfSuggestionsShown.ContactInfo.Completed", 0, + failureBlock); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + +// Tests that the correct number of suggestions shown for each section is logged +// when a Payment Request is aborted by the user. +- (void)testNoContactDetailSectionStats_NumberOfSuggestionsShown_UserAborted { + chrome_test_util::HistogramTester histogramTester; + + [self loadTestPage:"payment_request_free_shipping_test.html"]; + [ChromeEarlGrey tapWebViewElementWithID:@"buy"]; + [[EarlGrey + selectElementWithMatcher:chrome_test_util::ButtonWithAccessibilityLabelId( + IDS_CANCEL)] performAction:grey_tap()]; + + FailureBlock failureBlock = ^(NSString* error) { + GREYFail(error); + }; + + // Expect the appropriate number of suggestions shown to be logged. + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.PaymentMethod.UserAborted", 1, 1, + failureBlock); + histogramTester.ExpectUniqueSample( + "PaymentRequest.NumberOfSuggestionsShown.ShippingAddress.UserAborted", 2, + 1, failureBlock); + + // There should be no log for contact info since it was not requested. + histogramTester.ExpectTotalCount( + "PaymentRequest.NumberOfSuggestionsShown.ContactInfo.UserAborted", 0, + failureBlock); + + // Make sure the correct events were logged. + std::vector<chrome_test_util::Bucket> buckets = + histogramTester.GetAllSamples("PaymentRequest.Events"); + GREYAssertEqual(1U, buckets.size(), @"Exactly one bucket"); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_SHOWN, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_PAY_CLICKED, @""); + GREYAssertFalse( + buckets[0].min & JourneyLogger::EVENT_RECEIVED_INSTRUMENT_DETAILS, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SKIPPED_SHOW, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_COMPLETED, @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_USER_ABORTED, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_OTHER_ABORTED, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_INITIAL_FORM_OF_PAYMENT, @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_HAD_NECESSARY_COMPLETE_SUGGESTIONS, + @""); + GREYAssertTrue(buckets[0].min & JourneyLogger::EVENT_REQUEST_SHIPPING, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_NAME, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_PHONE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_PAYER_EMAIL, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_FALSE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_CAN_MAKE_PAYMENT_TRUE, + @""); + GREYAssertTrue( + buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_BASIC_CARD, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_GOOGLE, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_REQUEST_METHOD_OTHER, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_CREDIT_CARD, + @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_GOOGLE, @""); + GREYAssertFalse(buckets[0].min & JourneyLogger::EVENT_SELECTED_OTHER, @""); +} + @end
diff --git a/ios/chrome/browser/ui/payments/payment_request_manager.mm b/ios/chrome/browser/ui/payments/payment_request_manager.mm index b9a3d61b..520a40f 100644 --- a/ios/chrome/browser/ui/payments/payment_request_manager.mm +++ b/ios/chrome/browser/ui/payments/payment_request_manager.mm
@@ -315,8 +315,12 @@ } - (void)cancelRequest { - if (!_pendingPaymentRequest) + if (!_pendingPaymentRequest || + _pendingPaymentRequest->state() != + payments::PaymentRequest::State::INTERACTIVE) { return; + } + _pendingPaymentRequest->journey_logger().SetAborted( payments::JourneyLogger::ABORT_REASON_MERCHANT_NAVIGATION); @@ -328,6 +332,11 @@ callback: (ProceduralBlockWithBool)callback { DCHECK(_pendingPaymentRequest); + DCHECK(_pendingPaymentRequest->state() == + payments::PaymentRequest::State::INTERACTIVE); + + _pendingPaymentRequest->set_updating(false); + _pendingPaymentRequest->set_state(payments::PaymentRequest::State::CLOSED); _pendingPaymentRequest = nullptr; [self resetIOSPaymentInstrumentLauncherDelegate]; @@ -465,10 +474,30 @@ return YES; } +- (void)abortPaymentRequest:(payments::PaymentRequest*)paymentRequest + abortReason:(payments::JourneyLogger::AbortReason)abortReason + errorName:(NSString*)errorName + errorMessage:(NSString*)errorMessage + completionHandler:(ProceduralBlockWithBool)completionHandler { + LOG(ERROR) << "Request promise rejected (" << abortReason + << "): " << base::SysNSStringToUTF16(errorName) << ":" + << base::SysNSStringToUTF16(errorMessage); + + paymentRequest->journey_logger().SetAborted(abortReason); + + [_paymentRequestJsManager + rejectRequestPromiseWithErrorName:errorName + errorMessage:errorMessage + completionHandler:completionHandler]; +} + - (BOOL)handleRequestShow:(const base::DictionaryValue&)message { payments::PaymentRequest* paymentRequest = [self paymentRequestFromMessage:message]; if (!paymentRequest) { + LOG(ERROR) << "Request promise rejected: " + << base::SysNSStringToUTF16(kInvalidStateError) + << ": Unable to get PaymentRequest from message"; [_paymentRequestJsManager rejectRequestPromiseWithErrorName:kInvalidStateError errorMessage:@"Cannot show the payment request" @@ -477,29 +506,31 @@ } if (![self webStateContentIsSecureHTML]) { - [_paymentRequestJsManager - rejectRequestPromiseWithErrorName:kNotSupportedError - errorMessage:@"Must be in a secure context" - completionHandler:nil]; + [self abortPaymentRequest:paymentRequest + abortReason:payments::JourneyLogger::ABORT_REASON_OTHER + errorName:kNotSupportedError + errorMessage:@"Must be in a secure context" + completionHandler:nil]; return YES; } if (paymentRequest->state() != payments::PaymentRequest::State::CREATED) { - [_paymentRequestJsManager - rejectRequestPromiseWithErrorName:kInvalidStateError - errorMessage:@"Already called show() once" - completionHandler:nil]; + [self abortPaymentRequest:paymentRequest + abortReason:payments::JourneyLogger::ABORT_REASON_OTHER + errorName:kInvalidStateError + errorMessage:@"Already called show() once" + completionHandler:nil]; + return YES; } if (_pendingPaymentRequest) { paymentRequest->journey_logger().SetNotShown( payments::JourneyLogger::NOT_SHOWN_REASON_CONCURRENT_REQUESTS); - [_paymentRequestJsManager - rejectRequestPromiseWithErrorName:kAbortError - errorMessage: - @"Only one PaymentRequest may be shown at a " - @"time" - completionHandler:nil]; + [self abortPaymentRequest:paymentRequest + abortReason:payments::JourneyLogger::ABORT_REASON_OTHER + errorName:kAbortError + errorMessage:@"Only one PaymentRequest may be shown at a time" + completionHandler:nil]; return YES; } @@ -509,10 +540,11 @@ paymentRequest->url_payment_method_identifiers().empty())) { paymentRequest->journey_logger().SetNotShown( payments::JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD); - [_paymentRequestJsManager - rejectRequestPromiseWithErrorName:kNotSupportedError - errorMessage:@"The payment method is not supported" - completionHandler:nil]; + [self abortPaymentRequest:paymentRequest + abortReason:payments::JourneyLogger::ABORT_REASON_OTHER + errorName:kNotSupportedError + errorMessage:@"The payment method is not supported" + completionHandler:nil]; return YES; } @@ -521,34 +553,6 @@ paymentRequest->journey_logger().SetEventOccurred( payments::JourneyLogger::EVENT_SHOWN); - paymentRequest->journey_logger().SetRequestedInformation( - paymentRequest->request_shipping(), paymentRequest->request_payer_email(), - paymentRequest->request_payer_phone(), - paymentRequest->request_payer_name()); - - // Log metrics around which payment methods are requested by the merchant. - const GURL kGooglePayUrl("https://google.com/pay"); - const GURL kAndroidPayUrl("https://android.com/pay"); - // Looking for payment methods that are NOT Google-related as well as the - // Google-related ones. - bool requestedMethodGoogle = false; - bool requestedMethodOther = false; - for (const GURL& url_payment_method : - paymentRequest->url_payment_method_identifiers()) { - if (url_payment_method == kGooglePayUrl || - url_payment_method == kAndroidPayUrl) { - requestedMethodGoogle = true; - } else { - requestedMethodOther = true; - } - } - - paymentRequest->journey_logger().SetRequestedPaymentMethodTypes( - /*requested_basic_card=*/!paymentRequest->supported_card_networks() - .empty(), - /*requested_method_google=*/ - requestedMethodGoogle, - /*requested_method_other=*/requestedMethodOther); UIImage* pageFavicon = nil; web::NavigationItem* navigationItem = @@ -581,11 +585,12 @@ } - (BOOL)handleRequestAbort:(const base::DictionaryValue&)message { - DCHECK(_pendingPaymentRequest); + if (!_pendingPaymentRequest || + _pendingPaymentRequest->state() != + payments::PaymentRequest::State::INTERACTIVE) { + return YES; + } - _pendingPaymentRequest->set_updating(false); - - _pendingPaymentRequest->set_state(payments::PaymentRequest::State::CLOSED); _pendingPaymentRequest->journey_logger().SetAborted( payments::JourneyLogger::ABORT_REASON_ABORTED_BY_MERCHANT); @@ -673,7 +678,12 @@ } - (BOOL)displayErrorThenCancelRequest { - DCHECK(_pendingPaymentRequest); + if (!_pendingPaymentRequest || + _pendingPaymentRequest->state() != + payments::PaymentRequest::State::INTERACTIVE) { + return YES; + } + _pendingPaymentRequest->journey_logger().SetAborted( payments::JourneyLogger::ABORT_REASON_ABORTED_BY_USER);
diff --git a/ios/chrome/browser/ui/payments/payment_request_mediator.mm b/ios/chrome/browser/ui/payments/payment_request_mediator.mm index 307c448..50eb606 100644 --- a/ios/chrome/browser/ui/payments/payment_request_mediator.mm +++ b/ios/chrome/browser/ui/payments/payment_request_mediator.mm
@@ -108,14 +108,14 @@ - (CollectionViewItem*)paymentSummaryItem { PriceItem* item = [[PriceItem alloc] init]; item.item = base::SysUTF8ToNSString( - self.paymentRequest->payment_details().total.label); + self.paymentRequest->payment_details().total->label); payments::CurrencyFormatter* currencyFormatter = self.paymentRequest->GetOrCreateCurrencyFormatter(); item.price = base::SysUTF16ToNSString(l10n_util::GetStringFUTF16( IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SHEET_TOTAL_FORMAT, base::UTF8ToUTF16(currencyFormatter->formatted_currency_code()), currencyFormatter->Format( - self.paymentRequest->payment_details().total.amount.value))); + self.paymentRequest->payment_details().total->amount.value))); item.notification = self.totalValueChanged ? l10n_util::GetNSString(IDS_PAYMENTS_UPDATED_LABEL) : nil;
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm index f9ba470..1ab558b 100644 --- a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm +++ b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
@@ -11,7 +11,6 @@ #include "components/ui_metrics/sadtab_metrics_types.h" #include "ios/chrome/browser/chrome_url_constants.h" #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" -#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" #import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/open_url_command.h" #include "ios/chrome/browser/ui/rtl_geometry.h" @@ -325,7 +324,7 @@ action:^(const GURL& URL) { OpenUrlCommand* command = [[OpenUrlCommand alloc] initWithURLFromChrome:URL]; - [weakSelf chromeExecuteCommand:command]; + [weakSelf.dispatcher openURL:command]; }]; _footerLabelLinkController.linkFont =
diff --git a/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm b/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm index aa2d49dc..2c43422 100644 --- a/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/about_chrome_collection_view_controller.mm
@@ -155,7 +155,7 @@ #pragma mark Private methods - (void)openURL:(GURL)URL { - ios_internal_settings::BlockToOpenURL(self, self.dispatcher)(URL); + BlockToOpenURL(self, self.dispatcher)(URL); } - (void)copyVersionToPasteboard {
diff --git a/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm b/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm index 21d331bc..e85b36f 100644 --- a/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/accounts_collection_view_controller.mm
@@ -294,14 +294,12 @@ } ChromeIdentity* identity = [self authService]->GetAuthenticatedIdentity(); - bool hasSyncError = !ios_internal::sync::IsTransientSyncError( - syncSetupService->GetSyncServiceState()); + bool hasSyncError = + !IsTransientSyncError(syncSetupService->GetSyncServiceState()); bool hasMDMError = [self authService]->HasCachedMDMErrorForIdentity(identity); if (hasSyncError || hasMDMError) { syncItem.image = [UIImage imageNamed:@"settings_error"]; - syncItem.detailText = - ios_internal::sync::GetSyncErrorDescriptionForBrowserState( - _browserState); + syncItem.detailText = GetSyncErrorDescriptionForBrowserState(_browserState); syncItem.shouldDisplayError = YES; } else { syncItem.image = [UIImage imageNamed:@"settings_sync"];
diff --git a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm index 7d6a12e5..8713eb06 100644 --- a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm
@@ -462,8 +462,7 @@ IDS_IOS_SETTINGS_SET_UP_SCREENLOCK_CONTENT) preferredStyle:UIAlertControllerStyleAlert]; - ProceduralBlockWithURL blockOpenURL = - ios_internal_settings::BlockToOpenURL(self, self.dispatcher); + ProceduralBlockWithURL blockOpenURL = BlockToOpenURL(self, self.dispatcher); UIAlertAction* learnAction = [UIAlertAction actionWithTitle:l10n_util::GetNSString( IDS_IOS_SETTINGS_SET_UP_SCREENLOCK_LEARN_HOW)
diff --git a/ios/chrome/browser/ui/settings/reauthentication_module.mm b/ios/chrome/browser/ui/settings/reauthentication_module.mm index 336331b..cd369b1 100644 --- a/ios/chrome/browser/ui/settings/reauthentication_module.mm +++ b/ios/chrome/browser/ui/settings/reauthentication_module.mm
@@ -7,6 +7,7 @@ #import "base/logging.h" #include "base/metrics/histogram_macros.h" +#include "base/strings/sys_string_conversions.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -59,6 +60,11 @@ __weak ReauthenticationModule* weakSelf = self; void (^replyBlock)(BOOL, NSError*) = ^(BOOL success, NSError* error) { dispatch_async(dispatch_get_main_queue(), ^{ + if (error) { + // TODO(crbug.com/760235): remove once it's fixed. + LOG(ERROR) << "Reauth error: " + << base::SysNSStringToUTF8(error.localizedDescription); + } ReauthenticationModule* strongSelf = weakSelf; if (!strongSelf) return;
diff --git a/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm index 590d97a..cf76e44 100644 --- a/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm
@@ -99,7 +99,7 @@ const CGFloat kAccountProfilePhotoDimension = 40.0f; -const int kAutomaticSigninPromoViewDismissCount = 20; +const int kAutomaticSigninPromoViewDismissCount = 5; typedef NS_ENUM(NSInteger, SectionIdentifier) { SectionIdentifierSignIn = kSectionIdentifierEnumZero, @@ -949,12 +949,10 @@ return; } identityAccountItem.shouldDisplayError = - !ios_internal::sync::IsTransientSyncError( - syncSetupService->GetSyncServiceState()); + !IsTransientSyncError(syncSetupService->GetSyncServiceState()); if (identityAccountItem.shouldDisplayError) { identityAccountItem.detailText = - ios_internal::sync::GetSyncErrorDescriptionForBrowserState( - _browserState); + GetSyncErrorDescriptionForBrowserState(_browserState); } else { identityAccountItem.detailText = syncSetupService->IsSyncEnabled()
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm index 42981cef..4b292f5 100644 --- a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
@@ -464,9 +464,6 @@ - (void)chromeExecuteCommand:(id)sender { switch ([sender tag]) { - case IDC_OPEN_URL: - NOTREACHED() << "You should probably use the command " - << "IDC_CLOSE_SETTINGS_AND_OPEN_URL instead of IDC_OPEN_URL"; case IDC_SHOW_SIGNIN_IOS: // Sign-in actions can only happen on the main browser state (not on // incognito browser state), which is unique. The command can just be
diff --git a/ios/chrome/browser/ui/settings/settings_utils.h b/ios/chrome/browser/ui/settings/settings_utils.h index 8a52135..68b249d 100644 --- a/ios/chrome/browser/ui/settings/settings_utils.h +++ b/ios/chrome/browser/ui/settings/settings_utils.h
@@ -10,13 +10,19 @@ #import "ios/chrome/browser/procedural_block_types.h" @protocol ApplicationCommands; -namespace ios_internal_settings { // Returns a ProceduralBlockWithURL that uses the dispatcher and opens url // (parameter to the block) in a new tab. ProceduralBlockWithURL BlockToOpenURL(UIResponder* responder, id<ApplicationCommands> dispatcher); +namespace ios_internal_settings { +// Returns a ProceduralBlockWithURL that uses the dispatcher and opens url +// (parameter to the block) in a new tab. Forwards to ::BlockToOpenURL. +// TODO(crbug.com/677941): remove this declaration once ios_internal code +// has been fixed to use the function in the global namespace instead. +ProceduralBlockWithURL BlockToOpenURL(UIResponder* responder, + id<ApplicationCommands> dispatcher); } // namespace ios_internal_settings #endif // IOS_CHROME_BROWSER_UI_SETTINGS_SETTINGS_UTILS_H_
diff --git a/ios/chrome/browser/ui/settings/settings_utils.mm b/ios/chrome/browser/ui/settings/settings_utils.mm index 59f99892..382d8e4 100644 --- a/ios/chrome/browser/ui/settings/settings_utils.mm +++ b/ios/chrome/browser/ui/settings/settings_utils.mm
@@ -11,8 +11,6 @@ #error "This file requires ARC support." #endif -namespace ios_internal_settings { - ProceduralBlockWithURL BlockToOpenURL(UIResponder* responder, id<ApplicationCommands> dispatcher) { __weak UIResponder* weakResponder = responder; @@ -28,4 +26,9 @@ return [blockToOpenURL copy]; } +namespace ios_internal_settings { +ProceduralBlockWithURL BlockToOpenURL(UIResponder* responder, + id<ApplicationCommands> dispatcher) { + return ::BlockToOpenURL(responder, dispatcher); +} } // namespace ios_internal_settings
diff --git a/ios/chrome/browser/ui/settings/sync_create_passphrase_collection_view_controller.mm b/ios/chrome/browser/ui/settings/sync_create_passphrase_collection_view_controller.mm index a967e5a1..0045983e 100644 --- a/ios/chrome/browser/ui/settings/sync_create_passphrase_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync_create_passphrase_collection_view_controller.mm
@@ -21,7 +21,7 @@ #error "This file requires ARC support." #endif -using namespace ios_internal::sync_encryption_passphrase; +using namespace sync_encryption_passphrase; @interface SyncCreatePassphraseCollectionViewController () { UITextField* confirmPassphrase_;
diff --git a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h index af4f92504..0acdc49a 100644 --- a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h +++ b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.h
@@ -15,7 +15,6 @@ class ChromeBrowserState; } // namespace ios -namespace ios_internal { namespace sync_encryption_passphrase { typedef NS_ENUM(NSInteger, SectionIdentifier) { SectionIdentifierPassphrase = kSectionIdentifierEnumZero, @@ -29,7 +28,6 @@ ItemTypeFooter, }; } // namespace sync_encryption_passphrase -} // namespace ios_internal // Controller to allow user to specify encryption passphrase for Sync. @interface SyncEncryptionPassphraseCollectionViewController
diff --git a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm index c774e86..d6d5abb2 100644 --- a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller.mm
@@ -47,7 +47,7 @@ #error "This file requires ARC support." #endif -using namespace ios_internal::sync_encryption_passphrase; +using namespace sync_encryption_passphrase; namespace { @@ -165,7 +165,7 @@ if (syncServiceState == SyncSetupService::kSyncServiceNeedsPassphrase) return nil; - return ios_internal::sync::GetSyncErrorMessageForBrowserState(browserState_); + return GetSyncErrorMessageForBrowserState(browserState_); } #pragma mark - View lifecycle
diff --git a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller_unittest.mm index f13f0a3..13c0d24 100644 --- a/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/sync_encryption_passphrase_collection_view_controller_unittest.mm
@@ -231,8 +231,7 @@ TurnSyncPassphraseErrorOn(); EXPECT_FALSE([sync_controller syncErrorMessage]); TurnSyncOtherErrorOn(otherState); - EXPECT_NSEQ(ios_internal::sync::GetSyncErrorMessageForBrowserState( - chrome_browser_state_.get()), + EXPECT_NSEQ(GetSyncErrorMessageForBrowserState(chrome_browser_state_.get()), [sync_controller syncErrorMessage]); TurnSyncErrorOff(); EXPECT_FALSE([sync_controller syncErrorMessage]);
diff --git a/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm index 57513fc..f1c9cf0 100644 --- a/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync_settings_collection_view_controller.mm
@@ -341,8 +341,7 @@ [[CollectionViewAccountItem alloc] initWithType:ItemTypeSyncError]; syncErrorItem.text = l10n_util::GetNSString(IDS_IOS_SYNC_ERROR_TITLE); syncErrorItem.image = [UIImage imageNamed:@"settings_error"]; - syncErrorItem.detailText = - ios_internal::sync::GetSyncErrorMessageForBrowserState(_browserState); + syncErrorItem.detailText = GetSyncErrorMessageForBrowserState(_browserState); return syncErrorItem; } @@ -591,8 +590,7 @@ return; } - GenericChromeCommand* command = - ios_internal::sync::GetSyncCommandForBrowserState(_browserState); + GenericChromeCommand* command = GetSyncCommandForBrowserState(_browserState); [self chromeExecuteCommand:command]; }
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h index 0a13aae..c153f68 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h
@@ -17,12 +17,10 @@ @class CardSideSwipeView; @class SideSwipeGestureRecognizer; -namespace ios_internal { // Notification sent when the user starts a side swipe (on tablet). extern NSString* const kSideSwipeWillStartNotification; // Notification sent when the user finishes a side swipe (on tablet). extern NSString* const kSideSwipeDidStopNotification; -} // namespace ios_internal // A protocol for the Side Swipe controller sources. @protocol SideSwipeContentProvider
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm index 90e4113..bd7394a 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
@@ -30,12 +30,10 @@ #error "This file requires ARC support." #endif -namespace ios_internal { NSString* const kSideSwipeWillStartNotification = @"kSideSwipeWillStartNotification"; NSString* const kSideSwipeDidStopNotification = @"kSideSwipeDidStopNotification"; -} // namespace ios_internal namespace { @@ -309,7 +307,7 @@ [[model_ currentTab] updateFullscreenWithToolbarVisible:YES]; [[model_ currentTab] updateSnapshotWithOverlay:YES visibleFrameOnly:YES]; [[NSNotificationCenter defaultCenter] - postNotificationName:ios_internal::kSideSwipeWillStartNotification + postNotificationName:kSideSwipeWillStartNotification object:nil]; [[swipeDelegate_ tabStripController] setHighlightsSelectedTab:YES]; startingTabIndex_ = [model_ indexOfTab:[model_ currentTab]]; @@ -365,7 +363,7 @@ [[swipeDelegate_ tabStripController] setHighlightsSelectedTab:NO]; [self deleteGreyCache]; [[NSNotificationCenter defaultCenter] - postNotificationName:ios_internal::kSideSwipeDidStopNotification + postNotificationName:kSideSwipeDidStopNotification object:nil]; } }
diff --git a/ios/chrome/browser/ui/stack_view/card_view.h b/ios/chrome/browser/ui/stack_view/card_view.h index 137dec21..e0932ac 100644 --- a/ios/chrome/browser/ui/stack_view/card_view.h +++ b/ios/chrome/browser/ui/stack_view/card_view.h
@@ -110,8 +110,8 @@ // Removes the top-level frame animation added by // |-animateFromBeginFrame:toEndFrame:tabAnimationStyle:|. This is necessary to // avoid animation glitches that occur when a card is closed mid-animation, as -// ios_internal::page_animation_util::AnimateOutWithCompletion updates the -// CardView's anchorPoint. +// page_animation_util::AnimateOutWithCompletion updates the CardView's +// anchorPoint. - (void)removeFrameAnimation; // Adds the dummy toolbar background view to the back of the card tab view.
diff --git a/ios/chrome/browser/ui/stack_view/page_animation_util.h b/ios/chrome/browser/ui/stack_view/page_animation_util.h index d967b44..452c2159 100644 --- a/ios/chrome/browser/ui/stack_view/page_animation_util.h +++ b/ios/chrome/browser/ui/stack_view/page_animation_util.h
@@ -15,8 +15,6 @@ // The expected use is to create a view with the same size and position as the // page content area, add it to the view hierarchy, then call the appropriate // animation method. -namespace ios_internal { - namespace page_animation_util { // The standard margin between a card and the edge of the content view, in @@ -103,6 +101,4 @@ } // namespace page_animation_util -} // namespace ios_internal - #endif // IOS_CHROME_BROWSER_UI_STACK_VIEW_PAGE_ANIMATION_UTIL_H_
diff --git a/ios/chrome/browser/ui/stack_view/page_animation_util.mm b/ios/chrome/browser/ui/stack_view/page_animation_util.mm index a43792e..226cb7f4 100644 --- a/ios/chrome/browser/ui/stack_view/page_animation_util.mm +++ b/ios/chrome/browser/ui/stack_view/page_animation_util.mm
@@ -75,8 +75,6 @@ @end -namespace ios_internal { - namespace page_animation_util { const CGFloat kCardMargin = 14.0; @@ -471,5 +469,3 @@ } } // namespace page_animation_util - -} // namespace ios_internal
diff --git a/ios/chrome/browser/ui/stack_view/stack_view_controller.mm b/ios/chrome/browser/ui/stack_view/stack_view_controller.mm index 56940ff6..88b48641 100644 --- a/ios/chrome/browser/ui/stack_view/stack_view_controller.mm +++ b/ios/chrome/browser/ui/stack_view/stack_view_controller.mm
@@ -1029,8 +1029,8 @@ completion(); }; BOOL isPortrait = UIInterfaceOrientationIsPortrait(_lastInterfaceOrientation); - ios_internal::page_animation_util::AnimateOutWithCompletion( - cardView, delay, clockwise, isPortrait, toDoWhenDone); + page_animation_util::AnimateOutWithCompletion(cardView, delay, clockwise, + isPortrait, toDoWhenDone); } - (void)removeAllCardsFromSet:(CardSet*)cardSet { @@ -1121,10 +1121,10 @@ // fan-out, margins, etc. should stay the same even if the cards change size // due to rotation. [self updateDeckOrientationWithAnimation:NO]; - [_mainCardSet configureLayoutParametersWithMargin: - ios_internal::page_animation_util::kCardMargin]; - [_otrCardSet configureLayoutParametersWithMargin: - ios_internal::page_animation_util::kCardMargin]; + [_mainCardSet + configureLayoutParametersWithMargin:page_animation_util::kCardMargin]; + [_otrCardSet + configureLayoutParametersWithMargin:page_animation_util::kCardMargin]; } - (void)updateDeckOrientationWithAnimation:(BOOL)animates { @@ -1197,9 +1197,8 @@ center += viewportBreadth - fullDisplayBreadth; // Adjust the set's center if it's not the active card set. if (cardSet != _activeCardSet) { - CGFloat inactiveSetDelta = fullDisplayBreadth - - ios_internal::page_animation_util::kCardMargin + - kCardFrameInset; + CGFloat inactiveSetDelta = + fullDisplayBreadth - page_animation_util::kCardMargin + kCardFrameInset; center = [self isCurrentSetIncognito] ? center - inactiveSetDelta : center + inactiveSetDelta; } @@ -1369,8 +1368,7 @@ - (CGSize)cardSizeForBreadth:(CGFloat)breadth { BOOL isPortrait = IsPortrait(); - CGFloat cardBreadth = - breadth - 2 * ios_internal::page_animation_util::kCardMargin; + CGFloat cardBreadth = breadth - 2 * page_animation_util::kCardMargin; CGFloat contentBreadthInset = isPortrait ? kCardImageInsets.left + kCardImageInsets.right : kCardImageInsets.top + kCardImageInsets.bottom; @@ -1385,9 +1383,8 @@ CGFloat cardLength = contentLength + contentLengthInset; // Truncate the card length so that the entire card can be visible at once. CGFloat viewLength = isPortrait ? viewSize.height : viewSize.width; - CGFloat truncatedCardLength = viewLength - - ios_internal::page_animation_util::kCardMargin - - kCardBottomPadding; + CGFloat truncatedCardLength = + viewLength - page_animation_util::kCardMargin - kCardBottomPadding; cardLength = std::min(cardLength, truncatedCardLength); return [self sizeForScrollLength:cardLength breadth:cardBreadth]; } @@ -1987,7 +1984,7 @@ LayoutRect cardLayout = LayoutRectZero; cardLayout.boundingWidth = CGRectGetWidth(activeSetView.bounds); cardLayout.size = [self cardSize]; - cardLayout.position.leading = ios_internal::page_animation_util::kCardMargin; + cardLayout.position.leading = page_animation_util::kCardMargin; cardLayout.position.originY = -kCardImageInsets.top; for (StackCard* card in _activeCardSet.cards) { @@ -2097,7 +2094,7 @@ CGPoint origin = _lastTapPoint; _lastTapPoint = CGPointZero; - ios_internal::page_animation_util::AnimateInPaperWithAnimationAndCompletion( + page_animation_util::AnimateInPaperWithAnimationAndCompletion( newCard, -statusBarHeight, newCard.frame.size.height - newCard.image.size.height, origin, [self isCurrentSetIncognito], nil, completionBlock); @@ -2629,8 +2626,7 @@ // Calculate fractions of animation breadth to trigger dismissal that have // been covered so far. CGFloat fractionOfAnimationBreadth = - distanceMoved / - ios_internal::page_animation_util::AnimateOutTransformBreadth(); + distanceMoved / page_animation_util::AnimateOutTransformBreadth(); // User can potentially move their finger further than animation breath/ // dismissal threshold distance. Ensure that these corner cases don't cause // any unexpected behavior. @@ -2649,9 +2645,8 @@ if (gesture.state == UIGestureRecognizerStateChanged) { // Transform card along |AnimateOutTransform| by the fraction of the // animation breadth that has been covered so far. - [card view].transform = - ios_internal::page_animation_util::AnimateOutTransform( - fractionOfAnimationBreadth, clockwise, isPortrait); + [card view].transform = page_animation_util::AnimateOutTransform( + fractionOfAnimationBreadth, clockwise, isPortrait); // Fade the card to become transparent at the conclusion of the animation, // and the card's tab to become transparent at the time that the card // reaches the threshold for being dismissed. @@ -2819,8 +2814,8 @@ } // Animate the new card in at its destination location. - ios_internal::page_animation_util::AnimateInCardWithAnimationAndCompletion( - newCard.view, NULL, NULL); + page_animation_util::AnimateInCardWithAnimationAndCompletion(newCard.view, + NULL, NULL); // Set up the animation of the existing cards. NSUInteger indexToScroll = cardIndex + 1;
diff --git a/ios/chrome/browser/ui/sync/sync_error_infobar_delegate.mm b/ios/chrome/browser/ui/sync/sync_error_infobar_delegate.mm index 57c1502..9bbe83d 100644 --- a/ios/chrome/browser/ui/sync/sync_error_infobar_delegate.mm +++ b/ios/chrome/browser/ui/sync/sync_error_infobar_delegate.mm
@@ -51,12 +51,10 @@ // they all correspond to the same sync error. error_state_ = sync_setup_service->GetSyncServiceState(); message_ = base::SysNSStringToUTF16( - ios_internal::sync::GetSyncErrorMessageForBrowserState(browser_state_)); + GetSyncErrorMessageForBrowserState(browser_state_)); button_text_ = base::SysNSStringToUTF16( - ios_internal::sync::GetSyncErrorButtonTitleForBrowserState( - browser_state_)); - command_.reset( - ios_internal::sync::GetSyncCommandForBrowserState(browser_state_)); + GetSyncErrorButtonTitleForBrowserState(browser_state_)); + command_.reset(GetSyncCommandForBrowserState(browser_state_)); // Register for sync status changes. syncer::SyncService* sync_service = @@ -113,7 +111,7 @@ if (error_state_ == new_error_state) return; error_state_ = new_error_state; - if (ios_internal::sync::IsTransientSyncError(new_error_state)) { + if (IsTransientSyncError(new_error_state)) { infobar->RemoveSelf(); } else { infobars::InfoBarManager* infobar_manager = infobar->owner();
diff --git a/ios/chrome/browser/ui/sync/sync_util.h b/ios/chrome/browser/ui/sync/sync_util.h index 4d7f715..3a79aad9 100644 --- a/ios/chrome/browser/ui/sync/sync_util.h +++ b/ios/chrome/browser/ui/sync/sync_util.h
@@ -17,9 +17,6 @@ class ChromeBrowserState; } -namespace ios_internal { -namespace sync { - // Gets the top-level description message associated with the sync error state // of |browserState|. Returns nil if there is no sync error. NSString* GetSyncErrorDescriptionForBrowserState( @@ -42,12 +39,9 @@ // Check for sync errors, and display any that ought to be shown to the user. // Returns true if an infobar was brought up. -bool displaySyncErrors(ios::ChromeBrowserState* browser_state, Tab* tab); +bool DisplaySyncErrors(ios::ChromeBrowserState* browser_state, Tab* tab); // Returns true if |errorState| corresponds to a transient sync error. bool IsTransientSyncError(SyncSetupService::SyncServiceState errorState); -} // namespace sync -} // namespace ios_internal - #endif // IOS_CHROME_BROWSER_UI_SYNC_SYNC_UTIL_H_
diff --git a/ios/chrome/browser/ui/sync/sync_util.mm b/ios/chrome/browser/ui/sync/sync_util.mm index 03eff2e..551ebf1 100644 --- a/ios/chrome/browser/ui/sync/sync_util.mm +++ b/ios/chrome/browser/ui/sync/sync_util.mm
@@ -39,9 +39,6 @@ } // namespace -namespace ios_internal { -namespace sync { - NSString* GetSyncErrorDescriptionForBrowserState( ios::ChromeBrowserState* browserState) { SyncSetupService* syncSetupService = @@ -128,7 +125,7 @@ } } -bool displaySyncErrors(ios::ChromeBrowserState* browser_state, Tab* tab) { +bool DisplaySyncErrors(ios::ChromeBrowserState* browser_state, Tab* tab) { // Avoid displaying sync errors on incognito tabs. if (browser_state->IsOffTheRecord()) return false; @@ -183,5 +180,3 @@ } } -} // namespace sync -} // namespace ios_internal
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm index aa8f5797..f3a1d4e 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_controller.mm
@@ -1142,24 +1142,23 @@ openNewTab:[OpenNewTabCommand commandWithIncognito:incognito]]; } -- (ios_internal::NewTabButtonStyle)buttonStyleForPanelAtIndex: - (NSInteger)panelIndex { +- (NewTabButtonStyle)buttonStyleForPanelAtIndex:(NSInteger)panelIndex { CHECK(panelIndex >= 0); switch (panelIndex) { case kLocalTabsOnTheRecordPanelIndex: if ([_onTheRecordSession shouldShowNewTabButton]) { - return ios_internal::NewTabButtonStyle::BLUE; + return NewTabButtonStyle::BLUE; } else { - return ios_internal::NewTabButtonStyle::HIDDEN; + return NewTabButtonStyle::HIDDEN; } case kLocalTabsOffTheRecordPanelIndex: if ([_offTheRecordSession shouldShowNewTabButton]) { - return ios_internal::NewTabButtonStyle::GRAY; + return NewTabButtonStyle::GRAY; } else { - return ios_internal::NewTabButtonStyle::HIDDEN; + return NewTabButtonStyle::HIDDEN; } default: - return ios_internal::NewTabButtonStyle::HIDDEN; + return NewTabButtonStyle::HIDDEN; } }
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_overlay_view.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_overlay_view.mm index d8e5569..630250c 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_overlay_view.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_panel_overlay_view.mm
@@ -462,8 +462,7 @@ } - (void)showSyncSettings { - [self chromeExecuteCommand:ios_internal::sync::GetSyncCommandForBrowserState( - _browserState)]; + [self chromeExecuteCommand:GetSyncCommandForBrowserState(_browserState)]; } - (void)sendNewTabCommand:(id)sender {
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.h b/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.h index f601efc6..cd33773 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.h
@@ -12,15 +12,12 @@ @class TabSwitcherHeaderView; @class TabSwitcherView; -namespace ios_internal { -enum NewTabButtonStyle { UNINITIALIZED, BLUE, GRAY, HIDDEN }; -} // namespace ios_internal +enum class NewTabButtonStyle { UNINITIALIZED, BLUE, GRAY, HIDDEN }; @protocol TabSwitcherViewDelegate<NSObject> - (void)openNewTabInPanelAtIndex:(NSInteger)panelIndex; -- (ios_internal::NewTabButtonStyle)buttonStyleForPanelAtIndex: - (NSInteger)panelIndex; +- (NewTabButtonStyle)buttonStyleForPanelAtIndex:(NSInteger)panelIndex; - (BOOL)shouldShowDismissButtonForPanelAtIndex:(NSInteger)panelIndex; - (void)tabSwitcherViewDelegateDismissTabSwitcher:(TabSwitcherView*)delegate;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.mm index 57611d3..177f706 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_view.mm
@@ -33,7 +33,7 @@ UIScrollView* _scrollView; MDCButton* _openNewTabButton; NSMutableArray* _panels; - ios_internal::NewTabButtonStyle _openNewTabButtonStyle; + NewTabButtonStyle _openNewTabButtonStyle; NSInteger _previousPanelIndex; } @@ -62,7 +62,7 @@ - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - _openNewTabButtonStyle = ios_internal::NewTabButtonStyle::UNINITIALIZED; + _openNewTabButtonStyle = NewTabButtonStyle::UNINITIALIZED; [self loadSubviews]; _panels = [[NSMutableArray alloc] init]; _previousPanelIndex = -1; @@ -120,7 +120,7 @@ - (void)updateOverlayButtonState { NSInteger panelIndex = [self currentPageIndex]; - ios_internal::NewTabButtonStyle newButtonStyle = + NewTabButtonStyle newButtonStyle = [delegate_ buttonStyleForPanelAtIndex:panelIndex]; [self setNewTabButtonStyle:newButtonStyle]; BOOL dismissButtonVisible = @@ -210,7 +210,7 @@ action:@selector(openNewTabButtonPressed) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_openNewTabButton]; - [self setNewTabButtonStyle:ios_internal::NewTabButtonStyle::GRAY]; + [self setNewTabButtonStyle:NewTabButtonStyle::GRAY]; } - (CGRect)headerViewFrame { @@ -254,17 +254,17 @@ [self.delegate openNewTabInPanelAtIndex:[self currentPageIndex]]; } -- (void)setNewTabButtonStyle:(ios_internal::NewTabButtonStyle)newStyle { +- (void)setNewTabButtonStyle:(NewTabButtonStyle)newStyle { if (newStyle == _openNewTabButtonStyle) return; _openNewTabButtonStyle = newStyle; [UIView animateWithDuration:0.25 animations:^{ switch (_openNewTabButtonStyle) { - case ios_internal::NewTabButtonStyle::HIDDEN: + case NewTabButtonStyle::HIDDEN: [_openNewTabButton setFrame:[self openNewTabButtonFrameOffscreen]]; break; - case ios_internal::NewTabButtonStyle::BLUE: { + case NewTabButtonStyle::BLUE: { [_openNewTabButton setFrame:[self openNewTabButtonFrame]]; MDCPalette* palette = [MDCPalette cr_bluePalette]; [_openNewTabButton @@ -279,7 +279,7 @@ IDS_IOS_TAB_SWITCHER_CREATE_NEW_TAB)]; break; } - case ios_internal::NewTabButtonStyle::GRAY: { + case NewTabButtonStyle::GRAY: { [_openNewTabButton setFrame:[self openNewTabButtonFrame]]; MDCPalette* palette = [MDCPalette greyPalette]; [_openNewTabButton @@ -295,7 +295,7 @@ IDS_IOS_TAB_SWITCHER_CREATE_NEW_INCOGNITO_TAB)]; break; } - case ios_internal::NewTabButtonStyle::UNINITIALIZED: + case NewTabButtonStyle::UNINITIALIZED: NOTREACHED(); } } @@ -355,15 +355,15 @@ - (BOOL)accessibilityPerformMagicTap { // If the New Tab Button is visible, then the magic tap opens a new tab. NSInteger panelIndex = [self currentPageIndex]; - ios_internal::NewTabButtonStyle buttonStyle = + NewTabButtonStyle buttonStyle = [delegate_ buttonStyleForPanelAtIndex:panelIndex]; switch (buttonStyle) { - case ios_internal::BLUE: - case ios_internal::GRAY: + case NewTabButtonStyle::BLUE: + case NewTabButtonStyle::GRAY: [self.delegate openNewTabInPanelAtIndex:panelIndex]; return YES; - case ios_internal::UNINITIALIZED: - case ios_internal::HIDDEN: + case NewTabButtonStyle::UNINITIALIZED: + case NewTabButtonStyle::HIDDEN: return NO; } }
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.h b/ios/chrome/browser/ui/tabs/tab_strip_controller.h index cb4d6a18..785c7eaa 100644 --- a/ios/chrome/browser/ui/tabs/tab_strip_controller.h +++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.h
@@ -39,16 +39,18 @@ @property(nonatomic, assign) BOOL highlightsSelectedTab; @property(nonatomic, readonly, retain) UIView* view; -@property(nonatomic, readonly, weak) id<BrowserCommands> dispatcher; +@property(nonatomic, readonly, weak) id<BrowserCommands, ApplicationCommands> + dispatcher; // Used to check if the tabstrip is visible before starting an animation. @property(nonatomic, assign) id<FullScreenControllerDelegate> fullscreenDelegate; -// Designated initializer. +// Designated initializer, |dispatcher| is not retained. - (instancetype)initWithTabModel:(TabModel*)tabModel style:(TabStrip::Style)style - dispatcher:(id<BrowserCommands>)dispatcher + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm index 19012ba8..d722ae0 100644 --- a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm +++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
@@ -25,7 +25,6 @@ #import "ios/chrome/browser/ui/bubble/bubble_util.h" #import "ios/chrome/browser/ui/bubble/bubble_view.h" #import "ios/chrome/browser/ui/bubble/bubble_view_anchor_point_provider.h" -#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" #import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h" @@ -343,7 +342,8 @@ - (instancetype)initWithTabModel:(TabModel*)tabModel style:(TabStrip::Style)style - dispatcher:(id<BrowserCommands>)dispatcher { + dispatcher: + (id<ApplicationCommands, BrowserCommands>)dispatcher { if ((self = [super init])) { _tabArray = [[NSMutableArray alloc] initWithCapacity:10]; _closingTabs = [[NSMutableSet alloc] initWithCapacity:5]; @@ -1505,7 +1505,7 @@ if ([self.fullscreenDelegate currentHeaderOffset] != 0) { // Move the toolbar to visible and wait for the end of that animation to // animate the appearance of the new tab. - delay = ios_internal::kToolbarAnimationDuration; + delay = kFullScreenControllerToolbarAnimationDuration; // Signal the FullscreenController that the toolbar needs to stay on // screen for a bit, so the animation is visible. [[NSNotificationCenter defaultCenter] @@ -1551,7 +1551,7 @@ inIncognito:_isIncognito inBackground:NO appendTo:kLastTab]; - [self.view chromeExecuteCommand:command]; + [self.dispatcher openURL:command]; } #pragma mark - TabViewDelegate
diff --git a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm index 27901c8b..258a1327 100644 --- a/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm +++ b/ios/chrome/browser/ui/toolbar/web_toolbar_controller.mm
@@ -614,7 +614,7 @@ UIViewAutoresizingFlexibleBottomMargin]; [_webToolbar setFrame:[self specificControlsArea]]; _locationBar = base::MakeUnique<LocationBarControllerImpl>( - _omniBox, _browserState, preloader, self, self); + _omniBox, _browserState, preloader, self, self, self.dispatcher); // Create the determinate progress bar (phone only). if (idiom == IPHONE_IDIOM) {
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h b/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h index 6bbcc15..2f3dfda 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_constants.h
@@ -56,6 +56,7 @@ TOOLS_VIEW_SOURCE = -15, TOOLS_REPORT_AN_ISSUE = -16, TOOLS_SHOW_FIND_IN_PAGE = -17, + TOOLS_SHOW_HELP_PAGE = -18, }; #endif // IOS_CHROME_BROWSER_UI_TOOLS_MENU_TOOLS_MENU_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm b/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm index c173c641..0be585b 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm +++ b/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm
@@ -87,7 +87,8 @@ @selector(showSettings), ToolbarTypeAll, 0, nil }, { IDS_IOS_TOOLS_MENU_HELP_MOBILE, kToolsMenuHelpId, - IDC_HELP_PAGE_VIA_MENU, nullptr, ToolbarTypeWebAll, + TOOLS_SHOW_HELP_PAGE, + @selector(showHelpPage), ToolbarTypeWebAll, 0, nil }, // clang-format on };
diff --git a/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm b/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm index 79c203c..771223c 100644 --- a/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm +++ b/ios/chrome/browser/ui/tools_menu/tools_popup_controller.mm
@@ -175,7 +175,7 @@ case TOOLS_SHOW_FIND_IN_PAGE: base::RecordAction(UserMetricsAction("MobileMenuFindInPage")); break; - case IDC_HELP_PAGE_VIA_MENU: + case TOOLS_SHOW_HELP_PAGE: base::RecordAction(UserMetricsAction("MobileMenuHelp")); break; case TOOLS_NEW_INCOGNITO_TAB_ITEM:
diff --git a/ios/chrome/browser/upgrade/upgrade_center.h b/ios/chrome/browser/upgrade/upgrade_center.h index a9ee57f..3c0b600 100644 --- a/ios/chrome/browser/upgrade/upgrade_center.h +++ b/ios/chrome/browser/upgrade/upgrade_center.h
@@ -9,6 +9,7 @@ #include "ios/chrome/browser/upgrade/upgrade_recommended_details.h" +@protocol ApplicationCommands; @class UpgradeCenter; namespace infobars { @@ -29,9 +30,11 @@ // Returns the singleton instance of the class. + (UpgradeCenter*)sharedInstance; -// Registers a client for the UpgradeCenter. The clients are not retained, -// unregisterClient: must be called before the object goes away. -- (void)registerClient:(id<UpgradeCenterClientProtocol>)client; +// Registers a client and a |dispatcher| for the UpgradeCenter. Client and +// |dispatcher| are not retained, unregisterClient: must be called before +// the object goes away. +- (void)registerClient:(id<UpgradeCenterClientProtocol>)client + withDispatcher:(id<ApplicationCommands>)dispatcher; // Unregisters a client. - (void)unregisterClient:(id<UpgradeCenterClientProtocol>)client;
diff --git a/ios/chrome/browser/upgrade/upgrade_center.mm b/ios/chrome/browser/upgrade/upgrade_center.mm index d6bf599f..5baf55e0 100644 --- a/ios/chrome/browser/upgrade/upgrade_center.mm +++ b/ios/chrome/browser/upgrade/upgrade_center.mm
@@ -19,6 +19,7 @@ #include "components/version_info/version_info.h" #import "ios/chrome/browser/open_url_util.h" #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" +#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/open_url_command.h" #include "ios/chrome/grit/ios_chromium_strings.h" #include "ios/chrome/grit/ios_strings.h" @@ -50,6 +51,8 @@ - (BOOL)infoBarShownRecently; // Called when the application become active again. - (void)applicationWillEnterForeground:(NSNotification*)note; +// The dispatcher for this object. +@property(nonatomic, weak) id<ApplicationCommands> dispatcher; @end namespace { @@ -222,6 +225,7 @@ BOOL inCallback_; #endif } +@synthesize dispatcher = _dispatcher; + (UpgradeCenter*)sharedInstance { static UpgradeCenter* obj; @@ -288,8 +292,10 @@ [self showUpgradeInfoBars]; } -- (void)registerClient:(id<UpgradeCenterClientProtocol>)client { +- (void)registerClient:(id<UpgradeCenterClientProtocol>)client + withDispatcher:(id<ApplicationCommands>)dispatcher { [clients_ addObject:client]; + self.dispatcher = dispatcher; if (upgradeInfoBarIsVisible_) [client showUpgrade:self]; } @@ -360,9 +366,7 @@ // This URL can be opened in the application, just open in a new tab. OpenUrlCommand* command = [[OpenUrlCommand alloc] initWithURLFromChrome:url]; - UIWindow* main_window = [[UIApplication sharedApplication] keyWindow]; - DCHECK(main_window); - [main_window chromeExecuteCommand:command]; + [self.dispatcher openURL:command]; } else { // This URL scheme is not understood, ask the system to open it. NSURL* nsurl = [NSURL URLWithString:urlString];
diff --git a/ios/chrome/browser/upgrade/upgrade_center_unittest.mm b/ios/chrome/browser/upgrade/upgrade_center_unittest.mm index 522fd63..02acf81 100644 --- a/ios/chrome/browser/upgrade/upgrade_center_unittest.mm +++ b/ios/chrome/browser/upgrade/upgrade_center_unittest.mm
@@ -56,7 +56,7 @@ EXPECT_EQ(count_, 0u); FakeUpgradeCenterClient* fake = [[FakeUpgradeCenterClient alloc] initWithTest:this]; - [[UpgradeCenter sharedInstance] registerClient:fake]; + [[UpgradeCenter sharedInstance] registerClient:fake withDispatcher:nil]; EXPECT_EQ(count_, 0u); [[UpgradeCenter sharedInstance] unregisterClient:fake]; }; @@ -65,7 +65,7 @@ EXPECT_EQ(count_, 0u); FakeUpgradeCenterClient* fake = [[FakeUpgradeCenterClient alloc] initWithTest:this]; - [[UpgradeCenter sharedInstance] registerClient:fake]; + [[UpgradeCenter sharedInstance] registerClient:fake withDispatcher:nil]; EXPECT_EQ(count_, 0u); UpgradeRecommendedDetails details; @@ -84,7 +84,7 @@ EXPECT_EQ(count_, 0u); FakeUpgradeCenterClient* fake = [[FakeUpgradeCenterClient alloc] initWithTest:this]; - [[UpgradeCenter sharedInstance] registerClient:fake]; + [[UpgradeCenter sharedInstance] registerClient:fake withDispatcher:nil]; EXPECT_EQ(count_, 1u); [[UpgradeCenter sharedInstance] unregisterClient:fake]; }; @@ -92,7 +92,7 @@ TEST_F(UpgradeCenterTest, NoRepeatedDisplay) { FakeUpgradeCenterClient* fake = [[FakeUpgradeCenterClient alloc] initWithTest:this]; - [[UpgradeCenter sharedInstance] registerClient:fake]; + [[UpgradeCenter sharedInstance] registerClient:fake withDispatcher:nil]; EXPECT_EQ(count_, 0u); // First notification should display @@ -117,7 +117,7 @@ TEST_F(UpgradeCenterTest, NewVersionResetsInterval) { FakeUpgradeCenterClient* fake = [[FakeUpgradeCenterClient alloc] initWithTest:this]; - [[UpgradeCenter sharedInstance] registerClient:fake]; + [[UpgradeCenter sharedInstance] registerClient:fake withDispatcher:nil]; EXPECT_EQ(count_, 0u); // First notification should display
diff --git a/ios/chrome/content_widget_extension/content_widget_view_controller.mm b/ios/chrome/content_widget_extension/content_widget_view_controller.mm index 6229f91f..57bd032 100644 --- a/ios/chrome/content_widget_extension/content_widget_view_controller.mm +++ b/ios/chrome/content_widget_extension/content_widget_view_controller.mm
@@ -117,6 +117,7 @@ animateAlongsideTransition:^( id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { [self.widgetView showMode:self.isCompact]; + [self.widgetView layoutIfNeeded]; } completion:nil]; }
diff --git a/ios/chrome/search_widget_extension/search_widget_view_controller.mm b/ios/chrome/search_widget_extension/search_widget_view_controller.mm index dd7fe78..b5e7b21 100644 --- a/ios/chrome/search_widget_extension/search_widget_view_controller.mm +++ b/ios/chrome/search_widget_extension/search_widget_view_controller.mm
@@ -141,6 +141,7 @@ animateAlongsideTransition:^( id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { [self.widgetView showMode:isCompact]; + [self.widgetView layoutIfNeeded]; } completion:nil]; }
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn index ef5bc93..04e031f 100644 --- a/ios/chrome/test/BUILD.gn +++ b/ios/chrome/test/BUILD.gn
@@ -166,6 +166,7 @@ "//ios/chrome/browser/ui/autofill/cells:unit_tests", "//ios/chrome/browser/ui/bookmarks:unit_tests", "//ios/chrome/browser/ui/bookmarks/cells:unit_tests", + "//ios/chrome/browser/ui/broadcaster:unit_tests", "//ios/chrome/browser/ui/browser_list:unit_tests", "//ios/chrome/browser/ui/bubble:unit_tests", "//ios/chrome/browser/ui/captive_portal:unit_tests", @@ -219,7 +220,6 @@ "//ios/chrome/content_widget_extension:unit_tests", "//ios/chrome/search_widget_extension:unit_tests", "//ios/chrome/test/base:unit_tests", - "//ios/shared/chrome/browser/ui/broadcaster:unit_tests", "//ios/shared/chrome/browser/ui/dialogs:unit_tests", "//ios/testing:http_server_bundle_data", ]
diff --git a/ios/chrome/test/app/chrome_test_util.h b/ios/chrome/test/app/chrome_test_util.h index 99d1d7f..3a35129d 100644 --- a/ios/chrome/test/app/chrome_test_util.h +++ b/ios/chrome/test/app/chrome_test_util.h
@@ -13,6 +13,7 @@ class ChromeBrowserState; } +@protocol ApplicationCommands; @class DeviceSharingManager; @class GenericChromeCommand; @class MainController; @@ -47,7 +48,7 @@ id<BrowserCommands> BrowserCommandDispatcherForMainBVC(); // Returns the dispatcher for the active view controller. -id<BrowserCommands> DispatcherForActiveViewController(); +id<ApplicationCommands, BrowserCommands> DispatcherForActiveViewController(); // Runs |command| using the active view controller. void RunCommandWithActiveViewController(GenericChromeCommand* command);
diff --git a/ios/chrome/test/app/chrome_test_util.mm b/ios/chrome/test/app/chrome_test_util.mm index 51fd8540a..f8d85a5 100644 --- a/ios/chrome/test/app/chrome_test_util.mm +++ b/ios/chrome/test/app/chrome_test_util.mm
@@ -141,7 +141,7 @@ return mainBVC.dispatcher; } -id<BrowserCommands> DispatcherForActiveViewController() { +id<ApplicationCommands, BrowserCommands> DispatcherForActiveViewController() { UIViewController* vc = GetActiveViewController(); BrowserViewController* bvc = base::mac::ObjCCast<BrowserViewController>(vc); if (bvc)
diff --git a/ios/clean/chrome/browser/ui/dialogs/dialog_mediator_unittest.mm b/ios/clean/chrome/browser/ui/dialogs/dialog_mediator_unittest.mm index c0ea538..64f52f1c 100644 --- a/ios/clean/chrome/browser/ui/dialogs/dialog_mediator_unittest.mm +++ b/ios/clean/chrome/browser/ui/dialogs/dialog_mediator_unittest.mm
@@ -41,8 +41,8 @@ placeholderText:@"placeholderText" secure:YES]), mediator_([[TestDialogMediator alloc] init]) { - mediator_.title = title_; - mediator_.message = message_; + mediator_.dialogTitle = title_; + mediator_.dialogMessage = message_; mediator_.buttonConfigs = @[ button_config_ ]; mediator_.textFieldConfigs = @[ text_field_config_ ]; }
diff --git a/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.h b/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.h index 0d5bb32a..8d0972f 100644 --- a/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.h +++ b/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.h
@@ -10,10 +10,10 @@ @class DialogButtonConfiguration; @class DialogTextFieldConfiguration; -// A DialogMediator subclass that can be configured via properties. +// A DialogMediator subclass that can be configured via readwrite properties. @interface TestDialogMediator : DialogMediator -@property(nonatomic, copy) NSString* title; -@property(nonatomic, copy) NSString* message; +@property(nonatomic, copy) NSString* dialogTitle; +@property(nonatomic, copy) NSString* dialogMessage; @property(nonatomic, copy) NSArray<DialogButtonConfiguration*>* buttonConfigs; @property(nonatomic, copy) NSArray<DialogTextFieldConfiguration*>* textFieldConfigs;
diff --git a/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.mm b/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.mm index 871f900..046a22388 100644 --- a/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.mm +++ b/ios/clean/chrome/browser/ui/dialogs/test_helpers/test_dialog_mediator.mm
@@ -11,28 +11,8 @@ #endif @implementation TestDialogMediator -@synthesize title = _title; -@synthesize message = _message; +@synthesize dialogTitle = _dialogTitle; +@synthesize dialogMessage = _dialogMessage; @synthesize buttonConfigs = _buttonConfigs; @synthesize textFieldConfigs = _textFieldConfigs; @end - -@implementation TestDialogMediator (DialogMediatorSubclassing) - -- (NSString*)dialogTitle { - return _title; -} - -- (NSString*)dialogMessage { - return _message; -} - -- (NSArray<DialogButtonConfiguration*>*)buttonConfigs { - return _buttonConfigs; -} - -- (NSArray<DialogTextFieldConfiguration*>*)textFieldConfigs { - return _textFieldConfigs; -} - -@end
diff --git a/ios/clean/chrome/browser/ui/ntp/BUILD.gn b/ios/clean/chrome/browser/ui/ntp/BUILD.gn index f9b77faf..ede76aa 100644 --- a/ios/clean/chrome/browser/ui/ntp/BUILD.gn +++ b/ios/clean/chrome/browser/ui/ntp/BUILD.gn
@@ -34,6 +34,7 @@ "//ios/chrome/browser/reading_list", "//ios/chrome/browser/ui", "//ios/chrome/browser/ui/alert_coordinator", + "//ios/chrome/browser/ui/broadcaster", "//ios/chrome/browser/ui/browser_list", "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/content_suggestions",
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm index 5ef5c8a..4cbdc1e 100644 --- a/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm +++ b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm
@@ -5,8 +5,10 @@ #import "ios/clean/chrome/browser/ui/ntp/ntp_coordinator.h" #include "base/logging.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #import "ios/chrome/browser/ui/browser_list/browser.h" #import "ios/chrome/browser/ui/commands/command_dispatcher.h" +#import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" #import "ios/chrome/browser/ui/coordinators/browser_coordinator+internal.h" #include "ios/chrome/browser/ui/ui_util.h" #import "ios/clean/chrome/browser/ui/bookmarks/bookmarks_coordinator.h" @@ -23,30 +25,36 @@ @interface NTPCoordinator ()<NTPCommands> @property(nonatomic, strong) NTPMediator* mediator; @property(nonatomic, strong) NTPViewController* viewController; +@property(nonatomic, strong) NTPHomeCoordinator* homeCoordinator; @end @implementation NTPCoordinator @synthesize mediator = _mediator; @synthesize viewController = _viewController; +@synthesize homeCoordinator = _homeCoordinator; - (void)start { + if (self.started) + return; + self.viewController = [[NTPViewController alloc] init]; self.mediator = [[NTPMediator alloc] initWithConsumer:self.viewController]; CommandDispatcher* dispatcher = self.browser->dispatcher(); // NTPCommands - [dispatcher startDispatchingToTarget:self - forSelector:@selector(showNTPHomePanel)]; - [dispatcher startDispatchingToTarget:self - forSelector:@selector(showNTPBookmarksPanel)]; - [dispatcher startDispatchingToTarget:self - forSelector:@selector(showNTPRecentTabsPanel)]; + [dispatcher startDispatchingToTarget:self forProtocol:@protocol(NTPCommands)]; self.viewController.dispatcher = static_cast<id>(self.browser->dispatcher()); + [self.browser->broadcaster() + broadcastValue:@"selectedNTPPanel" + ofObject:self.viewController + selector:@selector(broadcastSelectedNTPPanel:)]; [super start]; } - (void)stop { [super stop]; + [self.browser->broadcaster() + stopBroadcastingForSelector:@selector(broadcastSelectedNTPPanel:)]; [self.browser->dispatcher() stopDispatchingToTarget:self]; }
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_header_coordinator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_home_header_coordinator.mm index 65ecf2d..84438ee 100644 --- a/ios/clean/chrome/browser/ui/ntp/ntp_home_header_coordinator.mm +++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_header_coordinator.mm
@@ -4,6 +4,9 @@ #import "ios/clean/chrome/browser/ui/ntp/ntp_home_header_coordinator.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h" +#import "ios/chrome/browser/ui/browser_list/browser.h" +#import "ios/chrome/browser/ui/coordinators/browser_coordinator+internal.h" #import "ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.h" #import "ios/clean/chrome/browser/ui/ntp/ntp_home_header_view_controller.h" @@ -44,9 +47,18 @@ return self.mediator; } +- (void)setCollectionSynchronizer: + (id<ContentSuggestionsCollectionSynchronizing>)collectionSynchronizer { + _collectionSynchronizer = collectionSynchronizer; + self.mediator.collectionSynchronizer = collectionSynchronizer; +} + #pragma mark - BrowserCoordinator - (void)start { + if (self.started) + return; + self.viewController = [[NTPHomeHeaderViewController alloc] init]; self.mediator = [[NTPHomeHeaderMediator alloc] init]; @@ -57,11 +69,18 @@ self.mediator.headerConsumer = self.viewController; self.mediator.alerter = self; + [self.browser->broadcaster() + addObserver:self.mediator + forSelector:@selector(broadcastSelectedNTPPanel:)]; + [super start]; } - (void)stop { [super stop]; + [self.browser->broadcaster() + removeObserver:self.mediator + forSelector:@selector(broadcastSelectedNTPPanel:)]; self.mediator = nil; self.viewController = nil; }
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.h b/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.h index 0983fc9..1e51d7e 100644 --- a/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.h +++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.h
@@ -7,6 +7,7 @@ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_controlling.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_header_provider.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller_delegate.h" @@ -24,7 +25,8 @@ @end @interface NTPHomeHeaderMediator - : NSObject<ContentSuggestionsHeaderControlling, + : NSObject<ChromeBroadcastObserver, + ContentSuggestionsHeaderControlling, ContentSuggestionsHeaderProvider, ContentSuggestionsViewControllerDelegate, GoogleLandingConsumer> @@ -41,10 +43,6 @@ @property(nonatomic, weak) id<NTPHomeHeaderConsumer> headerConsumer; @property(nonatomic, weak) id<NTPHomeHeaderProvider> headerProvider; -// |YES| if its view is visible. When set to |NO| various UI updates are -// ignored. -@property(nonatomic, assign) BOOL isShowing; - @end #endif // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_HOME_HEADER_MEDIATOR_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.mm index 1eab1e4..07f9ba02 100644 --- a/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.mm +++ b/ios/clean/chrome/browser/ui/ntp/ntp_home_header_mediator.mm
@@ -17,9 +17,12 @@ @interface NTPHomeHeaderMediator () -// Redifined as readwrite +// Redefined as readwrite @property(nonatomic, assign, getter=isOmniboxFocused, readwrite) BOOL omniboxFocused; +// |YES| if the header view is visible. When set to |NO| various UI updates are +// ignored, like shifting the tiles up when the omnibox is focused. +@property(nonatomic, assign) BOOL isShowing; @property(nonatomic, assign) BOOL promoCanShow; @@ -156,6 +159,12 @@ self.headerProvider.logoVendor.showingLogo, self.promoCanShow, NO); } +#pragma mark - ChromeBroadcastObserver + +- (void)broadcastSelectedNTPPanel:(ntp_home::PanelIdentifier)panelIdentifier { + self.isShowing = panelIdentifier == ntp_home::HOME_PANEL; +} + #pragma mark - Private - (void)shiftCollectionDown {
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h index a80885d4..690b9720 100644 --- a/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h +++ b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.h
@@ -7,6 +7,7 @@ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" #import "ios/clean/chrome/browser/ui/ntp/ntp_consumer.h" @protocol NTPCommands; @@ -27,6 +28,10 @@ // Setting this property adds a recent tabs panel on iPad or present a bookmarks // panel on iPhone. @property(nonatomic, strong) UIViewController* recentTabsViewController; + +// The panel currently selected. +@property(nonatomic, assign) ntp_home::PanelIdentifier selectedNTPPanel; + @end #endif // IOS_CLEAN_CHROME_BROWSER_UI_NTP_NTP_VIEW_CONTROLLER_H_
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.mm b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.mm index 548faaa..6081e61 100644 --- a/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.mm +++ b/ios/clean/chrome/browser/ui/ntp/ntp_view_controller.mm
@@ -34,6 +34,7 @@ @synthesize NTPView = _NTPView; @synthesize recentTabsViewController = _recentTabsViewController; @synthesize tabBarItems = _tabBarItems; +@synthesize selectedNTPPanel = _selectedNTPPanel; #pragma mark - UIViewController @@ -82,6 +83,7 @@ [self.NTPView layoutIfNeeded]; // PLACEHOLDER: This should come from the mediator. if (IsIPadIdiom()) { + self.selectedNTPPanel = ntp_home::HOME_PANEL; CGRect itemFrame = [self.NTPView panelFrameForItemAtIndex:1]; CGPoint point = CGPointMake(CGRectGetMinX(itemFrame), 0); [self.NTPView.scrollView setContentOffset:point animated:NO]; @@ -100,6 +102,7 @@ } NewTabPageBarItem* item = self.NTPView.tabBar.items[1]; item.view = controller.view; + self.selectedNTPPanel = ntp_home::HOME_PANEL; [self addControllerToScrollView:controller]; } @@ -108,6 +111,7 @@ controller.view.frame = [self.NTPView panelFrameForItemAtIndex:0]; NewTabPageBarItem* item = self.NTPView.tabBar.items[0]; item.view = controller.view; + self.selectedNTPPanel = ntp_home::BOOKMARKS_PANEL; [self addControllerToScrollView:controller]; } @@ -116,6 +120,7 @@ controller.view.frame = [self.NTPView panelFrameForItemAtIndex:2]; NewTabPageBarItem* item = self.NTPView.tabBar.items[2]; item.view = controller.view; + self.selectedNTPPanel = ntp_home::RECENT_TABS_PANEL; [self addControllerToScrollView:_recentTabsViewController]; } @@ -151,14 +156,19 @@ return; NewTabPageBarItem* item = self.NTPView.tabBar.items[index]; - if (item.identifier == ntp_home::BOOKMARKS_PANEL && - !self.bookmarksViewController) - [self.dispatcher showNTPBookmarksPanel]; - else if (item.identifier == ntp_home::HOME_PANEL && !self.homeViewController) - [self.dispatcher showNTPHomePanel]; - else if (item.identifier == ntp_home::RECENT_TABS_PANEL && - !self.recentTabsViewController) - [self.dispatcher showNTPRecentTabsPanel]; + if (item.identifier == ntp_home::BOOKMARKS_PANEL) { + self.selectedNTPPanel = ntp_home::BOOKMARKS_PANEL; + if (!self.bookmarksViewController) + [self.dispatcher showNTPBookmarksPanel]; + } else if (item.identifier == ntp_home::HOME_PANEL) { + self.selectedNTPPanel = ntp_home::HOME_PANEL; + if (!self.homeViewController) + [self.dispatcher showNTPHomePanel]; + } else if (item.identifier == ntp_home::RECENT_TABS_PANEL) { + self.selectedNTPPanel = ntp_home::RECENT_TABS_PANEL; + if (!self.recentTabsViewController) + [self.dispatcher showNTPRecentTabsPanel]; + } // If index changed, follow same path as if a tab bar item was pressed. When // |index| == |position|, the panel is completely in view.
diff --git a/ios/clean/chrome/browser/ui/omnibox/location_bar_coordinator.mm b/ios/clean/chrome/browser/ui/omnibox/location_bar_coordinator.mm index daa0003..9307ae6 100644 --- a/ios/clean/chrome/browser/ui/omnibox/location_bar_coordinator.mm +++ b/ios/clean/chrome/browser/ui/omnibox/location_bar_coordinator.mm
@@ -42,7 +42,7 @@ base::MakeUnique<LocationBarControllerImpl>( self.viewController.omnibox, browser->browser_state(), nil /* PreloadProvider */, nil /* OmniboxPopupPositioner */, - self.mediator); + self.mediator, nil /* dispatcher */); [self.mediator setLocationBar:std::move(locationBar)]; [super start]; }
diff --git a/ios/clean/chrome/browser/ui/tab/BUILD.gn b/ios/clean/chrome/browser/ui/tab/BUILD.gn index d06000cb..1a53096b 100644 --- a/ios/clean/chrome/browser/ui/tab/BUILD.gn +++ b/ios/clean/chrome/browser/ui/tab/BUILD.gn
@@ -16,6 +16,7 @@ ":tab_ui", "//base", "//ios/chrome/browser", + "//ios/chrome/browser/ui/broadcaster", "//ios/chrome/browser/ui/browser_list", "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/coordinators", @@ -28,7 +29,6 @@ "//ios/clean/chrome/browser/ui/toolbar", "//ios/clean/chrome/browser/ui/transitions", "//ios/clean/chrome/browser/ui/web_contents", - "//ios/shared/chrome/browser/ui/broadcaster", "//ios/web", ] }
diff --git a/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm b/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm index 13658b66..f1ba996 100644 --- a/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm +++ b/ios/clean/chrome/browser/ui/tab/tab_coordinator.mm
@@ -10,6 +10,7 @@ #include "base/memory/ptr_util.h" #include "base/scoped_observer.h" #include "ios/chrome/browser/chrome_url_constants.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #import "ios/chrome/browser/ui/browser_list/browser.h" #import "ios/chrome/browser/ui/commands/command_dispatcher.h" #import "ios/chrome/browser/ui/coordinators/browser_coordinator+internal.h" @@ -25,7 +26,6 @@ #import "ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.h" #import "ios/clean/chrome/browser/ui/transitions/zoom_transition_controller.h" #import "ios/clean/chrome/browser/ui/web_contents/web_coordinator.h" -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #import "ios/web/public/web_state/web_state.h" #import "ios/web/public/web_state/web_state_observer_bridge.h"
diff --git a/ios/clean/chrome/browser/ui/toolbar/BUILD.gn b/ios/clean/chrome/browser/ui/toolbar/BUILD.gn index fbe7376..fbb5a81 100644 --- a/ios/clean/chrome/browser/ui/toolbar/BUILD.gn +++ b/ios/clean/chrome/browser/ui/toolbar/BUILD.gn
@@ -16,6 +16,7 @@ ":toolbar_ui", "//base", "//ios/chrome/browser", + "//ios/chrome/browser/ui/broadcaster", "//ios/chrome/browser/ui/browser_list", "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/commands", @@ -27,7 +28,6 @@ "//ios/clean/chrome/browser/ui/history_popup", "//ios/clean/chrome/browser/ui/omnibox", "//ios/clean/chrome/browser/ui/tools", - "//ios/shared/chrome/browser/ui/broadcaster", "//ios/web", ] }
diff --git a/ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.mm b/ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.mm index befe4322..99ddf639 100644 --- a/ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.mm +++ b/ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.mm
@@ -5,6 +5,7 @@ #import "ios/clean/chrome/browser/ui/toolbar/toolbar_coordinator.h" #include "ios/chrome/browser/chrome_url_constants.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #import "ios/chrome/browser/ui/browser_list/browser.h" #import "ios/chrome/browser/ui/commands/command_dispatcher.h" #import "ios/chrome/browser/ui/commands/history_popup_commands.h" @@ -17,7 +18,6 @@ #import "ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.h" #import "ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.h" #import "ios/clean/chrome/browser/ui/tools/tools_coordinator.h" -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcaster.h" #import "ios/web/public/navigation_manager.h" #import "ios/web/public/web_state/web_state.h"
diff --git a/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.h b/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.h index c7c38c25..cec5783 100644 --- a/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.h +++ b/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.h
@@ -7,7 +7,7 @@ #import <Foundation/Foundation.h> -#import "ios/shared/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h" +#import "ios/chrome/browser/ui/broadcaster/chrome_broadcast_observer.h" @protocol ToolbarConsumer;
diff --git a/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.h b/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.h index c46efc8..e6dd7ff 100644 --- a/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.h +++ b/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.h
@@ -9,7 +9,6 @@ class GURL; -namespace ios_internal { namespace nsurlprotectionspace_util { // Information describing dialog requester used as dialog subtitle. @@ -25,6 +24,5 @@ GURL RequesterOrigin(NSURLProtectionSpace* protectionSpace); } // namespace nsurlprotectionspace_util -} // namespace ios_internal #endif // IOS_SHARED_CHROME_BROWSER_UI_DIALOGS_NSURL_PROTECTION_SPACE_UTIL_H_
diff --git a/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm b/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm index 0b04896..1d2107b 100644 --- a/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm +++ b/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm
@@ -16,7 +16,6 @@ #error "This file requires ARC support." #endif -namespace ios_internal { namespace nsurlprotectionspace_util { NSString* MessageForHTTPAuth(NSURLProtectionSpace* protectionSpace) { @@ -69,4 +68,3 @@ } } // namespace nsurlprotectionspace_util -} // namespace ios_internal
diff --git a/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util_unittest.mm b/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util_unittest.mm index b709732..c3cb422 100644 --- a/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util_unittest.mm +++ b/ios/shared/chrome/browser/ui/dialogs/nsurl_protection_space_util_unittest.mm
@@ -17,7 +17,7 @@ #error "This file requires ARC support." #endif -using namespace ios_internal::nsurlprotectionspace_util; +using namespace nsurlprotectionspace_util; namespace {
diff --git a/ios/third_party/material_components_ios/README.chromium b/ios/third_party/material_components_ios/README.chromium index 62089c0..64bc0c49 100644 --- a/ios/third_party/material_components_ios/README.chromium +++ b/ios/third_party/material_components_ios/README.chromium
@@ -1,7 +1,7 @@ Name: Material Components for iOS URL: https://github.com/material-components/material-components-ios Version: 0 -Revision: b72e8cb97f70f41d550620b2f03f193930f7c888 +Revision: 7026a1f8016419aa2a05ff08b3897a9878aeae63 License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/ios/web/payments/payment_request_unittest.cc b/ios/web/payments/payment_request_unittest.cc index efe7e6f..8ebaac6 100644 --- a/ios/web/payments/payment_request_unittest.cc +++ b/ios/web/payments/payment_request_unittest.cc
@@ -66,9 +66,10 @@ // Add the expected values to expected_request. expected_request.payment_request_id = "123456789"; expected_request.details.id = "12345"; - expected_request.details.total.label = "TOTAL"; - expected_request.details.total.amount.currency = "GBP"; - expected_request.details.total.amount.value = "6.66"; + expected_request.details.total = base::MakeUnique<payments::PaymentItem>(); + expected_request.details.total->label = "TOTAL"; + expected_request.details.total->amount.currency = "GBP"; + expected_request.details.total->amount.value = "6.66"; expected_request.details.error = "Error in details"; payments::PaymentMethodData method_data; @@ -307,11 +308,13 @@ EXPECT_EQ(request1, request2); payments::PaymentDetails details1; - details1.total.label = "Total"; + details1.total = base::MakeUnique<payments::PaymentItem>(); + details1.total->label = "Total"; request1.details = details1; EXPECT_NE(request1, request2); payments::PaymentDetails details2; - details2.total.amount.value = "0.01"; + details2.total = base::MakeUnique<payments::PaymentItem>(); + details2.total->amount.value = "0.01"; request2.details = details2; EXPECT_NE(request1, request2); request2.details = details1;
diff --git a/ios/web/public/test/earl_grey/web_view_matchers.h b/ios/web/public/test/earl_grey/web_view_matchers.h index ae8700c..7a188c0 100644 --- a/ios/web/public/test/earl_grey/web_view_matchers.h +++ b/ios/web/public/test/earl_grey/web_view_matchers.h
@@ -32,10 +32,6 @@ // Matcher for an interstitial page. Does not wait if the page is not displayed. id<GREYMatcher> Interstitial(WebState* web_state); -// Matcher for interstitial page containing |text|. Waits until the text is -// displayed or timed out. -id<GREYMatcher> InterstitialContainingText(NSString* text, WebState* web_state); - } // namespace web #endif // IOS_WEB_PUBLIC_TEST_EARL_GREY_WEB_VIEW_MATCHERS_H_
diff --git a/ios/web/public/test/earl_grey/web_view_matchers.mm b/ios/web/public/test/earl_grey/web_view_matchers.mm index 558b434f..c00537e 100644 --- a/ios/web/public/test/earl_grey/web_view_matchers.mm +++ b/ios/web/public/test/earl_grey/web_view_matchers.mm
@@ -55,10 +55,6 @@ IMAGE_STATE_LOADED, }; -// Script that returns document.body as a string. -char kGetDocumentBodyJavaScript[] = - "document.body ? document.body.textContent : null"; - // Fetches the image from |image_url|. UIImage* LoadImage(const GURL& image_url) { __block UIImage* image; @@ -227,26 +223,4 @@ nil); } -id<GREYMatcher> InterstitialContainingText(NSString* text, - WebState* web_state) { - MatchesBlock matches = ^BOOL(WKWebView* view) { - return WaitUntilConditionOrTimeout(testing::kWaitForUIElementTimeout, ^{ - NSString* script = base::SysUTF8ToNSString(kGetDocumentBodyJavaScript); - id body = ExecuteScriptOnInterstitial(web_state, script); - return [body containsString:text] ? true : false; - }); - }; - - DescribeToBlock describe = ^(id<GREYDescription> description) { - [description appendText:@"interstitial containing "]; - [description appendText:text]; - }; - - return grey_allOf( - Interstitial(web_state), - [[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches - descriptionBlock:describe], - nil); -} - } // namespace web
diff --git a/ipc/ipc_message_templates.h b/ipc/ipc_message_templates.h index 8c9f3eeb..c856ed9 100644 --- a/ipc/ipc_message_templates.h +++ b/ipc/ipc_message_templates.h
@@ -20,6 +20,30 @@ namespace IPC { +template <typename Tuple, size_t... Ns> +auto TupleForwardImpl(Tuple&& tuple, std::index_sequence<Ns...>) -> decltype( + std::forward_as_tuple(std::get<Ns>(std::forward<Tuple>(tuple))...)) { + return std::forward_as_tuple(std::get<Ns>(std::forward<Tuple>(tuple))...); +} + +// Transforms std::tuple contents to the forwarding form. +// Example: +// std::tuple<int, int&, const int&, int&&>&& +// -> std::tuple<int&&, int&, const int&, int&&>. +// const std::tuple<int, const int&, int&&>& +// -> std::tuple<const int&, int&, const int&, int&>. +// +// TupleForward(std::make_tuple(a, b, c)) is equivalent to +// std::forward_as_tuple(a, b, c). +template <typename Tuple> +auto TupleForward(Tuple&& tuple) -> decltype(TupleForwardImpl( + std::forward<Tuple>(tuple), + std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>())) { + return TupleForwardImpl( + std::forward<Tuple>(tuple), + std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>()); +} + // This function is for all the async IPCs that don't pass an extra parameter // using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. template <typename ObjT, typename Method, typename P, typename Tuple> @@ -169,17 +193,19 @@ SendParam send_params; bool ok = ReadSendParam(msg, &send_params); Message* reply = SyncMessage::GenerateReply(msg); - if (ok) { - ReplyParam reply_params; - base::DispatchToMethod(obj, func, std::move(send_params), &reply_params); - WriteParam(reply, reply_params); - LogReplyParamsToMessage(reply_params, msg); - } else { + if (!ok) { NOTREACHED() << "Error deserializing message " << msg->type(); reply->set_reply_error(); + sender->Send(reply); + return false; } + + ReplyParam reply_params; + base::DispatchToMethod(obj, func, std::move(send_params), &reply_params); + WriteParam(reply, reply_params); + LogReplyParamsToMessage(reply_params, msg); sender->Send(reply); - return ok; + return true; } template <class T, class P, class Method> @@ -191,16 +217,17 @@ SendParam send_params; bool ok = ReadSendParam(msg, &send_params); Message* reply = SyncMessage::GenerateReply(msg); - if (ok) { - std::tuple<Message&> t = std::tie(*reply); - ConnectMessageAndReply(msg, reply); - base::DispatchToMethod(obj, func, std::move(send_params), &t); - } else { + if (!ok) { NOTREACHED() << "Error deserializing message " << msg->type(); reply->set_reply_error(); obj->Send(reply); + return false; } - return ok; + + std::tuple<Message&> t = std::tie(*reply); + ConnectMessageAndReply(msg, reply); + base::DispatchToMethod(obj, func, std::move(send_params), &t); + return true; } template <class T, class P, class Method> @@ -212,19 +239,21 @@ SendParam send_params; bool ok = ReadSendParam(msg, &send_params); Message* reply = SyncMessage::GenerateReply(msg); - if (ok) { - std::tuple<Message&> t = std::tie(*reply); - ConnectMessageAndReply(msg, reply); - std::tuple<P*> parameter_tuple(parameter); - auto concat_params = - std::tuple_cat(std::move(parameter_tuple), std::move(send_params)); - base::DispatchToMethod(obj, func, std::move(concat_params), &t); - } else { + if (!ok) { NOTREACHED() << "Error deserializing message " << msg->type(); reply->set_reply_error(); obj->Send(reply); + return false; } - return ok; + + std::tuple<Message&> t = std::tie(*reply); + ConnectMessageAndReply(msg, reply); + std::tuple<P*> parameter_tuple(parameter); + base::DispatchToMethod( + obj, func, + std::tuple_cat(std::move(parameter_tuple), TupleForward(send_params)), + &t); + return true; } private:
diff --git a/mash/catalog_viewer/catalog_viewer.cc b/mash/catalog_viewer/catalog_viewer.cc index 5439b05..3d8c406 100644 --- a/mash/catalog_viewer/catalog_viewer.cc +++ b/mash/catalog_viewer/catalog_viewer.cc
@@ -53,8 +53,7 @@ SetBorder(views::CreateEmptyBorder(gfx::Insets(kPadding))); SetBackground(views::CreateStandardPanelBackground()); - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
diff --git a/mash/example/window_type_launcher/window_type_launcher.cc b/mash/example/window_type_launcher/window_type_launcher.cc index 0a9f0be..6ad2aa3 100644 --- a/mash/example/window_type_launcher/window_type_launcher.cc +++ b/mash/example/window_type_launcher/window_type_launcher.cc
@@ -275,8 +275,7 @@ MdTextButton::Create(this, base::ASCIIToUTF16("Jank for (s):"))), jank_duration_field_(new views::Textfield) { SetBorder(views::CreateEmptyBorder(gfx::Insets(5))); - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/media/BUILD.gn b/media/BUILD.gn index d1ee33b..db7efe9 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn
@@ -133,33 +133,6 @@ source_set("unit_tests") { testonly = true sources = [ - "filters/audio_clock_unittest.cc", - "filters/audio_decoder_selector_unittest.cc", - "filters/audio_renderer_algorithm_unittest.cc", - "filters/audio_timestamp_validator_unittest.cc", - "filters/chunk_demuxer_unittest.cc", - "filters/decrypting_audio_decoder_unittest.cc", - "filters/decrypting_demuxer_stream_unittest.cc", - "filters/decrypting_video_decoder_unittest.cc", - "filters/fake_video_decoder.cc", - "filters/fake_video_decoder.h", - "filters/fake_video_decoder_unittest.cc", - "filters/file_data_source_unittest.cc", - "filters/frame_processor_unittest.cc", - "filters/ivf_parser_unittest.cc", - "filters/jpeg_parser_unittest.cc", - "filters/memory_data_source_unittest.cc", - "filters/pipeline_controller_unittest.cc", - "filters/source_buffer_state_unittest.cc", - "filters/source_buffer_stream_unittest.cc", - "filters/video_cadence_estimator_unittest.cc", - "filters/video_decoder_selector_unittest.cc", - "filters/video_frame_stream_unittest.cc", - "filters/video_renderer_algorithm_unittest.cc", - "filters/vp8_bool_decoder_unittest.cc", - "filters/vp8_parser_unittest.cc", - "filters/vp9_parser_unittest.cc", - "filters/vp9_raw_bits_reader_unittest.cc", "muxers/webm_muxer_unittest.cc", ] @@ -193,61 +166,7 @@ data_deps = [] - if (is_android) { - sources -= [ - "filters/decrypting_audio_decoder_unittest.cc", - "filters/decrypting_video_decoder_unittest.cc", - ] - - deps += [ "//ui/gl" ] - } - - if (media_use_ffmpeg) { - sources += [ - "filters/audio_decoder_unittest.cc", - "filters/audio_file_reader_unittest.cc", - "filters/blocking_url_protocol_unittest.cc", - "filters/ffmpeg_demuxer_unittest.cc", - "filters/ffmpeg_glue_unittest.cc", - "filters/in_memory_url_protocol_unittest.cc", - ] - - deps += [ - # Direct dependency needed for the config - "//third_party/opus", - ] - - # Even if FFmpeg is enabled on Android we don't want these. - # TODO(watk): Refactor tests that could be made to run on Android. - if (!is_android) { - sources += [ - "filters/audio_video_metadata_extractor_unittest.cc", - "filters/media_file_checker_unittest.cc", - ] - } - - if (!disable_ffmpeg_video_decoders) { - # FFmpeg on Android does not include video decoders. - sources += [ "filters/ffmpeg_video_decoder_unittest.cc" ] - } - } - - if (media_use_libvpx) { - sources += [ "filters/vpx_video_decoder_unittest.cc" ] - } - - if (current_cpu != "arm" && is_chromeos) { - sources += [ "filters/h264_bitstream_buffer_unittest.cc" ] - } - if (proprietary_codecs) { - sources += [ "filters/h264_to_annex_b_bitstream_converter_unittest.cc" ] - if (media_use_ffmpeg) { - sources += [ - "filters/ffmpeg_aac_bitstream_converter_unittest.cc", - "filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc", - ] - } if (enable_hls_sample_aes) { deps += [ "//third_party/boringssl" ] } @@ -288,6 +207,7 @@ "//media/base:unit_tests", "//media/cdm:unit_tests", "//media/device_monitors:unit_tests", + "//media/filters:unit_tests", "//media/formats:unit_tests", "//media/gpu:unit_tests", "//media/mojo:unit_tests",
diff --git a/media/audio/audio_system.h b/media/audio/audio_system.h index 8df7fa70..1338d887 100644 --- a/media/audio/audio_system.h +++ b/media/audio/audio_system.h
@@ -12,16 +12,10 @@ #include "media/base/audio_parameters.h" #include "media/base/media_export.h" -namespace base { -class SingleThreadTaskRunner; -} - namespace media { class AudioManager; -// Work in progress: Provides asynchronous interface to AudioManager. All the -// AudioManager clients will be switched to it, in preparation for moving -// to Mojo audio service. +// Provides asynchronous interface to access audio device information class MEDIA_EXPORT AudioSystem { public: // Replies are asynchronously sent from audio system thread to the thread the @@ -36,8 +30,6 @@ using OnInputDeviceInfoCallback = base::OnceCallback< void(const AudioParameters&, const AudioParameters&, const std::string&)>; - // Must not be called on audio system thread if it differs from the one - // AudioSystem is destroyed on. See http://crbug.com/705455. static AudioSystem* Get(); virtual ~AudioSystem(); @@ -47,9 +39,8 @@ // of the device. // TODO(olka,tommi): fix all AudioManager implementations to return invalid // parameters if the device is not found. - virtual void GetInputStreamParameters( - const std::string& device_id, - OnAudioParamsCallback on_params_cb) const = 0; + virtual void GetInputStreamParameters(const std::string& device_id, + OnAudioParamsCallback on_params_cb) = 0; // If media::AudioDeviceDescription::IsDefaultDevice(device_id) is true, // callback will receive the parameters of the default output device. @@ -60,17 +51,17 @@ // parameters if the device is not found. virtual void GetOutputStreamParameters( const std::string& device_id, - OnAudioParamsCallback on_params_cb) const = 0; + OnAudioParamsCallback on_params_cb) = 0; - virtual void HasInputDevices(OnBoolCallback on_has_devices_cb) const = 0; + virtual void HasInputDevices(OnBoolCallback on_has_devices_cb) = 0; - virtual void HasOutputDevices(OnBoolCallback on_has_devices_cb) const = 0; + virtual void HasOutputDevices(OnBoolCallback on_has_devices_cb) = 0; // Replies with device descriptions of input audio devices if |for_input| is // true, and of output audio devices otherwise. virtual void GetDeviceDescriptions( - OnDeviceDescriptionsCallback on_descriptions_cb, - bool for_input) = 0; + bool for_input, + OnDeviceDescriptionsCallback on_descriptions_cb) = 0; // Replies with an empty string if there is no associated output device found. virtual void GetAssociatedOutputDeviceID( @@ -84,8 +75,6 @@ const std::string& input_device_id, OnInputDeviceInfoCallback on_input_device_info_cb) = 0; - virtual base::SingleThreadTaskRunner* GetTaskRunner() const = 0; - protected: // Sets the global AudioSystem pointer to the specified non-null value. static void SetInstance(AudioSystem* audio_system);
diff --git a/media/audio/audio_system_impl.cc b/media/audio/audio_system_impl.cc index 707ae2d..fb1e5b43 100644 --- a/media/audio/audio_system_impl.cc +++ b/media/audio/audio_system_impl.cc
@@ -38,7 +38,7 @@ void AudioSystemImpl::GetInputStreamParameters( const std::string& device_id, - OnAudioParamsCallback on_params_cb) const { + OnAudioParamsCallback on_params_cb) { if (GetTaskRunner()->BelongsToCurrentThread()) { GetTaskRunner()->PostTask(FROM_HERE, base::BindOnce(std::move(on_params_cb), @@ -55,7 +55,7 @@ void AudioSystemImpl::GetOutputStreamParameters( const std::string& device_id, - OnAudioParamsCallback on_params_cb) const { + OnAudioParamsCallback on_params_cb) { if (GetTaskRunner()->BelongsToCurrentThread()) { GetTaskRunner()->PostTask(FROM_HERE, base::BindOnce(std::move(on_params_cb), @@ -70,7 +70,7 @@ std::move(on_params_cb)); } -void AudioSystemImpl::HasInputDevices(OnBoolCallback on_has_devices_cb) const { +void AudioSystemImpl::HasInputDevices(OnBoolCallback on_has_devices_cb) { if (GetTaskRunner()->BelongsToCurrentThread()) { GetTaskRunner()->PostTask( FROM_HERE, base::BindOnce(std::move(on_has_devices_cb), @@ -84,7 +84,7 @@ std::move(on_has_devices_cb)); } -void AudioSystemImpl::HasOutputDevices(OnBoolCallback on_has_devices_cb) const { +void AudioSystemImpl::HasOutputDevices(OnBoolCallback on_has_devices_cb) { if (GetTaskRunner()->BelongsToCurrentThread()) { GetTaskRunner()->PostTask( FROM_HERE, base::BindOnce(std::move(on_has_devices_cb), @@ -99,8 +99,8 @@ } void AudioSystemImpl::GetDeviceDescriptions( - OnDeviceDescriptionsCallback on_descriptions_cb, - bool for_input) { + bool for_input, + OnDeviceDescriptionsCallback on_descriptions_cb) { if (GetTaskRunner()->BelongsToCurrentThread()) { GetTaskRunner()->PostTask( FROM_HERE, @@ -151,10 +151,6 @@ : media::BindToCurrentLoop(std::move(on_input_device_info_cb)))); } -base::SingleThreadTaskRunner* AudioSystemImpl::GetTaskRunner() const { - return audio_manager_->GetTaskRunner(); -} - // static AudioParameters AudioSystemImpl::GetInputParametersOnDeviceThread( AudioManager* audio_manager, @@ -225,4 +221,8 @@ associated_output_device_id); } +base::SingleThreadTaskRunner* AudioSystemImpl::GetTaskRunner() const { + return audio_manager_->GetTaskRunner(); +} + } // namespace media
diff --git a/media/audio/audio_system_impl.h b/media/audio/audio_system_impl.h index 4e799b8..0850d8e5 100644 --- a/media/audio/audio_system_impl.h +++ b/media/audio/audio_system_impl.h
@@ -21,20 +21,19 @@ ~AudioSystemImpl() override; // AudioSystem implementation. - void GetInputStreamParameters( - const std::string& device_id, - OnAudioParamsCallback on_params_cb) const override; + void GetInputStreamParameters(const std::string& device_id, + OnAudioParamsCallback on_params_cb) override; - void GetOutputStreamParameters( - const std::string& device_id, - OnAudioParamsCallback on_params_cb) const override; + void GetOutputStreamParameters(const std::string& device_id, + OnAudioParamsCallback on_params_cb) override; - void HasInputDevices(OnBoolCallback on_has_devices_cb) const override; + void HasInputDevices(OnBoolCallback on_has_devices_cb) override; - void HasOutputDevices(OnBoolCallback on_has_devices_cb) const override; + void HasOutputDevices(OnBoolCallback on_has_devices_cb) override; - void GetDeviceDescriptions(OnDeviceDescriptionsCallback on_descriptions_cp, - bool for_input) override; + void GetDeviceDescriptions( + bool for_input, + OnDeviceDescriptionsCallback on_descriptions_cp) override; void GetAssociatedOutputDeviceID(const std::string& input_device_id, OnDeviceIdCallback on_device_id_cb) override; @@ -43,14 +42,10 @@ const std::string& input_device_id, OnInputDeviceInfoCallback on_input_device_info_cb) override; - base::SingleThreadTaskRunner* GetTaskRunner() const override; - protected: AudioSystemImpl(AudioManager* audio_manager); private: - AudioManager* const audio_manager_; - static AudioParameters GetInputParametersOnDeviceThread( AudioManager* audio_manager, const std::string& device_id); @@ -68,6 +63,10 @@ const std::string& input_device_id, AudioSystem::OnInputDeviceInfoCallback on_input_device_info_cb); + base::SingleThreadTaskRunner* GetTaskRunner() const; + + AudioManager* const audio_manager_; + DISALLOW_COPY_AND_ASSIGN(AudioSystemImpl); };
diff --git a/media/audio/audio_system_impl_unittest.cc b/media/audio/audio_system_impl_unittest.cc index 7f003793..8601050 100644 --- a/media/audio/audio_system_impl_unittest.cc +++ b/media/audio/audio_system_impl_unittest.cc
@@ -241,9 +241,8 @@ EXPECT_EQ(1, static_cast<int>(output_device_descriptions_.size())); EXPECT_CALL(*this, DeviceDescriptionsReceived()); audio_system_->GetDeviceDescriptions( - base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), input_device_descriptions_), - true); + true, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, + base::Unretained(this), input_device_descriptions_)); WaitForCallback(); } @@ -258,9 +257,8 @@ EXPECT_EQ(1, static_cast<int>(output_device_descriptions_.size())); EXPECT_CALL(*this, DeviceDescriptionsReceived()); audio_system_->GetDeviceDescriptions( - base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), input_device_descriptions_), - true); + true, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, + base::Unretained(this), input_device_descriptions_)); WaitForCallback(); } @@ -271,9 +269,8 @@ EXPECT_EQ(1, static_cast<int>(input_device_descriptions_.size())); EXPECT_CALL(*this, DeviceDescriptionsReceived()); audio_system_->GetDeviceDescriptions( - base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), output_device_descriptions_), - false); + false, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, + base::Unretained(this), output_device_descriptions_)); WaitForCallback(); } @@ -288,9 +285,8 @@ EXPECT_EQ(1, static_cast<int>(input_device_descriptions_.size())); EXPECT_CALL(*this, DeviceDescriptionsReceived()); audio_system_->GetDeviceDescriptions( - base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, - base::Unretained(this), output_device_descriptions_), - false); + false, base::Bind(&AudioSystemImplTest::OnGetDeviceDescriptions, + base::Unretained(this), output_device_descriptions_)); WaitForCallback(); }
diff --git a/media/base/test_helpers.h b/media/base/test_helpers.h index ea01be41..7587730 100644 --- a/media/base/test_helpers.h +++ b/media/base/test_helpers.h
@@ -284,6 +284,15 @@ track_type); } +MATCHER_P2(AudioNonKeyframe, pts_microseconds, dts_microseconds, "") { + return CONTAINS_STRING( + arg, std::string("Bytestream with audio frame PTS ") + + base::IntToString(pts_microseconds) + "us and DTS " + + base::IntToString(dts_microseconds) + + "us indicated the frame is not a random access point (key " + "frame). All audio frames are expected to be key frames."); +} + MATCHER_P2(SkippingSpliceAtOrBefore, new_microseconds, existing_microseconds,
diff --git a/media/blink/DEPS b/media/blink/DEPS index 133aca91..0fb853c9 100644 --- a/media/blink/DEPS +++ b/media/blink/DEPS
@@ -3,6 +3,7 @@ "+cc/layers/video_frame_provider.h", "+cc/layers/video_layer.h", "+components/scheduler", # Only allowed in tests. + "+components/viz/common/surfaces/frame_sink_id.h", "+gin", "+media", "+mojo/edk/embedder",
diff --git a/media/blink/video_frame_compositor.cc b/media/blink/video_frame_compositor.cc index 5288716..a09f0c2 100644 --- a/media/blink/video_frame_compositor.cc +++ b/media/blink/video_frame_compositor.cc
@@ -10,7 +10,9 @@ #include "base/time/default_tick_clock.h" #include "base/trace_event/auto_open_close_event.h" #include "base/trace_event/trace_event.h" +#include "media/base/media_switches.h" #include "media/base/video_frame.h" +#include "third_party/WebKit/public/platform/WebVideoFrameSubmitter.h" namespace media { @@ -19,8 +21,8 @@ const int kBackgroundRenderingTimeoutMs = 250; VideoFrameCompositor::VideoFrameCompositor( - const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner) - : compositor_task_runner_(compositor_task_runner), + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) + : task_runner_(task_runner), tick_clock_(new base::DefaultTickClock()), background_rendering_enabled_(true), background_rendering_timer_( @@ -37,20 +39,38 @@ new_background_frame_(false), // Assume 60Hz before the first UpdateCurrentFrame() call. last_interval_(base::TimeDelta::FromSecondsD(1.0 / 60)), - callback_(nullptr) { - background_rendering_timer_.SetTaskRunner(compositor_task_runner_); + callback_(nullptr), + surface_layer_for_video_enabled_( + base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo)) { + background_rendering_timer_.SetTaskRunner(task_runner_); + + if (surface_layer_for_video_enabled_) + submitter_ = blink::WebVideoFrameSubmitter::Create(this); } VideoFrameCompositor::~VideoFrameCompositor() { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(!callback_); DCHECK(!rendering_); if (client_) client_->StopUsingProvider(); + if (submitter_) + submitter_->StopUsingProvider(); +} + +void VideoFrameCompositor::EnableSubmission(const viz::FrameSinkId& id) { + DCHECK(task_runner_->BelongsToCurrentThread()); + submitter_->StartSubmitting(id); +} + +bool VideoFrameCompositor::IsClientSinkAvailable() { + DCHECK(task_runner_->BelongsToCurrentThread()); + return !surface_layer_for_video_enabled_ ? client_ != nullptr + : submitter_.get() != nullptr; } void VideoFrameCompositor::OnRendererStateUpdate(bool new_state) { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK_NE(rendering_, new_state); rendering_ = new_state; @@ -77,18 +97,25 @@ DCHECK(!background_rendering_timer_.IsRunning()); } - if (!client_) + if (!IsClientSinkAvailable()) return; - if (rendering_) - client_->StartRendering(); - else - client_->StopRendering(); + if (surface_layer_for_video_enabled_) { + if (rendering_) + submitter_->StartRendering(); + else + submitter_->StopRendering(); + } else { + if (rendering_) + client_->StartRendering(); + else + client_->StopRendering(); + } } void VideoFrameCompositor::SetVideoFrameProviderClient( cc::VideoFrameProvider::Client* client) { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); if (client_) client_->StopUsingProvider(); client_ = client; @@ -99,23 +126,23 @@ } scoped_refptr<VideoFrame> VideoFrameCompositor::GetCurrentFrame() { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); return current_frame_; } void VideoFrameCompositor::PutCurrentFrame() { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); rendered_last_frame_ = true; } bool VideoFrameCompositor::UpdateCurrentFrame(base::TimeTicks deadline_min, base::TimeTicks deadline_max) { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); return CallRender(deadline_min, deadline_max, false); } bool VideoFrameCompositor::HasCurrentFrame() { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); return static_cast<bool>(current_frame_); } @@ -125,7 +152,7 @@ base::AutoLock lock(callback_lock_); DCHECK(!callback_); callback_ = callback; - compositor_task_runner_->PostTask( + task_runner_->PostTask( FROM_HERE, base::Bind(&VideoFrameCompositor::OnRendererStateUpdate, base::Unretained(this), true)); } @@ -137,7 +164,7 @@ base::AutoLock lock(callback_lock_); DCHECK(callback_); callback_ = nullptr; - compositor_task_runner_->PostTask( + task_runner_->PostTask( FROM_HERE, base::Bind(&VideoFrameCompositor::OnRendererStateUpdate, base::Unretained(this), false)); } @@ -145,22 +172,27 @@ void VideoFrameCompositor::PaintSingleFrame( const scoped_refptr<VideoFrame>& frame, bool repaint_duplicate_frame) { - if (!compositor_task_runner_->BelongsToCurrentThread()) { - compositor_task_runner_->PostTask( + if (!task_runner_->BelongsToCurrentThread()) { + task_runner_->PostTask( FROM_HERE, base::Bind(&VideoFrameCompositor::PaintSingleFrame, base::Unretained(this), frame, repaint_duplicate_frame)); return; } - - if (ProcessNewFrame(frame, repaint_duplicate_frame) && client_) - client_->DidReceiveFrame(); + if (ProcessNewFrame(frame, repaint_duplicate_frame) && + IsClientSinkAvailable()) { + if (!surface_layer_for_video_enabled_) + client_->DidReceiveFrame(); + else + submitter_->DidReceiveFrame(); + } } scoped_refptr<VideoFrame> VideoFrameCompositor::GetCurrentFrameAndUpdateIfStale() { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); - if (client_ || !rendering_ || !is_background_rendering_) + DCHECK(task_runner_->BelongsToCurrentThread()); + + if (IsClientSinkAvailable() || !rendering_ || !is_background_rendering_) return current_frame_; DCHECK(!last_background_render_.is_null()); @@ -192,14 +224,14 @@ void VideoFrameCompositor::SetOnNewProcessedFrameCallback( const OnNewProcessedFrameCB& cb) { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); new_processed_frame_cb_ = cb; } bool VideoFrameCompositor::ProcessNewFrame( const scoped_refptr<VideoFrame>& frame, bool repaint_duplicate_frame) { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); if (frame && current_frame_ && !repaint_duplicate_frame && frame->unique_id() == current_frame_->unique_id()) { @@ -219,20 +251,24 @@ } void VideoFrameCompositor::BackgroundRender() { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); + DCHECK(task_runner_->BelongsToCurrentThread()); const base::TimeTicks now = tick_clock_->NowTicks(); last_background_render_ = now; bool new_frame = CallRender(now, now + last_interval_, true); - if (new_frame && client_) - client_->DidReceiveFrame(); + if (new_frame && IsClientSinkAvailable()) { + if (!surface_layer_for_video_enabled_) + client_->DidReceiveFrame(); + else + submitter_->DidReceiveFrame(); + } } bool VideoFrameCompositor::CallRender(base::TimeTicks deadline_min, base::TimeTicks deadline_max, bool background_rendering) { - DCHECK(compositor_task_runner_->BelongsToCurrentThread()); - + DCHECK(task_runner_->BelongsToCurrentThread()); base::AutoLock lock(callback_lock_); + if (!callback_) { // Even if we no longer have a callback, return true if we have a frame // which |client_| hasn't seen before.
diff --git a/media/blink/video_frame_compositor.h b/media/blink/video_frame_compositor.h index ec438ea7..e727e43b 100644 --- a/media/blink/video_frame_compositor.h +++ b/media/blink/video_frame_compositor.h
@@ -18,6 +18,7 @@ #include "cc/layers/video_frame_provider.h" #include "media/base/video_renderer_sink.h" #include "media/blink/media_blink_export.h" +#include "third_party/WebKit/public/platform/WebVideoFrameSubmitter.h" #include "ui/gfx/geometry/size.h" namespace base { @@ -26,6 +27,10 @@ } } +namespace viz { +class FrameSinkId; +} + namespace media { class VideoFrame; @@ -60,18 +65,21 @@ // Used to report back the time when the new frame has been processed. using OnNewProcessedFrameCB = base::Callback<void(base::TimeTicks)>; - // |compositor_task_runner| is the task runner on which this class will live, + // |task_runner| is the task runner on which this class will live, // though it may be constructed on any thread. explicit VideoFrameCompositor( - const scoped_refptr<base::SingleThreadTaskRunner>& - compositor_task_runner); + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); // Destruction must happen on the compositor thread; Stop() must have been // called before destruction starts. ~VideoFrameCompositor() override; + // Signals the VideoFrameSubmitter to prepare to receive BeginFrames and + // submit video frames given by VideoFrameCompositor. + void EnableSubmission(const viz::FrameSinkId& id); + // cc::VideoFrameProvider implementation. These methods must be called on the - // |compositor_task_runner_|. + // |task_runner_|. void SetVideoFrameProviderClient( cc::VideoFrameProvider::Client* client) override; bool UpdateCurrentFrame(base::TimeTicks deadline_min, @@ -125,7 +133,17 @@ background_rendering_enabled_ = enabled; } + void set_submitter_for_test( + std::unique_ptr<blink::WebVideoFrameSubmitter> submitter) { + submitter_ = std::move(submitter); + } + private: + // Indicates whether the endpoint for the VideoFrame exists. + // TODO(lethalantidote): Update this function to read creation/destruction + // signals of the SurfaceLayerImpl. + bool IsClientSinkAvailable(); + // Called on the compositor thread in response to Start() or Stop() calls; // must be used to change |rendering_| state. void OnRendererStateUpdate(bool new_state); @@ -146,14 +164,18 @@ base::TimeTicks deadline_max, bool background_rendering); - scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; + // This will run tasks on the compositor thread. If + // kEnableSurfaceLayerForVideo is enabled, it will instead run tasks on the + // media thread. + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + std::unique_ptr<base::TickClock> tick_clock_; // Allows tests to disable the background rendering task. bool background_rendering_enabled_; // Manages UpdateCurrentFrame() callbacks if |client_| has stopped sending - // them for various reasons. Runs on |compositor_task_runner_| and is reset + // them for various reasons. Runs on |task_runner_| and is reset // after each successful UpdateCurrentFrame() call. base::Timer background_rendering_timer_; @@ -177,6 +199,10 @@ // AutoOpenCloseEvent for begin/end events. std::unique_ptr<base::trace_event::AutoOpenCloseEvent> auto_open_close_; + std::unique_ptr<blink::WebVideoFrameSubmitter> submitter_; + + // Whether the use of a surface layer instead of a video layer is enabled. + bool surface_layer_for_video_enabled_ = false; DISALLOW_COPY_AND_ASSIGN(VideoFrameCompositor); };
diff --git a/media/blink/video_frame_compositor_unittest.cc b/media/blink/video_frame_compositor_unittest.cc index e987cb90..18637fd 100644 --- a/media/blink/video_frame_compositor_unittest.cc +++ b/media/blink/video_frame_compositor_unittest.cc
@@ -2,33 +2,70 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "media/blink/video_frame_compositor.h" #include "base/bind.h" #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "base/test/scoped_feature_list.h" #include "base/test/simple_test_tick_clock.h" -#include "cc/layers/video_frame_provider.h" +#include "components/viz/common/surfaces/frame_sink_id.h" #include "media/base/gmock_callback_support.h" #include "media/base/video_frame.h" -#include "media/blink/video_frame_compositor.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/WebKit/public/platform/WebVideoFrameSubmitter.h" using testing::_; using testing::DoAll; using testing::Return; +using testing::StrictMock; namespace media { -class VideoFrameCompositorTest : public testing::Test, - public cc::VideoFrameProvider::Client, - public VideoRendererSink::RenderCallback { +class MockWebVideoFrameSubmitter : public blink::WebVideoFrameSubmitter { + public: + // blink::WebVideoFrameSubmitter implementation. + void StopUsingProvider() override {} + MOCK_METHOD1(StartSubmitting, void(const viz::FrameSinkId&)); + MOCK_METHOD0(StartRendering, void()); + MOCK_METHOD0(StopRendering, void()); + void DidReceiveFrame() override { ++did_receive_frame_count_; } + + int did_receive_frame_count() { return did_receive_frame_count_; } + + private: + int did_receive_frame_count_ = 0; +}; + +class VideoFrameCompositorTest : public VideoRendererSink::RenderCallback, + public ::testing::TestWithParam<bool> { public: VideoFrameCompositorTest() : tick_clock_(new base::SimpleTestTickClock()), - compositor_(new VideoFrameCompositor(message_loop.task_runner())), - did_receive_frame_count_(0) { - compositor_->SetVideoFrameProviderClient(this); + client_(new StrictMock<MockWebVideoFrameSubmitter>()) {} + + void SetUp() { + if (IsSurfaceLayerForVideoEnabled()) { + feature_list_.InitFromCommandLine("UseSurfaceLayerForVideo", ""); + + // When SurfaceLayerForVideo is enabled, |compositor_| owns the + // |submitter_|. Otherwise, the |compositor_| treats the |submitter_| if + // were a VideoFrameProviderClient in the VideoLayer code path, holding + // only a bare pointer. + } + submitter_ = client_.get(); + compositor_ = + base::MakeUnique<VideoFrameCompositor>(message_loop.task_runner()); + + if (!IsSurfaceLayerForVideoEnabled()) { + compositor_->SetVideoFrameProviderClient(client_.get()); + } else { + EXPECT_CALL(*submitter_, StartSubmitting(_)); + compositor_->set_submitter_for_test(std::move(client_)); + compositor_->EnableSubmission(viz::FrameSinkId(1, 1)); + } + compositor_->set_tick_clock_for_testing( std::unique_ptr<base::TickClock>(tick_clock_)); // Disable background rendering by default. @@ -46,14 +83,9 @@ } VideoFrameCompositor* compositor() { return compositor_.get(); } - int did_receive_frame_count() { return did_receive_frame_count_; } protected: - // cc::VideoFrameProvider::Client implementation. - void StopUsingProvider() override {} - MOCK_METHOD0(StartRendering, void()); - MOCK_METHOD0(StopRendering, void()); - void DidReceiveFrame() override { ++did_receive_frame_count_; } + bool IsSurfaceLayerForVideoEnabled() { return GetParam(); } // VideoRendererSink::RenderCallback implementation. MOCK_METHOD3(Render, @@ -63,7 +95,7 @@ MOCK_METHOD0(OnFrameDropped, void()); void StartVideoRendererSink() { - EXPECT_CALL(*this, StartRendering()); + EXPECT_CALL(*submitter_, StartRendering()); const bool had_current_frame = !!compositor_->GetCurrentFrame(); compositor()->Start(this); // If we previously had a frame, we should still have one now. @@ -73,7 +105,7 @@ void StopVideoRendererSink(bool have_client) { if (have_client) - EXPECT_CALL(*this, StopRendering()); + EXPECT_CALL(*submitter_, StopRendering()); const bool had_current_frame = !!compositor_->GetCurrentFrame(); compositor()->Stop(); // If we previously had a frame, we should still have one now. @@ -88,29 +120,32 @@ base::MessageLoop message_loop; base::SimpleTestTickClock* tick_clock_; // Owned by |compositor_| + StrictMock<MockWebVideoFrameSubmitter>* submitter_; + std::unique_ptr<StrictMock<MockWebVideoFrameSubmitter>> client_; std::unique_ptr<VideoFrameCompositor> compositor_; - int did_receive_frame_count_; + private: + base::test::ScopedFeatureList feature_list_; DISALLOW_COPY_AND_ASSIGN(VideoFrameCompositorTest); }; -TEST_F(VideoFrameCompositorTest, InitialValues) { +TEST_P(VideoFrameCompositorTest, InitialValues) { EXPECT_FALSE(compositor()->GetCurrentFrame().get()); } -TEST_F(VideoFrameCompositorTest, PaintSingleFrame) { +TEST_P(VideoFrameCompositorTest, PaintSingleFrame) { scoped_refptr<VideoFrame> expected = VideoFrame::CreateEOSFrame(); // Should notify compositor synchronously. - EXPECT_EQ(0, did_receive_frame_count()); + EXPECT_EQ(0, submitter_->did_receive_frame_count()); compositor()->PaintSingleFrame(expected); scoped_refptr<VideoFrame> actual = compositor()->GetCurrentFrame(); EXPECT_EQ(expected, actual); - EXPECT_EQ(1, did_receive_frame_count()); + EXPECT_EQ(1, submitter_->did_receive_frame_count()); } -TEST_F(VideoFrameCompositorTest, VideoRendererSinkFrameDropped) { +TEST_P(VideoFrameCompositorTest, VideoRendererSinkFrameDropped) { scoped_refptr<VideoFrame> opaque_frame = CreateOpaqueFrame(); EXPECT_CALL(*this, Render(_, _, _)).WillRepeatedly(Return(opaque_frame)); @@ -144,21 +179,23 @@ StopVideoRendererSink(true); } -TEST_F(VideoFrameCompositorTest, VideoLayerShutdownWhileRendering) { - EXPECT_CALL(*this, Render(_, _, true)).WillOnce(Return(nullptr)); - StartVideoRendererSink(); - compositor_->SetVideoFrameProviderClient(nullptr); - StopVideoRendererSink(false); +TEST_P(VideoFrameCompositorTest, VideoLayerShutdownWhileRendering) { + if (!IsSurfaceLayerForVideoEnabled()) { + EXPECT_CALL(*this, Render(_, _, true)).WillOnce(Return(nullptr)); + StartVideoRendererSink(); + compositor_->SetVideoFrameProviderClient(nullptr); + StopVideoRendererSink(false); + } } -TEST_F(VideoFrameCompositorTest, StartFiresBackgroundRender) { +TEST_P(VideoFrameCompositorTest, StartFiresBackgroundRender) { scoped_refptr<VideoFrame> opaque_frame = CreateOpaqueFrame(); EXPECT_CALL(*this, Render(_, _, true)).WillRepeatedly(Return(opaque_frame)); StartVideoRendererSink(); StopVideoRendererSink(true); } -TEST_F(VideoFrameCompositorTest, BackgroundRenderTicks) { +TEST_P(VideoFrameCompositorTest, BackgroundRenderTicks) { scoped_refptr<VideoFrame> opaque_frame = CreateOpaqueFrame(); compositor_->set_background_rendering_for_testing(true); @@ -179,7 +216,7 @@ StopVideoRendererSink(true); } -TEST_F(VideoFrameCompositorTest, +TEST_P(VideoFrameCompositorTest, UpdateCurrentFrameWorksWhenBackgroundRendered) { scoped_refptr<VideoFrame> opaque_frame = CreateOpaqueFrame(); compositor_->set_background_rendering_for_testing(true); @@ -207,7 +244,7 @@ StopVideoRendererSink(true); } -TEST_F(VideoFrameCompositorTest, GetCurrentFrameAndUpdateIfStale) { +TEST_P(VideoFrameCompositorTest, GetCurrentFrameAndUpdateIfStale) { scoped_refptr<VideoFrame> opaque_frame_1 = CreateOpaqueFrame(); scoped_refptr<VideoFrame> opaque_frame_2 = CreateOpaqueFrame(); compositor_->set_background_rendering_for_testing(true); @@ -235,8 +272,12 @@ testing::Mock::VerifyAndClearExpectations(this); - // Clear our client, which means no mock function calls for Client. - compositor()->SetVideoFrameProviderClient(nullptr); + if (IsSurfaceLayerForVideoEnabled()) { + compositor()->set_submitter_for_test(nullptr); + } else { + // Clear our client, which means no mock function calls for Client. + compositor()->SetVideoFrameProviderClient(nullptr); + } // This call should still not call background render, because we aren't in the // background rendering state yet. @@ -262,4 +303,8 @@ StopVideoRendererSink(false); } +INSTANTIATE_TEST_CASE_P(SubmitterEnabled, + VideoFrameCompositorTest, + ::testing::Bool()); + } // namespace media
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index 9804c637..a93ac1d 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc
@@ -187,6 +187,7 @@ preload_(base::FeatureList::IsEnabled(kPreloadDefaultIsMetadata) ? MultibufferDataSource::METADATA : MultibufferDataSource::AUTO), + has_poster_(false), main_task_runner_(frame->LoadingTaskRunner()), media_task_runner_(params->media_task_runner()), worker_task_runner_(params->worker_task_runner()), @@ -226,11 +227,6 @@ base::Bind(&WebMediaPlayerImpl::OnProgress, AsWeakPtr()), tick_clock_.get()), url_index_(url_index), - // Threaded compositing isn't enabled universally yet. - compositor_task_runner_(params->compositor_task_runner() - ? params->compositor_task_runner() - : base::ThreadTaskRunnerHandle::Get()), - compositor_(new VideoFrameCompositor(compositor_task_runner_)), #if defined(OS_ANDROID) // WMPI_CAST cast_impl_(this, client_, params->context_3d_cb()), #endif @@ -264,8 +260,25 @@ DCHECK(client_); DCHECK(delegate_); - if (surface_layer_for_video_enabled_) - bridge_ = base::WrapUnique(blink::WebSurfaceLayerBridge::Create()); + if (surface_layer_for_video_enabled_) { + bridge_ = params->create_bridge_callback().Run(this); + // TODO(lethalantidote): Use a seperate task_runner. https://crbug/753605. + vfc_task_runner_ = media_task_runner_; + } else { + // Threaded compositing isn't enabled universally yet. + vfc_task_runner_ = params->compositor_task_runner() + ? params->compositor_task_runner() + : base::ThreadTaskRunnerHandle::Get(); + } + + compositor_ = base::MakeUnique<VideoFrameCompositor>(vfc_task_runner_); + + if (surface_layer_for_video_enabled_) { + vfc_task_runner_->PostTask( + FROM_HERE, base::Bind(&VideoFrameCompositor::EnableSubmission, + base::Unretained(compositor_.get()), + bridge_->GetFrameSinkId())); + } // If we're supposed to force video overlays, then make sure that they're // enabled all the time. @@ -329,12 +342,12 @@ // Destruct compositor resources in the proper order. client_->SetWebLayer(nullptr); + if (!surface_layer_for_video_enabled_ && video_weblayer_) { static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider(); } - // TODO(lethalantidote): Handle destruction of compositor for surface layer. - // https://crbug/739854. - compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_); + + vfc_task_runner_->DeleteSoon(FROM_HERE, std::move(compositor_)); media_log_->AddEvent( media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); @@ -357,6 +370,17 @@ DoLoad(load_type, url, cors_mode); } +void WebMediaPlayerImpl::OnWebLayerReplaced() { + DCHECK(bridge_); + bridge_->GetWebLayer()->CcLayer()->SetContentsOpaque(opaque_); + // TODO(lethalantidote): Figure out how to persist opaque setting + // without calling WebLayerImpl's SetContentsOpaueIsFixed; + // https://crbug/739859. + // TODO(lethalantidote): Figure out how to pass along rotation information. + // https://crbug/750313. + client_->SetWebLayer(bridge_->GetWebLayer()); +} + bool WebMediaPlayerImpl::SupportsOverlayFullscreenVideo() { #if defined(OS_ANDROID) return !using_media_player_renderer_ && @@ -489,6 +513,15 @@ GURL gurl(url); ReportMetrics(load_type, gurl, frame_->GetSecurityOrigin(), media_log_.get()); + // Report poster availability for SRC=. + if (load_type == kLoadTypeURL) { + if (preload_ == MultibufferDataSource::METADATA) { + UMA_HISTOGRAM_BOOLEAN("Media.SRC.PreloadMetaDataHasPoster", has_poster_); + } else if (preload_ == MultibufferDataSource::AUTO) { + UMA_HISTOGRAM_BOOLEAN("Media.SRC.PreloadAutoHasPoster", has_poster_); + } + } + // Set subresource URL for crash reporting. base::debug::SetCrashKeyValue("subresource_url", gurl.spec()); @@ -1421,16 +1454,10 @@ if (!surface_layer_for_video_enabled_) { DCHECK(!video_weblayer_); video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( - compositor_, pipeline_metadata_.video_rotation))); + compositor_.get(), pipeline_metadata_.video_rotation))); video_weblayer_->layer()->SetContentsOpaque(opaque_); video_weblayer_->SetContentsOpaqueIsFixed(true); client_->SetWebLayer(video_weblayer_.get()); - } else if (bridge_->GetWebLayer()) { - bridge_->GetWebLayer()->CcLayer()->SetContentsOpaque(opaque_); - // TODO(lethalantidote): Figure out how to persist opaque setting - // without calling WebLayerImpl's SetContentsOpaueIsFixed; - // https://crbug/739859. - client_->SetWebLayer(bridge_->GetWebLayer()); } } @@ -1759,10 +1786,10 @@ frame_time_report_cb_.Reset( base::Bind(&WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame, AsWeakPtr(), base::TimeTicks::Now())); - compositor_task_runner_->PostTask( + vfc_task_runner_->PostTask( FROM_HERE, base::Bind(&VideoFrameCompositor::SetOnNewProcessedFrameCallback, - base::Unretained(compositor_), + base::Unretained(compositor_.get()), BindToCurrentLoop(frame_time_report_cb_.callback()))); } @@ -1896,11 +1923,14 @@ void WebMediaPlayerImpl::SetDeviceScaleFactor(float scale_factor) { cast_impl_.SetDeviceScaleFactor(scale_factor); } +#endif // defined(OS_ANDROID) // WMPI_CAST void WebMediaPlayerImpl::SetPoster(const blink::WebURL& poster) { + has_poster_ = !poster.IsEmpty(); +#if defined(OS_ANDROID) // WMPI_CAST cast_impl_.setPoster(poster); -} #endif // defined(OS_ANDROID) // WMPI_CAST +} void WebMediaPlayerImpl::DataSourceInitialized(bool success) { DVLOG(1) << __func__; @@ -2051,7 +2081,7 @@ #endif return renderer_factory_selector_->GetCurrentFactory()->CreateRenderer( media_task_runner_, worker_task_runner_, audio_source_provider_.get(), - compositor_, request_overlay_info_cb, client_->TargetColorSpace()); + compositor_.get(), request_overlay_info_cb, client_->TargetColorSpace()); } void WebMediaPlayerImpl::StartPipeline() { @@ -2173,9 +2203,9 @@ DCHECK(main_task_runner_->BelongsToCurrentThread()); TRACE_EVENT0("media", "WebMediaPlayerImpl::GetCurrentFrameFromCompositor"); - // Needed when the |main_task_runner_| and |compositor_task_runner_| are the + // Needed when the |main_task_runner_| and |vfc_task_runner_| are the // same to avoid deadlock in the Wait() below. - if (compositor_task_runner_->BelongsToCurrentThread()) { + if (vfc_task_runner_->BelongsToCurrentThread()) { scoped_refptr<VideoFrame> video_frame = compositor_->GetCurrentFrameAndUpdateIfStale(); if (!video_frame) { @@ -2191,9 +2221,9 @@ scoped_refptr<VideoFrame> video_frame; base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC, base::WaitableEvent::InitialState::NOT_SIGNALED); - compositor_task_runner_->PostTask( + vfc_task_runner_->PostTask( FROM_HERE, - base::Bind(&GetCurrentFrameAndSignal, base::Unretained(compositor_), + base::Bind(&GetCurrentFrameAndSignal, base::Unretained(compositor_.get()), &video_frame, &event)); event.Wait();
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index 80035aa..f45243fc 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h
@@ -92,6 +92,7 @@ public WebMediaPlayerDelegate::Observer, public Pipeline::Client, public MediaObserverClient, + public blink::WebSurfaceLayerBridgeObserver, public base::SupportsWeakPtr<WebMediaPlayerImpl> { public: // Constructs a WebMediaPlayer implementation using Chromium's media stack. @@ -106,6 +107,9 @@ std::unique_ptr<WebMediaPlayerParams> params); ~WebMediaPlayerImpl() override; + // WebSurfaceLayerBridgeObserver implementation. + void OnWebLayerReplaced() override; + void Load(LoadType load_type, const blink::WebMediaPlayerSource& source, CORSMode cors_mode) override; @@ -120,6 +124,7 @@ void SetSinkId(const blink::WebString& sink_id, const blink::WebSecurityOrigin& security_origin, blink::WebSetSinkIdCallbacks* web_callback) override; + void SetPoster(const blink::WebURL& poster) override; void SetPreload(blink::WebMediaPlayer::Preload preload) override; blink::WebTimeRanges Buffered() const override; blink::WebTimeRanges Seekable() const override; @@ -227,7 +232,6 @@ gfx::Size GetCanvasSize() const; void SetDeviceScaleFactor(float scale_factor); void SetUseFallbackPath(bool use_fallback_path); - void SetPoster(const blink::WebURL& poster) override; #endif // MediaObserverClient implementation. @@ -524,6 +528,9 @@ // Preload state for when |data_source_| is created after setPreload(). MultibufferDataSource::Preload preload_; + // Poster state (for UMA reporting). + bool has_poster_; + // Task runner for posting tasks on Chrome's main thread. Also used // for DCHECKs so methods calls won't execute in the wrong thread. const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; @@ -639,8 +646,12 @@ UrlIndex* url_index_; // Video rendering members. - scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; - VideoFrameCompositor* compositor_; // Deleted on |compositor_task_runner_|. + // The |compositor_| runs on the compositor thread, or if + // kEnableSurfaceLayerForVideo is enabled, the media thread. This task runner + // posts tasks for the |compositor_| on the correct thread. + scoped_refptr<base::SingleThreadTaskRunner> vfc_task_runner_; + std::unique_ptr<VideoFrameCompositor> + compositor_; // Deleted on |vfc_task_runner_|. SkCanvasVideoRenderer skcanvas_video_renderer_; // The compositor layer for displaying the video content when using composited
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc index db7b42803..5d046a42 100644 --- a/media/blink/webmediaplayer_impl_unittest.cc +++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -20,6 +20,7 @@ #include "base/test/simple_test_tick_clock.h" #include "base/threading/thread.h" #include "base/threading/thread_task_runner_handle.h" +#include "cc/blink/web_layer_impl.h" #include "media/base/media_log.h" #include "media/base/media_switches.h" #include "media/base/test_helpers.h" @@ -34,6 +35,7 @@ #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" #include "third_party/WebKit/public/platform/WebSize.h" +#include "third_party/WebKit/public/platform/WebSurfaceLayerBridge.h" #include "third_party/WebKit/public/web/WebFrameClient.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" #include "third_party/WebKit/public/web/WebScopedUserGesture.h" @@ -43,6 +45,8 @@ using ::testing::AnyNumber; using ::testing::InSequence; using ::testing::Return; +using ::testing::ReturnRef; +using ::testing::StrictMock; using ::testing::_; namespace media { @@ -218,6 +222,12 @@ bool is_closed_ = false; }; +class MockSurfaceLayerBridge : public blink::WebSurfaceLayerBridge { + public: + MOCK_CONST_METHOD0(GetWebLayer, blink::WebLayer*()); + MOCK_CONST_METHOD0(GetFrameSinkId, const viz::FrameSinkId&()); +}; + class WebMediaPlayerImplTest : public testing::Test { public: WebMediaPlayerImplTest() @@ -261,8 +271,11 @@ RequestRoutingTokenCallback(), nullptr, kMaxKeyframeDistanceToDisableBackgroundVideo, kMaxKeyframeDistanceToDisableBackgroundVideoMSE, false, false, - provider_.get(), base::Bind(&CreateCapabilitiesRecorder))); - } + provider_.get(), + base::Bind(&CreateCapabilitiesRecorder), + base::Bind(&WebMediaPlayerImplTest::CreateMockSurfaceLayerBridge, + base::Unretained(this)))); +} ~WebMediaPlayerImplTest() override { // Destruct WebMediaPlayerImpl and pump the message loop to ensure that @@ -271,15 +284,23 @@ // NOTE: This should be done before any other member variables are // destructed since WMPI may reference them during destruction. wmpi_.reset(); + base::RunLoop().RunUntilIdle(); web_view_->Close(); } protected: + std::unique_ptr<blink::WebSurfaceLayerBridge> CreateMockSurfaceLayerBridge( + blink::WebSurfaceLayerBridgeObserver*) { + return base::WrapUnique<blink::WebSurfaceLayerBridge>( + surface_layer_bridge_); + } + void SetNetworkState(blink::WebMediaPlayer::NetworkState state) { wmpi_->SetNetworkState(state); } + void SetReadyState(blink::WebMediaPlayer::ReadyState state) { wmpi_->SetReadyState(state); } @@ -437,6 +458,8 @@ mojom::WatchTimeRecorderProviderPtr provider_; + StrictMock<MockSurfaceLayerBridge>* surface_layer_bridge_ = nullptr; + // The WebMediaPlayerImpl instance under test. std::unique_ptr<WebMediaPlayerImpl> wmpi_; @@ -925,6 +948,26 @@ EXPECT_EQ(base::TimeDelta(), GetCurrentTimeInternal()); } +// TODO(lethalantidote): Once |client_| is converted from a dummy to a mock, +// test that |web_layer| is actually used by |client_|. +// http://crbug/755880. +TEST_F(WebMediaPlayerImplTest, OnWebLayerReplacedGetsWebLayerFromBridge) { + base::test::ScopedFeatureList feature_list; + feature_list.InitFromCommandLine("UseSurfaceLayerForVideo", ""); + surface_layer_bridge_ = new StrictMock<MockSurfaceLayerBridge>(); + + viz::FrameSinkId id = viz::FrameSinkId(1, 1); + EXPECT_CALL(*surface_layer_bridge_, GetFrameSinkId()).WillOnce(ReturnRef(id)); + InitializeWebMediaPlayerImpl(); + + std::unique_ptr<cc_blink::WebLayerImpl> web_layer = + base::MakeUnique<cc_blink::WebLayerImpl>(); + + EXPECT_CALL(*surface_layer_bridge_, GetWebLayer()) + .WillRepeatedly(Return(web_layer.get())); + wmpi_->OnWebLayerReplaced(); +} + class WebMediaPlayerImplBackgroundBehaviorTest : public WebMediaPlayerImplTest, public ::testing::WithParamInterface< @@ -941,7 +984,6 @@ void SetUp() override { WebMediaPlayerImplTest::SetUp(); - SetUpMediaSuspend(IsMediaSuspendOn()); std::string enabled_features;
diff --git a/media/blink/webmediaplayer_params.cc b/media/blink/webmediaplayer_params.cc index 7ea44802..f3cb594 100644 --- a/media/blink/webmediaplayer_params.cc +++ b/media/blink/webmediaplayer_params.cc
@@ -28,7 +28,9 @@ bool enable_instant_source_buffer_gc, bool embedded_media_experience_enabled, mojom::WatchTimeRecorderProvider* provider, - CreateCapabilitiesRecorderCB create_capabilities_recorder_cb) + CreateCapabilitiesRecorderCB create_capabilities_recorder_cb, + base::Callback<std::unique_ptr<blink::WebSurfaceLayerBridge>( + blink::WebSurfaceLayerBridgeObserver*)> create_bridge_callback) : defer_load_cb_(defer_load_cb), audio_renderer_sink_(audio_renderer_sink), media_log_(std::move(media_log)), @@ -49,7 +51,8 @@ embedded_media_experience_enabled_(embedded_media_experience_enabled), watch_time_recorder_provider_(provider), create_capabilities_recorder_cb_( - std::move(create_capabilities_recorder_cb)) {} + std::move(create_capabilities_recorder_cb)), + create_bridge_callback_(create_bridge_callback) {} WebMediaPlayerParams::~WebMediaPlayerParams() {}
diff --git a/media/blink/webmediaplayer_params.h b/media/blink/webmediaplayer_params.h index 29c0fc08..3c7d9335f 100644 --- a/media/blink/webmediaplayer_params.h +++ b/media/blink/webmediaplayer_params.h
@@ -26,7 +26,9 @@ namespace blink { class WebContentDecryptionModule; -} +class WebSurfaceLayerBridge; +class WebSurfaceLayerBridgeObserver; +} // namespace blink namespace media { @@ -73,7 +75,9 @@ bool enable_instant_source_buffer_gc, bool embedded_media_experience_enabled, mojom::WatchTimeRecorderProvider* provider, - CreateCapabilitiesRecorderCB create_capabilities_recorder_cb); + CreateCapabilitiesRecorderCB create_capabilities_recorder_cb, + base::Callback<std::unique_ptr<blink::WebSurfaceLayerBridge>( + blink::WebSurfaceLayerBridgeObserver*)> bridge_callback); ~WebMediaPlayerParams(); @@ -140,6 +144,11 @@ return watch_time_recorder_provider_; } + const base::Callback<std::unique_ptr<blink::WebSurfaceLayerBridge>( + blink::WebSurfaceLayerBridgeObserver*)>& create_bridge_callback() const { + return create_bridge_callback_; + } + CreateCapabilitiesRecorderCB create_capabilities_recorder_cb() const { return create_capabilities_recorder_cb_; } @@ -164,6 +173,9 @@ const bool embedded_media_experience_enabled_; mojom::WatchTimeRecorderProvider* watch_time_recorder_provider_; CreateCapabilitiesRecorderCB create_capabilities_recorder_cb_; + base::Callback<std::unique_ptr<blink::WebSurfaceLayerBridge>( + blink::WebSurfaceLayerBridgeObserver*)> + create_bridge_callback_; DISALLOW_IMPLICIT_CONSTRUCTORS(WebMediaPlayerParams); };
diff --git a/media/cdm/ppapi/ppapi_cdm_adapter.cc b/media/cdm/ppapi/ppapi_cdm_adapter.cc index e8dac0d..f7601903 100644 --- a/media/cdm/ppapi/ppapi_cdm_adapter.cc +++ b/media/cdm/ppapi/ppapi_cdm_adapter.cc
@@ -1204,6 +1204,8 @@ } void PpapiCdmAdapter::RequestStorageId() { + CDM_DLOG() << __func__; + // If persistent storage is not allowed, no need to get the Storage ID. if (allow_persistent_state_) { linked_ptr<pp::Var> response(new pp::Var()); @@ -1337,20 +1339,16 @@ void PpapiCdmAdapter::RequestStorageIdDone( int32_t result, const linked_ptr<pp::Var>& response) { - uint8_t* storage_id_ptr; - uint32_t storage_id_size; + std::string storage_id; - if (result == PP_OK && response->is_array_buffer()) { - pp::VarArrayBuffer storage_id(*response); - storage_id_ptr = static_cast<uint8_t*>(storage_id.Map()); - storage_id_size = storage_id.ByteLength(); - } else { - CDM_DLOG() << __func__ << " failed, result = " << result; - storage_id_ptr = nullptr; - storage_id_size = 0; - } + if (result == PP_OK) + storage_id = response->AsString(); - cdm_->OnStorageId(storage_id_ptr, storage_id_size); + CDM_DLOG() << __func__ << ": result = " << result + << ", storage_id = " << storage_id; + + cdm_->OnStorageId(reinterpret_cast<const uint8_t*>(storage_id.data()), + static_cast<uint32_t>(storage_id.length())); } PpapiCdmAdapter::SessionError::SessionError(
diff --git a/media/device_monitors/device_monitor_mac.h b/media/device_monitors/device_monitor_mac.h index 136bb7df..0fee010 100644 --- a/media/device_monitors/device_monitor_mac.h +++ b/media/device_monitors/device_monitor_mac.h
@@ -23,15 +23,16 @@ // is created from the browser main process and lives as long as this one. class MEDIA_EXPORT DeviceMonitorMac { public: - DeviceMonitorMac(); + // The |device_task_runner| argument represents the thread on which device + // enumeration will occur. + explicit DeviceMonitorMac( + scoped_refptr<base::SingleThreadTaskRunner> device_task_runner); ~DeviceMonitorMac(); // Registers the observers for the audio/video device removal, connection and // suspension. The AVFoundation library is also loaded and initialised if the - // OS supports it. The |device_task_runner| argument represents the thread on - // which device enumeration will occur. - void StartMonitoring( - const scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner); + // OS supports it. + void StartMonitoring(); // Method called by the internal DeviceMonitorMacImpl object // |device_monitor_impl_| when a device of type |type| has been added to or @@ -39,6 +40,7 @@ void NotifyDeviceChanged(base::SystemMonitor::DeviceType type); private: + scoped_refptr<base::SingleThreadTaskRunner> device_task_runner_; std::unique_ptr<DeviceMonitorMacImpl> device_monitor_impl_; // |thread_checker_| is used to check that constructor and StartMonitoring()
diff --git a/media/device_monitors/device_monitor_mac.mm b/media/device_monitors/device_monitor_mac.mm index 4a47f7d..9a02e90 100644 --- a/media/device_monitors/device_monitor_mac.mm +++ b/media/device_monitors/device_monitor_mac.mm
@@ -437,7 +437,9 @@ namespace media { -DeviceMonitorMac::DeviceMonitorMac() { +DeviceMonitorMac::DeviceMonitorMac( + scoped_refptr<base::SingleThreadTaskRunner> device_task_runner) + : device_task_runner_(std::move(device_task_runner)) { // AVFoundation do not need to be fired up until the user // exercises a GetUserMedia. Bringing up either library and enumerating the // devices in the system is an operation taking in the range of hundred of ms, @@ -446,8 +448,7 @@ DeviceMonitorMac::~DeviceMonitorMac() {} -void DeviceMonitorMac::StartMonitoring( - const scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner) { +void DeviceMonitorMac::StartMonitoring() { DCHECK(thread_checker_.CalledOnValidThread()); // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458404 @@ -457,7 +458,7 @@ "458404 DeviceMonitorMac::StartMonitoring::AVFoundation")); DVLOG(1) << "Monitoring via AVFoundation"; device_monitor_impl_.reset( - new AVFoundationMonitorImpl(this, device_task_runner)); + new AVFoundationMonitorImpl(this, device_task_runner_)); } void DeviceMonitorMac::NotifyDeviceChanged(
diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn index cf99b89..0362601 100644 --- a/media/filters/BUILD.gn +++ b/media/filters/BUILD.gn
@@ -220,3 +220,112 @@ "//testing/perf", ] } + +source_set("unit_tests") { + testonly = true + sources = [ + "audio_clock_unittest.cc", + "audio_decoder_selector_unittest.cc", + "audio_renderer_algorithm_unittest.cc", + "audio_timestamp_validator_unittest.cc", + "chunk_demuxer_unittest.cc", + "decrypting_audio_decoder_unittest.cc", + "decrypting_demuxer_stream_unittest.cc", + "decrypting_video_decoder_unittest.cc", + "fake_video_decoder.cc", + "fake_video_decoder.h", + "fake_video_decoder_unittest.cc", + "file_data_source_unittest.cc", + "frame_processor_unittest.cc", + "ivf_parser_unittest.cc", + "jpeg_parser_unittest.cc", + "memory_data_source_unittest.cc", + "pipeline_controller_unittest.cc", + "source_buffer_state_unittest.cc", + "source_buffer_stream_unittest.cc", + "video_cadence_estimator_unittest.cc", + "video_decoder_selector_unittest.cc", + "video_frame_stream_unittest.cc", + "video_renderer_algorithm_unittest.cc", + "vp8_bool_decoder_unittest.cc", + "vp8_parser_unittest.cc", + "vp9_parser_unittest.cc", + "vp9_raw_bits_reader_unittest.cc", + ] + + deps = [ + "//base/test:test_support", + "//media:test_support", + "//testing/gmock", + "//testing/gtest", + "//ui/gfx:test_support", + ] + + configs += [ + # TODO(crbug.com/167187): Fix size_t to int truncations. + "//build/config/compiler:no_size_t_to_int_warning", + ] + + if (is_android) { + sources -= [ + "decrypting_audio_decoder_unittest.cc", + "decrypting_video_decoder_unittest.cc", + ] + + deps += [ "//ui/gl" ] + } + + if (media_use_ffmpeg) { + sources += [ + "audio_decoder_unittest.cc", + "audio_file_reader_unittest.cc", + "blocking_url_protocol_unittest.cc", + "ffmpeg_demuxer_unittest.cc", + "ffmpeg_glue_unittest.cc", + "in_memory_url_protocol_unittest.cc", + ] + + deps += [ + # Direct dependency needed for the config + "//third_party/opus", + ] + + # Even if FFmpeg is enabled on Android we don't want these. + # TODO(watk): Refactor tests that could be made to run on Android. + if (!is_android) { + sources += [ + "audio_video_metadata_extractor_unittest.cc", + "media_file_checker_unittest.cc", + ] + } + + if (!disable_ffmpeg_video_decoders) { + # FFmpeg on Android does not include video decoders. + sources += [ "ffmpeg_video_decoder_unittest.cc" ] + } + } + + if (media_use_libvpx) { + sources += [ "vpx_video_decoder_unittest.cc" ] + } + + if (current_cpu != "arm" && is_chromeos) { + sources += [ "h264_bitstream_buffer_unittest.cc" ] + } + + if (proprietary_codecs) { + sources += [ "h264_to_annex_b_bitstream_converter_unittest.cc" ] + + if (media_use_ffmpeg) { + sources += [ + "ffmpeg_aac_bitstream_converter_unittest.cc", + "ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc", + ] + } + } + + if (media_use_ffmpeg) { + # Direct dependency required to inherit config. + deps += [ "//third_party/ffmpeg" ] + } +}
diff --git a/media/filters/frame_processor.cc b/media/filters/frame_processor.cc index 9e329e1a..bfbf12e 100644 --- a/media/filters/frame_processor.cc +++ b/media/filters/frame_processor.cc
@@ -17,6 +17,7 @@ const int kMaxDroppedPrerollWarnings = 10; const int kMaxDtsBeyondPtsWarnings = 10; +const int kMaxAudioNonKeyframeWarnings = 10; const int kMaxNumKeyframeTimeGreaterThanDependantWarnings = 1; const int kMaxMuxedSequenceModeWarnings = 1; @@ -612,6 +613,21 @@ << ", DUR=" << frame_duration.InSecondsF() << ", RAP=" << frame->is_key_frame(); + // Buffering, splicing, append window trimming, etc., all depend on the + // assumption that all audio coded frames are key frames. Metadata in the + // bytestream may not indicate that, so we need to enforce that assumption + // here with a warning log. + if (frame->type() == DemuxerStream::AUDIO && !frame->is_key_frame()) { + LIMITED_MEDIA_LOG(DEBUG, media_log_, num_audio_non_keyframe_warnings_, + kMaxAudioNonKeyframeWarnings) + << "Bytestream with audio frame PTS " + << presentation_timestamp.InMicroseconds() << "us and DTS " + << decode_timestamp.InMicroseconds() + << "us indicated the frame is not a random access point (key frame). " + "All audio frames are expected to be key frames."; + frame->set_is_key_frame(true); + } + // Sanity check the timestamps. if (presentation_timestamp == kNoTimestamp) { MEDIA_LOG(ERROR, media_log_) << "Unknown PTS for " << frame->GetTypeName()
diff --git a/media/filters/frame_processor.h b/media/filters/frame_processor.h index a97fc7c..2bb253f1 100644 --- a/media/filters/frame_processor.h +++ b/media/filters/frame_processor.h
@@ -182,6 +182,7 @@ // Counters that limit spam to |media_log_| for frame processor warnings. int num_dropped_preroll_warnings_ = 0; int num_dts_beyond_pts_warnings_ = 0; + int num_audio_non_keyframe_warnings_ = 0; int num_muxed_sequence_mode_warnings_ = 0; DISALLOW_COPY_AND_ASSIGN(FrameProcessor);
diff --git a/media/filters/frame_processor_unittest.cc b/media/filters/frame_processor_unittest.cc index 0c0a0ef9..1b107d3c 100644 --- a/media/filters/frame_processor_unittest.cc +++ b/media/filters/frame_processor_unittest.cc
@@ -91,13 +91,13 @@ CreateAndConfigureStream(DemuxerStream::AUDIO); ASSERT_TRUE(audio_); EXPECT_TRUE(frame_processor_->AddTrack(audio_id_, audio_.get())); - seek(audio_.get(), base::TimeDelta()); + SeekStream(audio_.get(), base::TimeDelta()); } if (has_video) { CreateAndConfigureStream(DemuxerStream::VIDEO); ASSERT_TRUE(video_); EXPECT_TRUE(frame_processor_->AddTrack(video_id_, video_.get())); - seek(video_.get(), base::TimeDelta()); + SeekStream(video_.get(), base::TimeDelta()); } } @@ -262,7 +262,7 @@ return !frame_processor_->pending_notify_all_group_start_; } - void seek(ChunkDemuxerStream* stream, base::TimeDelta seek_time) { + void SeekStream(ChunkDemuxerStream* stream, base::TimeDelta seek_time) { stream->AbortReads(); stream->Seek(seek_time); stream->StartReturningData(); @@ -534,7 +534,7 @@ EXPECT_EQ(base::TimeDelta(), timestamp_offset_); // Re-seek to 0ms now that we've appended data earlier than what has already // satisfied our initial seek to start, above. - seek(audio_.get(), base::TimeDelta()); + SeekStream(audio_.get(), base::TimeDelta()); CheckReadsThenReadStalls(audio_.get(), "0 10 20 30"); } } @@ -603,7 +603,7 @@ CheckExpectedRangesByTimestamp(video_.get(), "{ [0,20) [50,60) }"); CheckReadsThenReadStalls(audio_.get(), "0 10 30 40 50"); CheckReadsThenReadStalls(video_.get(), "0 10"); - seek(video_.get(), frame_duration_ * 5); + SeekStream(video_.get(), frame_duration_ * 5); CheckReadsThenReadStalls(video_.get(), "50"); } } @@ -695,8 +695,8 @@ // Verify the buffers. // Re-seek now that we've appended data earlier than what already satisfied // our initial seek to start. - seek(audio_.get(), fifty_five_ms); - seek(video_.get(), fifty_five_ms); + SeekStream(audio_.get(), fifty_five_ms); + SeekStream(video_.get(), fifty_five_ms); if (using_sequence_mode) { CheckReadsThenReadStalls( audio_.get(), @@ -707,12 +707,12 @@ } else { CheckReadsThenReadStalls(audio_.get(), "55:0 65:10 75:20"); CheckReadsThenReadStalls(video_.get(), "65:10 75:20 85:30"); - seek(audio_.get(), frame_duration_ * 10); - seek(video_.get(), frame_duration_ * 10); + SeekStream(audio_.get(), frame_duration_ * 10); + SeekStream(video_.get(), frame_duration_ * 10); CheckReadsThenReadStalls(audio_.get(), "100:0 110:10 120:20"); CheckReadsThenReadStalls(video_.get(), "110:10 120:20 130:30"); - seek(audio_.get(), frame_duration_ * 20); - seek(video_.get(), frame_duration_ * 20); + SeekStream(audio_.get(), frame_duration_ * 20); + SeekStream(video_.get(), frame_duration_ * 20); CheckReadsThenReadStalls(audio_.get(), "200:0 210:10 220:20"); CheckReadsThenReadStalls(video_.get(), "210:10 220:20 230:30"); } @@ -814,13 +814,13 @@ // Verify the final buffers. First, re-seek audio since we appended data // earlier than what already satisfied our initial seek to start. We satisfy // the seek with the first buffer in [0,1000). - seek(audio_.get(), base::TimeDelta()); + SeekStream(audio_.get(), base::TimeDelta()); if (using_sequence_mode) { // The new video buffer is relocated into [150,160). EXPECT_EQ(frame_duration_ * -2, timestamp_offset_); CheckExpectedRangesByTimestamp(audio_.get(), "{ [30,40) [100,130) }"); CheckReadsThenReadStalls(audio_.get(), "30:50"); - seek(audio_.get(), 10 * frame_duration_); + SeekStream(audio_.get(), 10 * frame_duration_); CheckReadsThenReadStalls(audio_.get(), "100 110 120"); CheckExpectedRangesByTimestamp(video_.get(), "{ [100,160) }"); @@ -829,12 +829,12 @@ EXPECT_EQ(base::TimeDelta(), timestamp_offset_); CheckExpectedRangesByTimestamp(audio_.get(), "{ [50,60) [100,130) }"); CheckReadsThenReadStalls(audio_.get(), "50"); - seek(audio_.get(), 10 * frame_duration_); + SeekStream(audio_.get(), 10 * frame_duration_); CheckReadsThenReadStalls(audio_.get(), "100 110 120"); CheckExpectedRangesByTimestamp(video_.get(), "{ [100,140) [160,180) }"); CheckReadsThenReadStalls(video_.get(), "110 120 130"); - seek(video_.get(), 16 * frame_duration_); + SeekStream(video_.get(), 16 * frame_duration_); CheckReadsThenReadStalls(video_.get(), "160 170"); } } @@ -1028,7 +1028,7 @@ // Abort the reads from last stall. We don't want those reads to "complete" // when we append below. We will initiate new reads to confirm the buffer // looks as we expect. - seek(audio_.get(), base::TimeDelta()); + SeekStream(audio_.get(), base::TimeDelta()); // Append a frame with 10ms duration, with 9ms falling after the window start. base::TimeDelta expected_duration = @@ -1096,10 +1096,37 @@ // that would do that "pulling backward". See https://crbug.com/718641 and // https://github.com/w3c/media-source/issues/187. CheckExpectedRangesByTimestamp(video_.get(), "{ [50,80) }"); - seek(video_.get(), base::TimeDelta()); + SeekStream(video_.get(), base::TimeDelta()); CheckReadsThenReadStalls(video_.get(), "50 60 40"); } +TEST_P(FrameProcessorTest, AudioNonKeyframeChangedToKeyframe) { + // Verifies that an audio non-keyframe is changed to a keyframe with a media + // log warning. An exact overlap append of the preceding keyframe is also done + // to ensure that the (original non-keyframe) survives (because it was changed + // to a keyframe, so no longer depends on the original preceding keyframe). + // The sequence mode test version uses SetTimestampOffset to make it behave + // like segments mode to simplify the tests. + bool is_sequence_mode = GetParam(); + InSequence s; + AddTestTracks(HAS_AUDIO); + frame_processor_->SetSequenceMode(is_sequence_mode); + + EXPECT_MEDIA_LOG(AudioNonKeyframe(10000, 10000)); + EXPECT_CALL(callbacks_, PossibleDurationIncrease(frame_duration_ * 3)); + ProcessFrames("0K 10 20K", ""); + + if (is_sequence_mode) + SetTimestampOffset(base::TimeDelta()); + + EXPECT_CALL(callbacks_, PossibleDurationIncrease(frame_duration_)); + ProcessFrames("0K", ""); + + CheckExpectedRangesByTimestamp(audio_.get(), "{ [0,30) }"); + SeekStream(audio_.get(), base::TimeDelta()); + CheckReadsThenReadStalls(audio_.get(), "0 10 20"); +} + INSTANTIATE_TEST_CASE_P(SequenceMode, FrameProcessorTest, Values(true)); INSTANTIATE_TEST_CASE_P(SegmentsMode, FrameProcessorTest, Values(false));
diff --git a/media/gpu/android/mock_device_info.h b/media/gpu/android/mock_device_info.h index dc3aff8c..67bb8b4 100644 --- a/media/gpu/android/mock_device_info.h +++ b/media/gpu/android/mock_device_info.h
@@ -15,7 +15,7 @@ class MockDeviceInfo : public DeviceInfo { public: MockDeviceInfo(); - ~MockDeviceInfo(); + virtual ~MockDeviceInfo(); MOCK_METHOD0(SdkVersion, int()); MOCK_METHOD0(IsVp8DecoderAvailable, bool());
diff --git a/media/gpu/android_video_decode_accelerator.cc b/media/gpu/android_video_decode_accelerator.cc index f512119..e48cbcda 100644 --- a/media/gpu/android_video_decode_accelerator.cc +++ b/media/gpu/android_video_decode_accelerator.cc
@@ -523,6 +523,7 @@ state_ = NO_ERROR; } incoming_bundle_ = nullptr; + CacheFrameInformation(); return; } @@ -533,6 +534,7 @@ // right thing to do even if we can switch. codec_config_->surface_bundle = incoming_bundle_; incoming_bundle_ = nullptr; + CacheFrameInformation(); // If the client doesn't support deferred initialization (WebRTC), then we // should complete it now and return a meaningful result. Note that it would @@ -908,7 +910,15 @@ // Only ask for promotion hints if we can actually switch surfaces. const bool want_promotion_hint = device_info_->IsSetOutputSurfaceSupported(); const bool allow_overlay = picture_buffer_manager_.ArePicturesOverlayable(); + + // TODO(liberato): remove in M63, if FrameInformation is clearly working. UMA_HISTOGRAM_BOOLEAN("Media.AVDA.FrameSentAsOverlay", allow_overlay); + + // Record the frame type that we're sending and some information about why. + UMA_HISTOGRAM_ENUMERATION("Media.AVDA.FrameInformation", + cached_frame_information_, + FRAME_INFORMATION_MAX + 1); + // We unconditionally mark the picture as overlayable, even if // |!allow_overlay|, if we want to get hints. It's required, else we won't // get hints. @@ -1789,4 +1799,27 @@ codec_config_->surface_bundle = nullptr; } +void AndroidVideoDecodeAccelerator::CacheFrameInformation() { + if (!codec_config_->surface_bundle || + !codec_config_->surface_bundle->overlay) { + // Not an overlay. + cached_frame_information_ = surface_chooser_state_.is_secure + ? SURFACETEXTURE_L3 + : SURFACETEXTURE_INSECURE; + return; + } + + // Overlay. + if (surface_chooser_state_.is_secure) { + cached_frame_information_ = + surface_chooser_state_.is_required ? OVERLAY_L1 : OVERLAY_L3; + return; + } + + cached_frame_information_ = + surface_chooser_state_.is_fullscreen + ? OVERLAY_INSECURE_PLAYER_ELEMENT_FULLSCREEN + : OVERLAY_INSECURE_NON_PLAYER_ELEMENT_FULLSCREEN; +} + } // namespace media
diff --git a/media/gpu/android_video_decode_accelerator.h b/media/gpu/android_video_decode_accelerator.h index f9b39be4..f016fdfc 100644 --- a/media/gpu/android_video_decode_accelerator.h +++ b/media/gpu/android_video_decode_accelerator.h
@@ -409,6 +409,27 @@ // Are overlays required by command-line options? bool is_overlay_required_ = false; + // Must match AVDAFrameInformation UMA enum. Please do not remove or re-order + // values, only append new ones. + enum FrameInformation { + SURFACETEXTURE_INSECURE = 0, + SURFACETEXTURE_L3 = 1, + OVERLAY_L3 = 2, + OVERLAY_L1 = 3, + OVERLAY_INSECURE_PLAYER_ELEMENT_FULLSCREEN = 4, + OVERLAY_INSECURE_NON_PLAYER_ELEMENT_FULLSCREEN = 5, + + // Max enum value. + FRAME_INFORMATION_MAX = OVERLAY_INSECURE_NON_PLAYER_ELEMENT_FULLSCREEN + }; + + // Update |cached_frame_information_|. + void CacheFrameInformation(); + + // Most recently cached frame information, so that we can dispatch it without + // recomputing it on every frame. It changes very rarely. + FrameInformation cached_frame_information_ = SURFACETEXTURE_INSECURE; + // WeakPtrFactory for posting tasks back to |this|. base::WeakPtrFactory<AndroidVideoDecodeAccelerator> weak_this_factory_;
diff --git a/media/gpu/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2_slice_video_decode_accelerator.cc index 8d0af0c4..2467631 100644 --- a/media/gpu/v4l2_slice_video_decode_accelerator.cc +++ b/media/gpu/v4l2_slice_video_decode_accelerator.cc
@@ -33,21 +33,20 @@ #include "ui/gl/gl_image.h" #include "ui/gl/scoped_binders.h" -#define LOGF(level) LOG(level) << __func__ << "(): " -#define DLOGF(level) DLOG(level) << __func__ << "(): " #define DVLOGF(level) DVLOG(level) << __func__ << "(): " -#define PLOGF(level) PLOG(level) << __func__ << "(): " +#define VLOGF(level) VLOG(level) << __func__ << "(): " +#define VPLOGF(level) VPLOG(level) << __func__ << "(): " -#define NOTIFY_ERROR(x) \ - do { \ - LOGF(ERROR) << "Setting error state:" << x; \ - SetErrorState(x); \ +#define NOTIFY_ERROR(x) \ + do { \ + VLOGF(1) << "Setting error state: " << x; \ + SetErrorState(x); \ } while (0) #define IOCTL_OR_ERROR_RETURN_VALUE(type, arg, value, type_str) \ do { \ if (device_->Ioctl(type, arg) != 0) { \ - PLOGF(ERROR) << "ioctl() failed: " << type_str; \ + VPLOGF(1) << "ioctl() failed: " << type_str; \ return value; \ } \ } while (0) @@ -58,10 +57,10 @@ #define IOCTL_OR_ERROR_RETURN_FALSE(type, arg) \ IOCTL_OR_ERROR_RETURN_VALUE(type, arg, false, #type) -#define IOCTL_OR_LOG_ERROR(type, arg) \ - do { \ - if (device_->Ioctl(type, arg) != 0) \ - PLOGF(ERROR) << "ioctl() failed: " << #type; \ +#define IOCTL_OR_LOG_ERROR(type, arg) \ + do { \ + if (device_->Ioctl(type, arg) != 0) \ + VPLOGF(1) << "ioctl() failed: " << #type; \ } while (0) namespace media { @@ -523,7 +522,7 @@ bool V4L2SliceVideoDecodeAccelerator::Initialize(const Config& config, Client* client) { - DVLOGF(3) << "profile: " << config.profile; + VLOGF(2) << "profile: " << config.profile; DCHECK(child_task_runner_->BelongsToCurrentThread()); DCHECK_EQ(state_, kUninitialized); @@ -551,23 +550,23 @@ } if (egl_display_ == EGL_NO_DISPLAY) { - LOGF(ERROR) << "could not get EGLDisplay"; + VLOGF(1) << "could not get EGLDisplay"; return false; } // We need the context to be initialized to query extensions. if (!make_context_current_cb_.is_null()) { if (!make_context_current_cb_.Run()) { - LOGF(ERROR) << "could not make context current"; + VLOGF(1) << "could not make context current"; return false; } if (!gl::g_driver_egl.ext.b_EGL_KHR_fence_sync) { - LOGF(ERROR) << "context does not have EGL_KHR_fence_sync"; + VLOGF(1) << "context does not have EGL_KHR_fence_sync"; return false; } } else { - DVLOGF(1) << "No GL callbacks provided, initializing without GL support"; + DVLOGF(2) << "No GL callbacks provided, initializing without GL support"; } video_profile_ = config.profile; @@ -580,8 +579,8 @@ V4L2Device::VideoCodecProfileToV4L2PixFmt(video_profile_, true); if (!device_->Open(V4L2Device::Type::kDecoder, input_format_fourcc_)) { - DVLOGF(1) << "Failed to open device for profile: " << config.profile - << " fourcc: " << std::hex << "0x" << input_format_fourcc_; + VLOGF(1) << "Failed to open device for profile: " << config.profile + << " fourcc: " << std::hex << "0x" << input_format_fourcc_; return false; } @@ -606,8 +605,8 @@ const __u32 kCapsRequired = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_STREAMING; IOCTL_OR_ERROR_RETURN_FALSE(VIDIOC_QUERYCAP, &caps); if ((caps.capabilities & kCapsRequired) != kCapsRequired) { - LOGF(ERROR) << "ioctl() failed: VIDIOC_QUERYCAP" - << ", caps check failed: 0x" << std::hex << caps.capabilities; + VLOGF(1) << "ioctl() failed: VIDIOC_QUERYCAP" + << ", caps check failed: 0x" << std::hex << caps.capabilities; return false; } @@ -615,7 +614,7 @@ return false; if (!decoder_thread_.Start()) { - DLOGF(ERROR) << "device thread failed to start"; + VLOGF(1) << "device thread failed to start"; return false; } decoder_thread_task_runner_ = decoder_thread_.task_runner(); @@ -628,12 +627,12 @@ FROM_HERE, base::Bind(&V4L2SliceVideoDecodeAccelerator::InitializeTask, base::Unretained(this))); - DVLOGF(1) << "V4L2SliceVideoDecodeAccelerator initialized"; + VLOGF(2) << "V4L2SliceVideoDecodeAccelerator initialized"; return true; } void V4L2SliceVideoDecodeAccelerator::InitializeTask() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK_EQ(state_, kInitialized); @@ -646,7 +645,7 @@ } void V4L2SliceVideoDecodeAccelerator::Destroy() { - DVLOGF(3); + VLOGF(2); DCHECK(child_task_runner_->BelongsToCurrentThread()); if (decoder_thread_.IsRunning()) { @@ -659,11 +658,11 @@ } delete this; - DVLOGF(3) << "Destroyed"; + VLOGF(2) << "Destroyed"; } void V4L2SliceVideoDecodeAccelerator::DestroyTask() { - DVLOGF(3); + DVLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); state_ = kError; @@ -738,7 +737,7 @@ } if (output_format_fourcc_ == 0) { - LOGF(ERROR) << "Could not find a usable output format"; + VLOGF(1) << "Could not find a usable output format"; return false; } @@ -754,7 +753,7 @@ } bool V4L2SliceVideoDecodeAccelerator::CreateInputBuffers() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK(!input_streamon_); DCHECK(input_buffer_map_.empty()); @@ -766,7 +765,7 @@ reqbufs.memory = V4L2_MEMORY_MMAP; IOCTL_OR_ERROR_RETURN_FALSE(VIDIOC_REQBUFS, &reqbufs); if (reqbufs.count < kNumInputBuffers) { - PLOGF(ERROR) << "Could not allocate enough output buffers"; + VLOGF(1) << "Could not allocate enough output buffers"; return false; } input_buffer_map_.resize(reqbufs.count); @@ -790,7 +789,7 @@ MAP_SHARED, buffer.m.planes[0].m.mem_offset); if (address == MAP_FAILED) { - PLOGF(ERROR) << "mmap() failed"; + VPLOGF(1) << "mmap() failed"; return false; } input_buffer_map_[i].address = address; @@ -801,7 +800,7 @@ } bool V4L2SliceVideoDecodeAccelerator::CreateOutputBuffers() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK(!output_streamon_); DCHECK(output_buffer_map_.empty()); @@ -823,7 +822,7 @@ format.fmt.pix_mp.num_planes = input_planes_count_; if (device_->Ioctl(VIDIOC_S_FMT, &format) != 0) { - PLOGF(ERROR) << "Failed setting format to: " << output_format_fourcc_; + VPLOGF(1) << "Failed setting format to: " << output_format_fourcc_; NOTIFY_ERROR(PLATFORM_FAILURE); return false; } @@ -834,8 +833,7 @@ DCHECK_EQ(coded_size_.height() % 16, 0); if (!gfx::Rect(coded_size_).Contains(gfx::Rect(pic_size))) { - LOGF(ERROR) << "Got invalid adjusted coded size: " - << coded_size_.ToString(); + VLOGF(1) << "Got invalid adjusted coded size: " << coded_size_.ToString(); return false; } @@ -843,12 +841,8 @@ << ", pic size=" << pic_size.ToString() << ", coded size=" << coded_size_.ToString(); - // With ALLOCATE mode the client can sample it as RGB and doesn't need to - // know the precise format. VideoPixelFormat pixel_format = - (output_mode_ == Config::OutputMode::IMPORT) - ? V4L2Device::V4L2PixFmtToVideoPixelFormat(output_format_fourcc_) - : PIXEL_FORMAT_UNKNOWN; + V4L2Device::V4L2PixFmtToVideoPixelFormat(output_format_fourcc_); child_task_runner_->PostTask( FROM_HERE, @@ -869,7 +863,7 @@ } void V4L2SliceVideoDecodeAccelerator::DestroyInputBuffers() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread() || !decoder_thread_.IsRunning()); DCHECK(!input_streamon_); @@ -900,7 +894,7 @@ DCHECK(child_task_runner_->BelongsToCurrentThread()); for (auto picture_buffer_id : picture_buffer_ids) { - DVLOGF(1) << "dismissing PictureBuffer id=" << picture_buffer_id; + DVLOGF(4) << "dismissing PictureBuffer id=" << picture_buffer_id; client_->DismissPictureBuffer(picture_buffer_id); } @@ -908,7 +902,7 @@ } void V4L2SliceVideoDecodeAccelerator::DevicePollTask(bool poll_device) { - DVLOGF(4); + DVLOGF(3); DCHECK(device_poll_thread_.task_runner()->BelongsToCurrentThread()); bool event_pending; @@ -938,7 +932,7 @@ DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); if (!device_poll_thread_.IsRunning()) { - DVLOGF(2) << "Device poll thread stopped, will not schedule poll"; + DVLOGF(4) << "Device poll thread stopped, will not schedule poll"; return; } @@ -955,7 +949,7 @@ FROM_HERE, base::Bind(&V4L2SliceVideoDecodeAccelerator::DevicePollTask, base::Unretained(this), true)); - DVLOGF(2) << "buffer counts: " + DVLOGF(3) << "buffer counts: " << "INPUT[" << decoder_input_queue_.size() << "]" << " => DEVICE[" << free_input_buffers_.size() << "+" @@ -977,13 +971,13 @@ if (!EnqueueInputRecord(dec_surface->input_record(), dec_surface->config_store())) { - DVLOGF(1) << "Failed queueing an input buffer"; + VLOGF(1) << "Failed queueing an input buffer"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } if (!EnqueueOutputRecord(dec_surface->output_record())) { - DVLOGF(1) << "Failed queueing an output buffer"; + VLOGF(1) << "Failed queueing an output buffer"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -999,7 +993,7 @@ } void V4L2SliceVideoDecodeAccelerator::Dequeue() { - DVLOGF(3); + DVLOGF(4); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); struct v4l2_buffer dqbuf; @@ -1017,7 +1011,7 @@ // EAGAIN if we're just out of buffers to dequeue. break; } - PLOGF(ERROR) << "ioctl() failed: VIDIOC_DQBUF"; + VPLOGF(1) << "ioctl() failed: VIDIOC_DQBUF"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -1045,7 +1039,7 @@ // EAGAIN if we're just out of buffers to dequeue. break; } - PLOGF(ERROR) << "ioctl() failed: VIDIOC_DQBUF"; + VPLOGF(1) << "ioctl() failed: VIDIOC_DQBUF"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -1053,13 +1047,13 @@ DCHECK(output_record.at_device); output_record.at_device = false; output_buffer_queued_count_--; - DVLOGF(3) << "Dequeued output=" << dqbuf.index - << " count " << output_buffer_queued_count_; + DVLOGF(4) << "Dequeued output=" << dqbuf.index << " count " + << output_buffer_queued_count_; V4L2DecodeSurfaceByOutputId::iterator it = surfaces_at_device_.find(dqbuf.index); if (it == surfaces_at_device_.end()) { - DLOGF(ERROR) << "Got invalid surface from device."; + VLOGF(1) << "Got invalid surface from device."; NOTIFY_ERROR(PLATFORM_FAILURE); } @@ -1154,7 +1148,7 @@ bool V4L2SliceVideoDecodeAccelerator::EnqueueInputRecord( int index, uint32_t config_store) { - DVLOGF(3); + DVLOGF(4); DCHECK_LT(index, static_cast<int>(input_buffer_map_.size())); DCHECK_GT(config_store, 0u); @@ -1182,7 +1176,7 @@ } bool V4L2SliceVideoDecodeAccelerator::EnqueueOutputRecord(int index) { - DVLOGF(3); + DVLOGF(4); DCHECK_LT(index, static_cast<int>(output_buffer_map_.size())); // Enqueue an output (VIDEO_CAPTURE) buffer. @@ -1201,7 +1195,7 @@ DVLOGF(1) << "eglClientWaitSyncKHR failed!"; } if (eglDestroySyncKHR(egl_display_, output_record.egl_sync) != EGL_TRUE) { - LOGF(ERROR) << "eglDestroySyncKHR failed!"; + VLOGF(1) << "eglDestroySyncKHR failed!"; NOTIFY_ERROR(PLATFORM_FAILURE); return false; } @@ -1242,7 +1236,7 @@ // Start up the device poll thread and schedule its first DevicePollTask(). if (!device_poll_thread_.Start()) { - DLOGF(ERROR) << "Device thread failed to start"; + VLOGF(1) << "Device thread failed to start"; NOTIFY_ERROR(PLATFORM_FAILURE); return false; } @@ -1272,7 +1266,7 @@ // Signal the DevicePollTask() to stop, and stop the device poll thread. if (!device_->SetDevicePollInterrupt()) { - PLOGF(ERROR) << "SetDevicePollInterrupt(): failed"; + VPLOGF(1) << "SetDevicePollInterrupt(): failed"; NOTIFY_ERROR(PLATFORM_FAILURE); return false; } @@ -1334,12 +1328,12 @@ void V4L2SliceVideoDecodeAccelerator::Decode( const BitstreamBuffer& bitstream_buffer) { - DVLOGF(3) << "input_id=" << bitstream_buffer.id() + DVLOGF(4) << "input_id=" << bitstream_buffer.id() << ", size=" << bitstream_buffer.size(); DCHECK(decode_task_runner_->BelongsToCurrentThread()); if (bitstream_buffer.id() < 0) { - LOGF(ERROR) << "Invalid bitstream_buffer, id: " << bitstream_buffer.id(); + VLOGF(1) << "Invalid bitstream_buffer, id: " << bitstream_buffer.id(); if (base::SharedMemory::IsHandleValid(bitstream_buffer.handle())) base::SharedMemory::CloseHandle(bitstream_buffer.handle()); NOTIFY_ERROR(INVALID_ARGUMENT); @@ -1353,7 +1347,7 @@ void V4L2SliceVideoDecodeAccelerator::DecodeTask( const BitstreamBuffer& bitstream_buffer) { - DVLOGF(3) << "input_id=" << bitstream_buffer.id() + DVLOGF(4) << "input_id=" << bitstream_buffer.id() << " size=" << bitstream_buffer.size(); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); @@ -1366,11 +1360,11 @@ return; if (!bitstream_record->shm->Map()) { - LOGF(ERROR) << "Could not map bitstream_buffer"; + VLOGF(1) << "Could not map bitstream_buffer"; NOTIFY_ERROR(UNREADABLE_INPUT); return; } - DVLOGF(3) << "mapped at=" << bitstream_record->shm->memory(); + DVLOGF(4) << "mapped at=" << bitstream_record->shm->memory(); decoder_input_queue_.push( linked_ptr<BitstreamBufferRef>(bitstream_record.release())); @@ -1414,7 +1408,7 @@ } void V4L2SliceVideoDecodeAccelerator::DecodeBufferTask() { - DVLOGF(3); + DVLOGF(4); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); if (state_ != kDecoding) { @@ -1427,7 +1421,7 @@ res = decoder_->Decode(); switch (res) { case AcceleratedVideoDecoder::kAllocateNewSurfaces: - DVLOGF(2) << "Decoder requesting a new set of surfaces"; + VLOGF(2) << "Decoder requesting a new set of surfaces"; InitiateSurfaceSetChange(); return; @@ -1448,7 +1442,7 @@ return; case AcceleratedVideoDecoder::kDecodeError: - DVLOGF(1) << "Error decoding stream"; + VLOGF(1) << "Error decoding stream"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -1456,7 +1450,7 @@ } void V4L2SliceVideoDecodeAccelerator::InitiateSurfaceSetChange() { - DVLOGF(2); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK_EQ(state_, kDecoding); @@ -1466,7 +1460,7 @@ } bool V4L2SliceVideoDecodeAccelerator::FinishSurfaceSetChange() { - DVLOGF(2); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); if (!surface_set_change_pending_) @@ -1504,12 +1498,12 @@ } surface_set_change_pending_ = false; - DVLOGF(3) << "Surface set change finished"; + VLOGF(2) << "Surface set change finished"; return true; } bool V4L2SliceVideoDecodeAccelerator::DestroyOutputs(bool dismiss) { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); std::vector<int32_t> picture_buffers_to_dismiss; @@ -1521,7 +1515,7 @@ if (output_record.egl_sync != EGL_NO_SYNC_KHR) { if (eglDestroySyncKHR(egl_display_, output_record.egl_sync) != EGL_TRUE) - DVLOGF(1) << "eglDestroySyncKHR failed."; + VLOGF(1) << "eglDestroySyncKHR failed."; } if (output_record.gl_image) { @@ -1535,7 +1529,7 @@ } if (dismiss) { - DVLOGF(2) << "Scheduling picture dismissal"; + VLOGF(2) << "Scheduling picture dismissal"; base::WaitableEvent done(base::WaitableEvent::ResetPolicy::AUTOMATIC, base::WaitableEvent::InitialState::NOT_SIGNALED); child_task_runner_->PostTask( @@ -1550,7 +1544,7 @@ } bool V4L2SliceVideoDecodeAccelerator::DestroyOutputBuffers() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread() || !decoder_thread_.IsRunning()); DCHECK(!output_streamon_); @@ -1592,7 +1586,7 @@ void V4L2SliceVideoDecodeAccelerator::AssignPictureBuffers( const std::vector<PictureBuffer>& buffers) { - DVLOGF(3); + VLOGF(2); DCHECK(child_task_runner_->BelongsToCurrentThread()); decoder_thread_task_runner_->PostTask( @@ -1603,16 +1597,16 @@ void V4L2SliceVideoDecodeAccelerator::AssignPictureBuffersTask( const std::vector<PictureBuffer>& buffers) { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK_EQ(state_, kAwaitingPictureBuffers); const uint32_t req_buffer_count = decoder_->GetRequiredNumOfPictures(); if (buffers.size() < req_buffer_count) { - DLOG(ERROR) << "Failed to provide requested picture buffers. " - << "(Got " << buffers.size() - << ", requested " << req_buffer_count << ")"; + VLOGF(1) << "Failed to provide requested picture buffers. " + << "(Got " << buffers.size() << ", requested " << req_buffer_count + << ")"; NOTIFY_ERROR(INVALID_ARGUMENT); return; } @@ -1628,7 +1622,7 @@ IOCTL_OR_ERROR_RETURN(VIDIOC_REQBUFS, &reqbufs); if (reqbufs.count != buffers.size()) { - DLOGF(ERROR) << "Could not allocate enough output buffers"; + VLOGF(1) << "Could not allocate enough output buffers"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -1701,21 +1695,21 @@ DCHECK_NE(texture_id, 0u); if (make_context_current_cb_.is_null()) { - DLOGF(ERROR) << "GL callbacks required for binding to GLImages"; + VLOGF(1) << "GL callbacks required for binding to GLImages"; NOTIFY_ERROR(INVALID_ARGUMENT); return; } if (!make_context_current_cb_.Run()) { - DLOGF(ERROR) << "No GL context"; - NOTIFY_ERROR(PLATFORM_FAILURE); + VLOGF(1) << "No GL context"; + NOTIFY_ERROR(INVALID_ARGUMENT); return; } scoped_refptr<gl::GLImage> gl_image = device_->CreateGLImage(size, fourcc, *passed_dmabuf_fds); if (!gl_image) { - LOGF(ERROR) << "Could not create GLImage," - << " index=" << buffer_index << " texture_id=" << texture_id; + VLOGF(1) << "Could not create GLImage," + << " index=" << buffer_index << " texture_id=" << texture_id; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -1748,7 +1742,7 @@ // just discard this image, we will get the one we are waiting for later. if (buffer_index >= output_buffer_map_.size() || output_buffer_map_[buffer_index].picture_id != picture_buffer_id) { - DVLOGF(3) << "Picture set already changed, dropping EGLImage"; + DVLOGF(4) << "Picture set already changed, dropping EGLImage"; return; } @@ -1786,7 +1780,7 @@ #endif if (output_mode_ != Config::OutputMode::IMPORT) { - LOGF(ERROR) << "Cannot import in non-import mode"; + VLOGF(1) << "Cannot import in non-import mode"; NOTIFY_ERROR(INVALID_ARGUMENT); return; } @@ -1820,7 +1814,7 @@ } if (!iter->at_client) { - LOGF(ERROR) << "Cannot import buffer that not owned by client"; + VLOGF(1) << "Cannot import buffer that not owned by client"; NOTIFY_ERROR(INVALID_ARGUMENT); return; } @@ -1858,7 +1852,7 @@ if (!make_context_current_cb_.is_null()) { if (!make_context_current_cb_.Run()) { - LOGF(ERROR) << "could not make context current"; + VLOGF(1) << "could not make context current"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -1866,7 +1860,7 @@ EGLSyncKHR egl_sync = eglCreateSyncKHR(egl_display_, EGL_SYNC_FENCE_KHR, NULL); if (egl_sync == EGL_NO_SYNC_KHR) { - LOGF(ERROR) << "eglCreateSyncKHR() failed"; + VLOGF(1) << "eglCreateSyncKHR() failed"; NOTIFY_ERROR(PLATFORM_FAILURE); return; } @@ -1884,7 +1878,7 @@ void V4L2SliceVideoDecodeAccelerator::ReusePictureBufferTask( int32_t picture_buffer_id, std::unique_ptr<EGLSyncKHRRef> egl_sync_ref) { - DVLOGF(3) << "picture_buffer_id=" << picture_buffer_id; + DVLOGF(4) << "picture_buffer_id=" << picture_buffer_id; DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); V4L2DecodeSurfaceByPictureBufferId::iterator it = @@ -1902,7 +1896,7 @@ OutputRecord& output_record = output_buffer_map_[it->second->output_record()]; if (output_record.at_device || !output_record.at_client) { - DVLOGF(1) << "picture_buffer_id not reusable"; + VLOGF(1) << "picture_buffer_id not reusable"; NOTIFY_ERROR(INVALID_ARGUMENT); return; } @@ -1920,7 +1914,7 @@ } void V4L2SliceVideoDecodeAccelerator::Flush() { - DVLOGF(3); + VLOGF(2); DCHECK(child_task_runner_->BelongsToCurrentThread()); decoder_thread_task_runner_->PostTask( @@ -1929,7 +1923,7 @@ } void V4L2SliceVideoDecodeAccelerator::FlushTask() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); // Queue an empty buffer which - when reached - will trigger flush sequence. @@ -1941,7 +1935,7 @@ } void V4L2SliceVideoDecodeAccelerator::InitiateFlush() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); // This will trigger output for all remaining surfaces in the decoder. @@ -1962,7 +1956,7 @@ } bool V4L2SliceVideoDecodeAccelerator::FinishFlush() { - DVLOGF(3); + VLOGF(4); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); if (!decoder_flushing_) @@ -1988,7 +1982,7 @@ SendPictureReady(); decoder_flushing_ = false; - DVLOGF(3) << "Flush finished"; + VLOGF(2) << "Flush finished"; child_task_runner_->PostTask(FROM_HERE, base::Bind(&Client::NotifyFlushDone, client_)); @@ -1997,7 +1991,7 @@ } void V4L2SliceVideoDecodeAccelerator::Reset() { - DVLOGF(3); + VLOGF(2); DCHECK(child_task_runner_->BelongsToCurrentThread()); decoder_thread_task_runner_->PostTask( @@ -2006,7 +2000,7 @@ } void V4L2SliceVideoDecodeAccelerator::ResetTask() { - DVLOGF(3); + VLOGF(2); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); if (decoder_resetting_) { @@ -2029,7 +2023,7 @@ } bool V4L2SliceVideoDecodeAccelerator::FinishReset() { - DVLOGF(3); + VLOGF(4); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); if (!decoder_resetting_) @@ -2060,7 +2054,7 @@ } decoder_resetting_ = false; - DVLOGF(3) << "Reset finished"; + VLOGF(2) << "Reset finished"; child_task_runner_->PostTask(FROM_HERE, base::Bind(&Client::NotifyResetDone, client_)); @@ -2124,7 +2118,7 @@ size_t i = 0; for (const auto& pic : dpb) { if (i >= arraysize(v4l2_decode_param_.dpb)) { - DVLOGF(1) << "Invalid DPB size"; + VLOGF(1) << "Invalid DPB size"; break; } @@ -2334,7 +2328,7 @@ const uint8_t* data, size_t size) { if (num_slices_ == kMaxSlices) { - LOGF(ERROR) << "Over limit of supported slices per frame"; + VLOGF(1) << "Over limit of supported slices per frame"; return false; } @@ -2454,7 +2448,7 @@ InputRecord& input_record = input_buffer_map_[index]; if (input_record.bytes_used + size > input_record.length) { - DVLOGF(1) << "Input buffer too small"; + VLOGF(1) << "Input buffer too small"; return false; } @@ -3147,13 +3141,13 @@ const scoped_refptr<V4L2DecodeSurface>& dec_surface) { DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); - DVLOGF(3) << "Submitting decode for surface: " << dec_surface->ToString(); + DVLOGF(4) << "Submitting decode for surface: " << dec_surface->ToString(); Enqueue(dec_surface); } void V4L2SliceVideoDecodeAccelerator::SurfaceReady( const scoped_refptr<V4L2DecodeSurface>& dec_surface) { - DVLOGF(3); + DVLOGF(4); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); decoder_display_queue_.push(dec_surface); @@ -3193,8 +3187,9 @@ // TODO(hubbe): Insert correct color space. http://crbug.com/647725 Picture picture(output_record.picture_id, dec_surface->bitstream_id(), - dec_surface->visible_rect(), gfx::ColorSpace(), false); - DVLOGF(3) << dec_surface->ToString() + dec_surface->visible_rect(), gfx::ColorSpace(), + true /* allow_overlay */); + DVLOGF(4) << dec_surface->ToString() << ", bitstream_id: " << picture.bitstream_buffer_id() << ", picture_id: " << picture.picture_buffer_id() << ", visible_rect: " << picture.visible_rect().ToString(); @@ -3232,7 +3227,7 @@ } void V4L2SliceVideoDecodeAccelerator::SendPictureReady() { - DVLOGF(3); + DVLOGF(4); DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); bool resetting_or_flushing = (decoder_resetting_ || decoder_flushing_); while (!pending_picture_ready_.empty()) { @@ -3249,7 +3244,7 @@ base::Bind(&Client::PictureReady, decode_client_, picture)); pending_picture_ready_.pop(); } else if (!cleared || resetting_or_flushing) { - DVLOGF(3) << "cleared=" << pending_picture_ready_.front().cleared + DVLOGF(4) << "cleared=" << pending_picture_ready_.front().cleared << ", decoder_resetting_=" << decoder_resetting_ << ", decoder_flushing_=" << decoder_flushing_ << ", picture_clearing_count_=" << picture_clearing_count_; @@ -3277,7 +3272,7 @@ } void V4L2SliceVideoDecodeAccelerator::PictureCleared() { - DVLOGF(3) << "clearing count=" << picture_clearing_count_; + DVLOGF(4) << "clearing count=" << picture_clearing_count_; DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK_GT(picture_clearing_count_, 0); picture_clearing_count_--;
diff --git a/media/gpu/vaapi_video_decode_accelerator.cc b/media/gpu/vaapi_video_decode_accelerator.cc index f304b64..a22ccae 100644 --- a/media/gpu/vaapi_video_decode_accelerator.cc +++ b/media/gpu/vaapi_video_decode_accelerator.cc
@@ -31,6 +31,9 @@ #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_image.h" +#define DVLOGF(level) DVLOG(level) << __func__ << "(): " +#define VLOGF(level) VLOG(level) << __func__ << "(): " + namespace media { namespace { @@ -54,7 +57,7 @@ #define RETURN_AND_NOTIFY_ON_FAILURE(result, log, error_code, ret) \ do { \ if (!(result)) { \ - LOG(ERROR) << log; \ + VLOGF(1) << log; \ NotifyError(error_code); \ return ret; \ } \ @@ -291,7 +294,7 @@ task_runner_->PostTask( FROM_HERE, base::Bind(&VaapiVideoDecodeAccelerator::Cleanup, weak_this_)); - LOG(ERROR) << "Notifying of error " << error; + VLOGF(1) << "Notifying of error " << error; if (client_) { client_->NotifyError(error); client_ptr_factory_.reset(); @@ -302,7 +305,7 @@ int32_t picture_buffer_id) { Pictures::iterator it = pictures_.find(picture_buffer_id); if (it == pictures_.end()) { - LOG(WARNING) << "Picture id " << picture_buffer_id << " does not exist"; + VLOGF(4) << "Picture id " << picture_buffer_id << " does not exist"; return NULL; } @@ -365,17 +368,17 @@ base::AutoLock auto_lock(lock_); DCHECK_EQ(state_, kUninitialized); - DVLOG(2) << "Initializing VAVDA, profile: " << GetProfileName(profile); + VLOGF(2) << "Initializing VAVDA, profile: " << GetProfileName(profile); #if defined(USE_X11) if (gl::GetGLImplementation() != gl::kGLImplementationDesktopGL) { - DVLOG(1) << "HW video decode acceleration not available without " + VLOGF(1) << "HW video decode acceleration not available without " "DesktopGL (GLX)."; return false; } #elif defined(USE_OZONE) if (gl::GetGLImplementation() != gl::kGLImplementationEGLGLES2) { - DVLOG(1) << "HW video decode acceleration not available without " + VLOGF(1) << "HW video decode acceleration not available without " << "EGLGLES2."; return false; } @@ -385,7 +388,7 @@ VaapiWrapper::kDecode, profile, base::Bind(&ReportToUMA, VAAPI_ERROR)); if (!vaapi_wrapper_.get()) { - DVLOG(1) << "Failed initializing VAAPI for profile " + VLOGF(1) << "Failed initializing VAAPI for profile " << GetProfileName(profile); return false; } @@ -401,7 +404,7 @@ vp9_accelerator_.reset(new VaapiVP9Accelerator(this, vaapi_wrapper_.get())); decoder_.reset(new VP9Decoder(vp9_accelerator_.get())); } else { - DLOG(ERROR) << "Unsupported profile " << GetProfileName(profile); + VLOGF(1) << "Unsupported profile " << GetProfileName(profile); return false; } @@ -425,7 +428,7 @@ TRACE_EVENT2("Video Decoder", "VAVDA::OutputSurface", "input_id", input_id, "output_id", output_id); - DVLOG(3) << "Outputting VASurface " << va_surface->id() + VLOGF(4) << "Outputting VASurface " << va_surface->id() << " into pixmap bound to picture buffer id " << output_id; RETURN_AND_NOTIFY_ON_FAILURE(picture->DownloadFromSurface(va_surface), @@ -435,7 +438,7 @@ // Notify the client a picture is ready to be displayed. ++num_frames_at_client_; TRACE_COUNTER1("Video Decoder", "Textures at client", num_frames_at_client_); - DVLOG(4) << "Notifying output picture id " << output_id << " for input " + VLOGF(4) << "Notifying output picture id " << output_id << " for input " << input_id << " is ready. visible rect: " << visible_rect.ToString(); // TODO(hubbe): Use the correct color space. http://crbug.com/647725 @@ -473,7 +476,7 @@ TRACE_EVENT1("Video Decoder", "QueueInputBuffer", "input_id", bitstream_buffer.id()); - DVLOG(4) << "Queueing new input buffer id: " << bitstream_buffer.id() + VLOGF(4) << "Queueing new input buffer id: " << bitstream_buffer.id() << " size: " << (int)bitstream_buffer.size(); base::AutoLock auto_lock(lock_); @@ -518,8 +521,8 @@ break; default: - LOG(ERROR) << "Decode/Flush request from client in invalid state: " - << state_; + VLOGF(1) << "Decode/Flush request from client in invalid state: " + << state_; NotifyError(PLATFORM_FAILURE); break; } @@ -549,9 +552,9 @@ input_buffers_.pop(); if (curr_input_buffer_->is_flush()) { - DVLOG(4) << "New flush buffer"; + VLOGF(4) << "New flush buffer"; } else { - DVLOG(4) << "New current bitstream buffer, id: " + VLOGF(4) << "New current bitstream buffer, id: " << curr_input_buffer_->id << " size: " << curr_input_buffer_->shm->size(); @@ -575,7 +578,7 @@ int32_t id = curr_input_buffer_->id; curr_input_buffer_.reset(); - DVLOG(4) << "End of input buffer " << id; + VLOGF(4) << "End of input buffer " << id; task_runner_->PostTask( FROM_HERE, base::Bind(&Client::NotifyEndOfBitstreamBuffer, client_, id)); @@ -610,7 +613,7 @@ return; // Main decode task. - DVLOG(4) << "Decode task"; + VLOGF(4) << "Decode task"; // Try to decode what stream data is (still) in the decoder until we run out // of it. @@ -635,7 +638,7 @@ switch (res) { case AcceleratedVideoDecoder::kAllocateNewSurfaces: - DVLOG(1) << "Decoder requesting a new set of surfaces"; + VLOGF(2) << "Decoder requesting a new set of surfaces"; task_runner_->PostTask( FROM_HERE, base::Bind(&VaapiVideoDecodeAccelerator::InitiateSurfaceSetChange, @@ -681,7 +684,7 @@ // have had enough TFPictures to output surfaces to. Initiate a wait cycle, // which will wait for client to return enough PictureBuffers to us, so that // we can finish all pending output callbacks, releasing associated surfaces. - DVLOG(1) << "Initiating surface set change"; + VLOGF(2) << "Initiating surface set change"; awaiting_va_surfaces_recycle_ = true; requested_num_pics_ = num_pics; @@ -722,7 +725,7 @@ // 2. The above happened and all surface release callbacks have been posted // as the result, but not all have executed yet. Post ourselves after them // to let them release surfaces. - DVLOG(2) << "Awaiting pending output/surface release callbacks to finish"; + DVLOGF(2) << "Awaiting pending output/surface release callbacks to finish"; task_runner_->PostTask( FROM_HERE, base::Bind(&VaapiVideoDecodeAccelerator::TryFinishSurfaceSetChange, @@ -737,14 +740,14 @@ for (Pictures::iterator iter = pictures_.begin(); iter != pictures_.end(); ++iter) { - DVLOG(2) << "Dismissing picture id: " << iter->first; + VLOGF(2) << "Dismissing picture id: " << iter->first; if (client_) client_->DismissPictureBuffer(iter->first); } pictures_.clear(); // And ask for a new set as requested. - DVLOG(1) << "Requesting " << requested_num_pics_ + VLOGF(2) << "Requesting " << requested_num_pics_ << " pictures of size: " << requested_pic_size_.ToString(); VideoPixelFormat format = BufferFormatToVideoPixelFormat(output_format_); @@ -764,7 +767,7 @@ if (bitstream_buffer.id() < 0) { if (base::SharedMemory::IsHandleValid(bitstream_buffer.handle())) base::SharedMemory::CloseHandle(bitstream_buffer.handle()); - LOG(ERROR) << "Invalid bitstream_buffer, id: " << bitstream_buffer.id(); + VLOGF(1) << "Invalid bitstream_buffer, id: " << bitstream_buffer.id(); NotifyError(INVALID_ARGUMENT); return; } @@ -865,11 +868,11 @@ int32_t picture_buffer_id, const gfx::GpuMemoryBufferHandle& gpu_memory_buffer_handle) { DCHECK(task_runner_->BelongsToCurrentThread()); - DVLOG(2) << "Importing picture id: " << picture_buffer_id; + VLOGF(2) << "Importing picture id: " << picture_buffer_id; if (output_mode_ != Config::OutputMode::IMPORT) { CloseGpuMemoryBufferHandle(gpu_memory_buffer_handle); - LOG(ERROR) << "Cannot import in non-import mode"; + VLOGF(1) << "Cannot import in non-import mode"; NotifyError(INVALID_ARGUMENT); return; } @@ -882,7 +885,7 @@ // picture, but it has not yet executed when this ImportBufferForPicture // was posted to us by the client. In that case just ignore this (we've // already dismissed it and accounted for that). - DVLOG(3) << "got picture id=" << picture_buffer_id + VLOGF(3) << "got picture id=" << picture_buffer_id << " not in use (anymore?)."; return; } @@ -891,7 +894,7 @@ gpu_memory_buffer_handle)) { // ImportGpuMemoryBufferHandle will close the handles even on failure, so // we don't need to do this ourselves. - LOG(ERROR) << "Failed to import GpuMemoryBufferHandle"; + VLOGF(1) << "Failed to import GpuMemoryBufferHandle"; NotifyError(PLATFORM_FAILURE); return; } @@ -905,13 +908,14 @@ DCHECK(task_runner_->BelongsToCurrentThread()); TRACE_EVENT1("Video Decoder", "VAVDA::ReusePictureBuffer", "Picture id", picture_buffer_id); + VLOGF(4) << "picture id=" << picture_buffer_id; if (!PictureById(picture_buffer_id)) { // It's possible that we've already posted a DismissPictureBuffer for this // picture, but it has not yet executed when this ReusePictureBuffer // was posted to us by the client. In that case just ignore this (we've // already dismissed it and accounted for that). - DVLOG(3) << "got picture id=" << picture_buffer_id + VLOGF(3) << "got picture id=" << picture_buffer_id << " not in use (anymore?)."; return; } @@ -927,7 +931,7 @@ DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK(curr_input_buffer_.get() && curr_input_buffer_->is_flush()); - DVLOG(1) << "Flush task"; + VLOGF(2) << "Flush task"; curr_input_buffer_.reset(); @@ -947,7 +951,7 @@ void VaapiVideoDecodeAccelerator::Flush() { DCHECK(task_runner_->BelongsToCurrentThread()); - DVLOG(1) << "Got flush request"; + VLOGF(2) << "Got flush request"; // Queue a dummy buffer, which means flush. QueueInputBuffer(media::BitstreamBuffer()); @@ -983,12 +987,12 @@ task_runner_->PostTask(FROM_HERE, base::Bind(&Client::NotifyFlushDone, client_)); - DVLOG(1) << "Flush finished"; + VLOGF(2) << "Flush finished"; } void VaapiVideoDecodeAccelerator::ResetTask() { DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); - DVLOG(1) << "ResetTask"; + VLOGF(2) << "ResetTask"; // All the decoding tasks from before the reset request from client are done // by now, as this task was scheduled after them and client is expected not @@ -1009,7 +1013,7 @@ void VaapiVideoDecodeAccelerator::Reset() { DCHECK(task_runner_->BelongsToCurrentThread()); - DVLOG(1) << "Got reset request"; + VLOGF(2) << "Got reset request"; // This will make any new decode tasks exit early. base::AutoLock auto_lock(lock_); @@ -1040,7 +1044,7 @@ void VaapiVideoDecodeAccelerator::FinishReset() { DCHECK(task_runner_->BelongsToCurrentThread()); - DVLOG(1) << "FinishReset"; + VLOGF(2) << "FinishReset"; base::AutoLock auto_lock(lock_); if (state_ != kResetting) { @@ -1080,7 +1084,7 @@ base::Unretained(this))); } - DVLOG(1) << "Reset finished"; + VLOGF(2) << "Reset finished"; } void VaapiVideoDecodeAccelerator::Cleanup() { @@ -1090,7 +1094,7 @@ if (state_ == kUninitialized || state_ == kDestroying) return; - DVLOG(1) << "Destroying VAVDA"; + VLOGF(2) << "Destroying VAVDA"; state_ = kDestroying; client_ptr_factory_.reset(); @@ -1125,7 +1129,7 @@ const scoped_refptr<VaapiDecodeSurface>& dec_surface) { if (!vaapi_wrapper_->ExecuteAndDestroyPendingBuffers( dec_surface->va_surface()->id())) { - DVLOG(1) << "Failed decoding picture"; + VLOGF(1) << "Failed decoding picture"; return false; } @@ -1425,7 +1429,7 @@ bool VaapiVideoDecodeAccelerator::VaapiH264Accelerator::SubmitDecode( const scoped_refptr<H264Picture>& pic) { - DVLOG(4) << "Decoding POC " << pic->pic_order_cnt; + VLOGF(4) << "Decoding POC " << pic->pic_order_cnt; scoped_refptr<VaapiDecodeSurface> dec_surface = H264PictureToVaapiDecodeSurface(pic); @@ -1771,7 +1775,7 @@ DCHECK(frame_hdr); if (frame_hdr->profile != 0) { - DVLOG(1) << "Unsupported profile" << frame_hdr->profile; + VLOGF(1) << "Unsupported profile" << frame_hdr->profile; return false; }
diff --git a/media/midi/midi_manager_alsa.cc b/media/midi/midi_manager_alsa.cc index dc33c29..d5778441 100644 --- a/media/midi/midi_manager_alsa.cc +++ b/media/midi/midi_manager_alsa.cc
@@ -244,10 +244,7 @@ } // Initialize decoder. - snd_midi_event_t* tmp_decoder = nullptr; - snd_midi_event_new(0, &tmp_decoder); - ScopedSndMidiEventPtr decoder(tmp_decoder); - tmp_decoder = nullptr; + ScopedSndMidiEventPtr decoder = CreateScopedSndMidiEventPtr(0); snd_midi_event_no_status(decoder.get(), 1); // Initialize udev and monitor. @@ -856,11 +853,10 @@ void MidiManagerAlsa::SendMidiData(MidiManagerClient* client, uint32_t port_index, const std::vector<uint8_t>& data) { - snd_midi_event_t* encoder; - snd_midi_event_new(kSendBufferSize, &encoder); + ScopedSndMidiEventPtr encoder = CreateScopedSndMidiEventPtr(kSendBufferSize); for (const auto datum : data) { snd_seq_event_t event; - int result = snd_midi_event_encode_byte(encoder, datum, &event); + int result = snd_midi_event_encode_byte(encoder.get(), datum, &event); if (result == 1) { // Full event, send it. base::AutoLock lock(out_ports_lock_); @@ -876,7 +872,6 @@ } } } - snd_midi_event_free(encoder); // Acknowledge send. AccumulateMidiBytesSent(client, data.size()); @@ -1389,6 +1384,13 @@ return true; } +MidiManagerAlsa::ScopedSndMidiEventPtr +MidiManagerAlsa::CreateScopedSndMidiEventPtr(size_t size) { + snd_midi_event_t* coder; + snd_midi_event_new(size, &coder); + return ScopedSndMidiEventPtr(coder); +} + #if !defined(OS_CHROMEOS) MidiManager* MidiManager::Create(MidiService* service) { return new MidiManagerAlsa(service);
diff --git a/media/midi/midi_manager_alsa.h b/media/midi/midi_manager_alsa.h index c563584..c2e3280 100644 --- a/media/midi/midi_manager_alsa.h +++ b/media/midi/midi_manager_alsa.h
@@ -396,6 +396,10 @@ // Returns true if successful. bool Subscribe(uint32_t port_index, int client_id, int port_id); + // Allocates new snd_midi_event_t instance and wraps it to return as + // ScopedSndMidiEventPtr. + ScopedSndMidiEventPtr CreateScopedSndMidiEventPtr(size_t size); + // Members initialized in the constructor are below. // Our copies of the internal state of the ports of seq and udev. AlsaSeqState alsa_seq_state_;
diff --git a/media/test/data/eme_player_js/player_utils.js b/media/test/data/eme_player_js/player_utils.js index bfaf9358..7013920 100644 --- a/media/test/data/eme_player_js/player_utils.js +++ b/media/test/data/eme_player_js/player_utils.js
@@ -231,11 +231,10 @@ } // The File IO test requires persistent state support. - if (player.testConfig.keySystem == FILE_IO_TEST_KEYSYSTEM) { + if (player.testConfig.keySystem == + 'org.chromium.externalclearkey.fileiotest') { config.persistentState = 'required'; - } else if ( - player.testConfig.sessionToLoad || - player.testConfig.keySystem == STORAGE_ID_TEST_KEYSYSTEM) { + } else if (player.testConfig.sessionToLoad) { config.persistentState = 'required'; config.sessionTypes = ['temporary', 'persistent-license']; }
diff --git a/mojo/public/cpp/bindings/lib/sync_handle_registry.cc b/mojo/public/cpp/bindings/lib/sync_handle_registry.cc index a7a5a6f..6816de0 100644 --- a/mojo/public/cpp/bindings/lib/sync_handle_registry.cc +++ b/mojo/public/cpp/bindings/lib/sync_handle_registry.cc
@@ -72,15 +72,12 @@ it = result.first; } - auto& callbacks = it->second.container(); - if (callbacks.empty()) { - // AddEvent() must succeed since we only attempt it when there are - // previously no callbacks registered for this event. - MojoResult rv = wait_set_.AddEvent(event); - DCHECK_EQ(MOJO_RESULT_OK, rv); - } + // The event may already be in the WaitSet, but we don't care. This will be a + // no-op in that case, which is more efficient than scanning the list of + // callbacks to see if any are valid. + wait_set_.AddEvent(event); - callbacks.push_back(callback); + it->second.container().push_back(callback); } void SyncHandleRegistry::UnregisterEvent(base::WaitableEvent* event, @@ -89,6 +86,7 @@ if (it == events_.end()) return; + bool has_valid_callbacks = false; auto& callbacks = it->second.container(); if (is_dispatching_event_callbacks_) { // Not safe to remove any elements from |callbacks| here since an outer @@ -96,6 +94,8 @@ for (auto& cb : callbacks) { if (cb.Equals(callback)) cb.Reset(); + else if (cb) + has_valid_callbacks = true; } remove_invalid_event_callbacks_after_dispatch_ = true; } else { @@ -104,11 +104,18 @@ return cb.Equals(callback); }), callbacks.end()); - if (callbacks.empty()) { + if (callbacks.empty()) events_.erase(it); - MojoResult rv = wait_set_.RemoveEvent(event); - DCHECK_EQ(MOJO_RESULT_OK, rv); - } + else + has_valid_callbacks = true; + } + + if (!has_valid_callbacks) { + // Regardless of whether or not we're nested within a Wait(), we need to + // ensure that |event| is removed from the WaitSet before returning if this + // was the last callback registered for it. + MojoResult rv = wait_set_.RemoveEvent(event); + DCHECK_EQ(MOJO_RESULT_OK, rv); } } @@ -180,14 +187,10 @@ std::remove_if(callbacks.begin(), callbacks.end(), [](const base::Closure& callback) { return !callback; }), callbacks.end()); - if (callbacks.empty()) { - MojoResult rv = wait_set_.RemoveEvent(it->first); - DCHECK_EQ(MOJO_RESULT_OK, rv); - + if (callbacks.empty()) events_.erase(it++); - } else { + else ++it; - } } }
diff --git a/mojo/public/cpp/bindings/tests/BUILD.gn b/mojo/public/cpp/bindings/tests/BUILD.gn index a7cd611f..456da13 100644 --- a/mojo/public/cpp/bindings/tests/BUILD.gn +++ b/mojo/public/cpp/bindings/tests/BUILD.gn
@@ -35,6 +35,7 @@ "sample_service_unittest.cc", "serialization_warning_unittest.cc", "struct_unittest.cc", + "sync_handle_registry_unittest.cc", "sync_method_unittest.cc", "type_conversion_unittest.cc", "union_unittest.cc",
diff --git a/mojo/public/cpp/bindings/tests/sync_handle_registry_unittest.cc b/mojo/public/cpp/bindings/tests/sync_handle_registry_unittest.cc new file mode 100644 index 0000000..c0e985b0 --- /dev/null +++ b/mojo/public/cpp/bindings/tests/sync_handle_registry_unittest.cc
@@ -0,0 +1,257 @@ +// 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 "mojo/public/cpp/bindings/sync_handle_registry.h" +#include "base/bind.h" +#include "base/memory/ptr_util.h" +#include "base/memory/ref_counted.h" +#include "base/synchronization/waitable_event.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace mojo { + +class SyncHandleRegistryTest : public testing::Test { + public: + SyncHandleRegistryTest() : registry_(SyncHandleRegistry::current()) {} + + const scoped_refptr<SyncHandleRegistry>& registry() { return registry_; } + + private: + scoped_refptr<SyncHandleRegistry> registry_; + + DISALLOW_COPY_AND_ASSIGN(SyncHandleRegistryTest); +}; + +TEST_F(SyncHandleRegistryTest, DuplicateEventRegistration) { + bool called1 = false; + bool called2 = false; + auto callback = [](bool* called) { *called = true; }; + auto callback1 = base::Bind(callback, &called1); + auto callback2 = base::Bind(callback, &called2); + + base::WaitableEvent e(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + registry()->RegisterEvent(&e, callback1); + registry()->RegisterEvent(&e, callback2); + + const bool* stop_flags[] = {&called1, &called2}; + registry()->Wait(stop_flags, 2); + + EXPECT_TRUE(called1); + EXPECT_TRUE(called2); + registry()->UnregisterEvent(&e, callback1); + + called1 = false; + called2 = false; + + registry()->Wait(stop_flags, 2); + + EXPECT_FALSE(called1); + EXPECT_TRUE(called2); + + registry()->UnregisterEvent(&e, callback2); +} + +TEST_F(SyncHandleRegistryTest, UnregisterDuplicateEventInNestedWait) { + base::WaitableEvent e(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + bool called1 = false; + bool called2 = false; + bool called3 = false; + auto callback1 = base::Bind([](bool* called) { *called = true; }, &called1); + auto callback2 = base::Bind( + [](base::WaitableEvent* e, const base::Closure& other_callback, + scoped_refptr<SyncHandleRegistry> registry, bool* called) { + registry->UnregisterEvent(e, other_callback); + *called = true; + }, + &e, callback1, registry(), &called2); + auto callback3 = base::Bind([](bool* called) { *called = true; }, &called3); + + registry()->RegisterEvent(&e, callback1); + registry()->RegisterEvent(&e, callback2); + registry()->RegisterEvent(&e, callback3); + + const bool* stop_flags[] = {&called1, &called2, &called3}; + registry()->Wait(stop_flags, 3); + + // We don't make any assumptions about the order in which callbacks run, so + // we can't check |called1| - it may or may not get set depending on internal + // details. All we know is |called2| should be set, and a subsequent wait + // should definitely NOT set |called1|. + EXPECT_TRUE(called2); + EXPECT_TRUE(called3); + + called1 = false; + called2 = false; + called3 = false; + + registry()->UnregisterEvent(&e, callback2); + registry()->Wait(stop_flags, 3); + + EXPECT_FALSE(called1); + EXPECT_FALSE(called2); + EXPECT_TRUE(called3); +} + +TEST_F(SyncHandleRegistryTest, UnregisterAndRegisterForNewEventInCallback) { + auto e = base::MakeUnique<base::WaitableEvent>( + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + bool called = false; + base::Closure callback_holder; + auto callback = base::Bind( + [](std::unique_ptr<base::WaitableEvent>* e, + base::Closure* callback_holder, + scoped_refptr<SyncHandleRegistry> registry, bool* called) { + EXPECT_FALSE(*called); + + registry->UnregisterEvent(e->get(), *callback_holder); + e->reset(); + *called = true; + + base::WaitableEvent nested_event( + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + bool nested_called = false; + auto nested_callback = + base::Bind([](bool* called) { *called = true; }, &nested_called); + registry->RegisterEvent(&nested_event, nested_callback); + const bool* stop_flag = &nested_called; + registry->Wait(&stop_flag, 1); + registry->UnregisterEvent(&nested_event, nested_callback); + }, + &e, &callback_holder, registry(), &called); + callback_holder = callback; + + registry()->RegisterEvent(e.get(), callback); + + const bool* stop_flag = &called; + registry()->Wait(&stop_flag, 1); + EXPECT_TRUE(called); +} + +TEST_F(SyncHandleRegistryTest, UnregisterAndRegisterForSameEventInCallback) { + base::WaitableEvent e(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + bool called = false; + base::Closure callback_holder; + auto callback = base::Bind( + [](base::WaitableEvent* e, base::Closure* callback_holder, + scoped_refptr<SyncHandleRegistry> registry, bool* called) { + EXPECT_FALSE(*called); + + registry->UnregisterEvent(e, *callback_holder); + *called = true; + + bool nested_called = false; + auto nested_callback = + base::Bind([](bool* called) { *called = true; }, &nested_called); + registry->RegisterEvent(e, nested_callback); + const bool* stop_flag = &nested_called; + registry->Wait(&stop_flag, 1); + registry->UnregisterEvent(e, nested_callback); + + EXPECT_TRUE(nested_called); + }, + &e, &callback_holder, registry(), &called); + callback_holder = callback; + + registry()->RegisterEvent(&e, callback); + + const bool* stop_flag = &called; + registry()->Wait(&stop_flag, 1); + EXPECT_TRUE(called); +} + +TEST_F(SyncHandleRegistryTest, RegisterDuplicateEventFromWithinCallback) { + base::WaitableEvent e(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + bool called = false; + int call_count = 0; + auto callback = base::Bind( + [](base::WaitableEvent* e, scoped_refptr<SyncHandleRegistry> registry, + bool* called, int* call_count) { + // Don't re-enter. + ++(*call_count); + if (*called) + return; + + *called = true; + + bool called2 = false; + auto callback2 = + base::Bind([](bool* called) { *called = true; }, &called2); + registry->RegisterEvent(e, callback2); + + const bool* stop_flag = &called2; + registry->Wait(&stop_flag, 1); + + registry->UnregisterEvent(e, callback2); + }, + &e, registry(), &called, &call_count); + + registry()->RegisterEvent(&e, callback); + + const bool* stop_flag = &called; + registry()->Wait(&stop_flag, 1); + + EXPECT_TRUE(called); + EXPECT_EQ(2, call_count); + + registry()->UnregisterEvent(&e, callback); +} + +TEST_F(SyncHandleRegistryTest, UnregisterUniqueEventInNestedWait) { + auto e1 = base::MakeUnique<base::WaitableEvent>( + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED); + base::WaitableEvent e2(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + bool called1 = false; + bool called2 = false; + auto callback1 = base::Bind([](bool* called) { *called = true; }, &called1); + auto callback2 = base::Bind( + [](std::unique_ptr<base::WaitableEvent>* e1, + const base::Closure& other_callback, + scoped_refptr<SyncHandleRegistry> registry, bool* called) { + // Prevent re-entrancy. + if (*called) + return; + + registry->UnregisterEvent(e1->get(), other_callback); + *called = true; + e1->reset(); + + // Nest another wait. + bool called3 = false; + auto callback3 = + base::Bind([](bool* called) { *called = true; }, &called3); + base::WaitableEvent e3(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::SIGNALED); + registry->RegisterEvent(&e3, callback3); + + // This nested Wait() must not attempt to wait on |e1| since it has + // been unregistered. This would crash otherwise, since |e1| has been + // deleted. See http://crbug.com/761097. + const bool* stop_flags[] = {&called3}; + registry->Wait(stop_flags, 1); + + EXPECT_TRUE(called3); + registry->UnregisterEvent(&e3, callback3); + }, + &e1, callback1, registry(), &called2); + + registry()->RegisterEvent(e1.get(), callback1); + registry()->RegisterEvent(&e2, callback2); + + const bool* stop_flags[] = {&called1, &called2}; + registry()->Wait(stop_flags, 2); + + EXPECT_TRUE(called2); + + registry()->UnregisterEvent(&e2, callback2); +} + +} // namespace mojo
diff --git a/net/BUILD.gn b/net/BUILD.gn index ea032052..e862ec7 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -45,6 +45,10 @@ use_byte_certs = is_mac || is_android || is_nacl || is_ios || is_win || is_fuchsia +# Android and Fuchsia can't run testserver.py directly, so they use remote +# test server. +use_remote_test_server = is_android || is_fuchsia + buildflag_header("features") { header = "net_features.h" flags = [ @@ -2657,12 +2661,14 @@ public_deps += [ "//crypto:platform" ] } - if (is_android || is_fuchsia) { + if (use_remote_test_server) { sources += [ "test/spawned_test_server/remote_test_server.cc", "test/spawned_test_server/remote_test_server.h", "test/spawned_test_server/remote_test_server_config.cc", "test/spawned_test_server/remote_test_server_config.h", + "test/spawned_test_server/remote_test_server_proxy.cc", + "test/spawned_test_server/remote_test_server_proxy.h", "test/spawned_test_server/spawner_communicator.cc", "test/spawned_test_server/spawner_communicator.h", ] @@ -5360,6 +5366,11 @@ ] } + if (use_remote_test_server) { + sources += + [ "test/spawned_test_server/remote_test_server_proxy_unittests.cc" ] + } + if (is_fuchsia) { use_test_server = true }
diff --git a/net/cert/internal/system_trust_store.cc b/net/cert/internal/system_trust_store.cc index 3e7c285..2566c65 100644 --- a/net/cert/internal/system_trust_store.cc +++ b/net/cert/internal/system_trust_store.cc
@@ -12,8 +12,11 @@ #endif #include "base/memory/ptr_util.h" +#include "build/build_config.h" +#include "net/cert/internal/parsed_certificate.h" #include "net/cert/internal/trust_store_collection.h" #include "net/cert/internal/trust_store_in_memory.h" +#include "net/cert/test_root_certs.h" #if defined(USE_NSS_CERTS) #include "crypto/nss_util.h" @@ -132,6 +135,29 @@ std::unique_ptr<SystemTrustStore> CreateSslSystemTrustStore() { return std::make_unique<SystemTrustStoreMac>(); } + +#elif defined(OS_FUCHSIA) + +class SystemTrustStoreFuchsia : public BaseSystemTrustStore { + public: + SystemTrustStoreFuchsia() { + if (TestRootCerts::HasInstance()) { + trust_store_.AddTrustStore( + TestRootCerts::GetInstance()->test_trust_store()); + } + } + + bool UsesSystemTrustStore() const override { return false; } + + bool IsKnownRoot(const ParsedCertificate* trust_anchor) const override { + return false; + } +}; + +std::unique_ptr<SystemTrustStore> CreateSslSystemTrustStore() { + return base::MakeUnique<SystemTrustStoreFuchsia>(); +} + #else class DummySystemTrustStore : public BaseSystemTrustStore { @@ -146,6 +172,7 @@ std::unique_ptr<SystemTrustStore> CreateSslSystemTrustStore() { return std::make_unique<DummySystemTrustStore>(); } + #endif } // namespace net
diff --git a/net/cert/nss_cert_database.cc b/net/cert/nss_cert_database.cc index 4f05316..80f50ce2 100644 --- a/net/cert/nss_cert_database.cc +++ b/net/cert/nss_cert_database.cc
@@ -25,6 +25,7 @@ #include "net/base/net_errors.h" #include "net/cert/cert_database.h" #include "net/cert/x509_certificate.h" +#include "net/cert/x509_util_nss.h" #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h" #include "net/third_party/mozilla_security_manager/nsPKCS12Blob.h" @@ -60,17 +61,41 @@ DISALLOW_COPY_AND_ASSIGN(CertNotificationForwarder); }; +// TODO(mattm): remove this once crbug.com/671420 is done. +ScopedCERTCertificateList CreateCERTCertificateListFromX509CertificateList( + const CertificateList& x509_certs) { + ScopedCERTCertificateList nss_certs; + for (const auto& x509_cert : x509_certs) { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(x509_cert.get()); + if (!nss_cert) + return {}; + nss_certs.push_back(std::move(nss_cert)); + } + return nss_certs; +} + +// TODO(mattm): remove this once crbug.com/671420 is done. +void ConvertOldCertsCallback( + const NSSCertDatabase::OldListCertsCallback& callback, + ScopedCERTCertificateList nss_certs) { + std::unique_ptr<CertificateList> x509_certs(new CertificateList()); + *x509_certs = + x509_util::CreateX509CertificateListFromCERTCertificates(nss_certs); + callback.Run(std::move(x509_certs)); +} + } // namespace NSSCertDatabase::ImportCertFailure::ImportCertFailure( - const scoped_refptr<X509Certificate>& cert, + ScopedCERTCertificate cert, int err) - : certificate(cert), net_error(err) {} + : certificate(std::move(cert)), net_error(err) {} NSSCertDatabase::ImportCertFailure::ImportCertFailure( - const ImportCertFailure& other) = default; + ImportCertFailure&& other) = default; -NSSCertDatabase::ImportCertFailure::~ImportCertFailure() {} +NSSCertDatabase::ImportCertFailure::~ImportCertFailure() = default; NSSCertDatabase::NSSCertDatabase(crypto::ScopedPK11Slot public_slot, crypto::ScopedPK11Slot private_slot) @@ -90,37 +115,40 @@ NSSCertDatabase::~NSSCertDatabase() {} +ScopedCERTCertificateList NSSCertDatabase::ListCertsSync() { + return ListCertsImpl(crypto::ScopedPK11Slot()); +} void NSSCertDatabase::ListCertsSync(CertificateList* certs) { - ListCertsImpl(crypto::ScopedPK11Slot(), certs); + *certs = + x509_util::CreateX509CertificateListFromCERTCertificates(ListCertsSync()); } -void NSSCertDatabase::ListCerts( - const base::Callback<void(std::unique_ptr<CertificateList> certs)>& - callback) { - std::unique_ptr<CertificateList> certs(new CertificateList()); +void NSSCertDatabase::ListCerts(const ListCertsCallback& callback) { + base::PostTaskAndReplyWithResult( + GetSlowTaskRunner().get(), FROM_HERE, + base::Bind(&NSSCertDatabase::ListCertsImpl, + base::Passed(crypto::ScopedPK11Slot())), + callback); +} - // base::Passed will NULL out |certs|, so cache the underlying pointer here. - CertificateList* raw_certs = certs.get(); - GetSlowTaskRunner()->PostTaskAndReply( - FROM_HERE, base::Bind(&NSSCertDatabase::ListCertsImpl, - base::Passed(crypto::ScopedPK11Slot()), - base::Unretained(raw_certs)), - base::Bind(callback, base::Passed(&certs))); +void NSSCertDatabase::ListCerts(const OldListCertsCallback& callback) { + ListCerts(base::Bind(&ConvertOldCertsCallback, callback)); } void NSSCertDatabase::ListCertsInSlot(const ListCertsCallback& callback, PK11SlotInfo* slot) { DCHECK(slot); - std::unique_ptr<CertificateList> certs(new CertificateList()); + base::PostTaskAndReplyWithResult( + GetSlowTaskRunner().get(), FROM_HERE, + base::Bind( + &NSSCertDatabase::ListCertsImpl, + base::Passed(crypto::ScopedPK11Slot(PK11_ReferenceSlot(slot)))), + callback); +} - // base::Passed will NULL out |certs|, so cache the underlying pointer here. - CertificateList* raw_certs = certs.get(); - GetSlowTaskRunner()->PostTaskAndReply( - FROM_HERE, - base::Bind(&NSSCertDatabase::ListCertsImpl, - base::Passed(crypto::ScopedPK11Slot(PK11_ReferenceSlot(slot))), - base::Unretained(raw_certs)), - base::Bind(callback, base::Passed(&certs))); +void NSSCertDatabase::ListCertsInSlot(const OldListCertsCallback& callback, + PK11SlotInfo* slot) { + ListCertsInSlot(base::Bind(&ConvertOldCertsCallback, callback), slot); } #if defined(OS_CHROMEOS) @@ -163,11 +191,12 @@ } } -int NSSCertDatabase::ImportFromPKCS12(PK11SlotInfo* slot_info, - const std::string& data, - const base::string16& password, - bool is_extractable, - CertificateList* imported_certs) { +int NSSCertDatabase::ImportFromPKCS12( + PK11SlotInfo* slot_info, + const std::string& data, + const base::string16& password, + bool is_extractable, + ScopedCERTCertificateList* imported_certs) { DVLOG(1) << __func__ << " " << PK11_GetModuleID(slot_info) << ":" << PK11_GetSlotID(slot_info); @@ -181,14 +210,68 @@ return result; } +int NSSCertDatabase::ImportFromPKCS12(PK11SlotInfo* slot_info, + const std::string& data, + const base::string16& password, + bool is_extractable, + CertificateList* imported_certs) { + ScopedCERTCertificateList nss_imported_certs; + int result = ImportFromPKCS12(slot_info, data, password, is_extractable, + &nss_imported_certs); -int NSSCertDatabase::ExportToPKCS12( - const CertificateList& certs, - const base::string16& password, - std::string* output) const { + if (imported_certs) { + *imported_certs = x509_util::CreateX509CertificateListFromCERTCertificates( + nss_imported_certs); + } + return result; +} + +int NSSCertDatabase::ImportFromPKCS12(PK11SlotInfo* slot_info, + const std::string& data, + const base::string16& password, + bool is_extractable, + std::nullptr_t /* imported_certs */) { + return ImportFromPKCS12(slot_info, data, password, is_extractable, + static_cast<ScopedCERTCertificateList*>(nullptr)); +} + +int NSSCertDatabase::ExportToPKCS12(const ScopedCERTCertificateList& certs, + const base::string16& password, + std::string* output) const { return psm::nsPKCS12Blob_Export(output, certs, password); } +int NSSCertDatabase::ExportToPKCS12(const CertificateList& certs, + const base::string16& password, + std::string* output) const { + ScopedCERTCertificateList nss_certs = + CreateCERTCertificateListFromX509CertificateList(certs); + if (nss_certs.empty()) + return 0; + return ExportToPKCS12(nss_certs, password, output); +} + +CERTCertificate* NSSCertDatabase::FindRootInList( + const ScopedCERTCertificateList& certificates) const { + DCHECK_GT(certificates.size(), 0U); + + if (certificates.size() == 1) + return certificates[0].get(); + + CERTCertificate* cert0 = certificates[0].get(); + CERTCertificate* cert1 = certificates[1].get(); + CERTCertificate* certn_2 = certificates[certificates.size() - 2].get(); + CERTCertificate* certn_1 = certificates[certificates.size() - 1].get(); + + if (CERT_CompareName(&cert1->issuer, &cert0->subject) == SECEqual) + return cert0; + if (CERT_CompareName(&certn_2->issuer, &certn_1->subject) == SECEqual) + return certn_1; + + LOG(WARNING) << "certificate list is not a hierarchy"; + return cert0; +} + X509Certificate* NSSCertDatabase::FindRootInList( const CertificateList& certificates) const { DCHECK_GT(certificates.size(), 0U); @@ -213,10 +296,13 @@ } int NSSCertDatabase::ImportUserCert(const std::string& data) { - CertificateList certificates = - X509Certificate::CreateCertificateListFromBytes( + ScopedCERTCertificateList certificates = + x509_util::CreateCERTCertificateListFromBytes( data.c_str(), data.size(), net::X509Certificate::FORMAT_AUTO); - int result = psm::ImportUserCert(certificates); + if (certificates.empty()) + return ERR_CERT_INVALID; + + int result = psm::ImportUserCert(certificates[0].get()); if (result == OK) NotifyObserversCertDBChanged(); @@ -224,10 +310,8 @@ return result; } -int NSSCertDatabase::ImportUserCert(X509Certificate* certificate) { - CertificateList certificates; - certificates.emplace_back(certificate); - int result = psm::ImportUserCert(certificates); +int NSSCertDatabase::ImportUserCert(CERTCertificate* cert) { + int result = psm::ImportUserCert(cert); if (result == OK) NotifyObserversCertDBChanged(); @@ -235,32 +319,62 @@ return result; } -bool NSSCertDatabase::ImportCACerts(const CertificateList& certificates, - TrustBits trust_bits, - ImportCertFailureList* not_imported) { +int NSSCertDatabase::ImportUserCert(X509Certificate* cert) { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert); + if (!nss_cert) + return ERR_CERT_INVALID; + return ImportUserCert(nss_cert.get()); +} + +bool NSSCertDatabase::ImportCACerts( + const ScopedCERTCertificateList& certificates, + TrustBits trust_bits, + ImportCertFailureList* not_imported) { crypto::ScopedPK11Slot slot(GetPublicSlot()); - X509Certificate* root = FindRootInList(certificates); - bool success = psm::ImportCACerts( - slot.get(), certificates, root, trust_bits, not_imported); + CERTCertificate* root = FindRootInList(certificates); + bool success = psm::ImportCACerts(slot.get(), certificates, root, trust_bits, + not_imported); if (success) NotifyObserversCertDBChanged(); return success; } +bool NSSCertDatabase::ImportCACerts(const CertificateList& certificates, + TrustBits trust_bits, + ImportCertFailureList* not_imported) { + ScopedCERTCertificateList nss_certs = + CreateCERTCertificateListFromX509CertificateList(certificates); + if (nss_certs.empty()) + return false; + return ImportCACerts(nss_certs, trust_bits, not_imported); +} + +bool NSSCertDatabase::ImportServerCert( + const ScopedCERTCertificateList& certificates, + TrustBits trust_bits, + ImportCertFailureList* not_imported) { + crypto::ScopedPK11Slot slot(GetPublicSlot()); + return psm::ImportServerCert(slot.get(), certificates, trust_bits, + not_imported); +} + bool NSSCertDatabase::ImportServerCert(const CertificateList& certificates, TrustBits trust_bits, ImportCertFailureList* not_imported) { - crypto::ScopedPK11Slot slot(GetPublicSlot()); - return psm::ImportServerCert( - slot.get(), certificates, trust_bits, not_imported); + ScopedCERTCertificateList nss_certs = + CreateCERTCertificateListFromX509CertificateList(certificates); + if (nss_certs.empty()) + return false; + return ImportServerCert(nss_certs, trust_bits, not_imported); } NSSCertDatabase::TrustBits NSSCertDatabase::GetCertTrust( - const X509Certificate* cert, + const CERTCertificate* cert, CertType type) const { CERTCertTrust trust; - SECStatus srv = CERT_GetCertTrust(cert->os_cert_handle(), &trust); + SECStatus srv = CERT_GetCertTrust(cert, &trust); if (srv != SECSuccess) { LOG(ERROR) << "CERT_GetCertTrust failed with error " << PORT_GetError(); return TRUST_DEFAULT; @@ -303,9 +417,19 @@ } } -bool NSSCertDatabase::IsUntrusted(const X509Certificate* cert) const { +NSSCertDatabase::TrustBits NSSCertDatabase::GetCertTrust( + const X509Certificate* cert, + CertType type) const { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert); + if (!nss_cert) + return TRUST_DEFAULT; + return GetCertTrust(nss_cert.get(), type); +} + +bool NSSCertDatabase::IsUntrusted(const CERTCertificate* cert) const { CERTCertTrust nsstrust; - SECStatus rv = CERT_GetCertTrust(cert->os_cert_handle(), &nsstrust); + SECStatus rv = CERT_GetCertTrust(cert, &nsstrust); if (rv != SECSuccess) { LOG(ERROR) << "CERT_GetCertTrust failed with error " << PORT_GetError(); return false; @@ -346,8 +470,7 @@ // Self-signed certificates that don't have any trust bits set are untrusted. // Other certificates that don't have any trust bits set may still be trusted // if they chain up to a trust anchor. - if (CERT_CompareName(&cert->os_cert_handle()->issuer, - &cert->os_cert_handle()->subject) == SECEqual) { + if (CERT_CompareName(&cert->issuer, &cert->subject) == SECEqual) { return (nsstrust.sslFlags & kTrusted) == 0 && (nsstrust.emailFlags & kTrusted) == 0 && (nsstrust.objectSigningFlags & kTrusted) == 0; @@ -356,6 +479,14 @@ return false; } +bool NSSCertDatabase::IsUntrusted(const X509Certificate* cert) const { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert); + if (!nss_cert) + return false; + return IsUntrusted(nss_cert.get()); +} + bool NSSCertDatabase::SetCertTrust(CERTCertificate* cert, CertType type, TrustBits trust_bits) { @@ -369,36 +500,73 @@ bool NSSCertDatabase::SetCertTrust(const X509Certificate* cert, CertType type, TrustBits trust_bits) { - return SetCertTrust(cert->os_cert_handle(), type, trust_bits); + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert); + if (!nss_cert) + return false; + return SetCertTrust(nss_cert.get(), type, trust_bits); } -bool NSSCertDatabase::DeleteCertAndKey(X509Certificate* cert) { +bool NSSCertDatabase::DeleteCertAndKey(CERTCertificate* cert) { if (!DeleteCertAndKeyImpl(cert)) return false; NotifyObserversCertDBChanged(); return true; } +bool NSSCertDatabase::DeleteCertAndKey(X509Certificate* cert) { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert); + if (!nss_cert) + return false; + return DeleteCertAndKey(nss_cert.get()); +} + void NSSCertDatabase::DeleteCertAndKeyAsync( - const scoped_refptr<X509Certificate>& cert, + ScopedCERTCertificate cert, const DeleteCertCallback& callback) { base::PostTaskAndReplyWithResult( GetSlowTaskRunner().get(), FROM_HERE, - base::Bind(&NSSCertDatabase::DeleteCertAndKeyImpl, cert), - base::Bind(&NSSCertDatabase::NotifyCertRemovalAndCallBack, - weak_factory_.GetWeakPtr(), callback)); + base::BindOnce(&NSSCertDatabase::DeleteCertAndKeyImplScoped, + std::move(cert)), + base::BindOnce(&NSSCertDatabase::NotifyCertRemovalAndCallBack, + weak_factory_.GetWeakPtr(), callback)); } -bool NSSCertDatabase::IsReadOnly(const X509Certificate* cert) const { - PK11SlotInfo* slot = cert->os_cert_handle()->slot; +void NSSCertDatabase::DeleteCertAndKeyAsync( + const scoped_refptr<X509Certificate>& cert, + const DeleteCertCallback& callback) { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert.get()); + if (!nss_cert) { + base::SequencedTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(callback, false)); + } + DeleteCertAndKeyAsync(std::move(nss_cert), callback); +} + +bool NSSCertDatabase::IsReadOnly(const CERTCertificate* cert) const { + PK11SlotInfo* slot = cert->slot; return slot && PK11_IsReadOnly(slot); } -bool NSSCertDatabase::IsHardwareBacked(const X509Certificate* cert) const { - PK11SlotInfo* slot = cert->os_cert_handle()->slot; +bool NSSCertDatabase::IsReadOnly(const X509Certificate* cert) const { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert); + return nss_cert && IsReadOnly(nss_cert.get()); +} + +bool NSSCertDatabase::IsHardwareBacked(const CERTCertificate* cert) const { + PK11SlotInfo* slot = cert->slot; return slot && PK11_IsHW(slot); } +bool NSSCertDatabase::IsHardwareBacked(const X509Certificate* cert) const { + ScopedCERTCertificate nss_cert = + x509_util::CreateCERTCertificateFromX509Certificate(cert); + return nss_cert && IsHardwareBacked(nss_cert.get()); +} + void NSSCertDatabase::AddObserver(Observer* observer) { observer_list_->AddObserver(observer); } @@ -413,10 +581,9 @@ } // static -void NSSCertDatabase::ListCertsImpl(crypto::ScopedPK11Slot slot, - CertificateList* certs) { - certs->clear(); - +ScopedCERTCertificateList NSSCertDatabase::ListCertsImpl( + crypto::ScopedPK11Slot slot) { + ScopedCERTCertificateList certs; CERTCertList* cert_list = NULL; if (slot) cert_list = PK11_ListCertsInSlot(slot.get()); @@ -426,15 +593,10 @@ CERTCertListNode* node; for (node = CERT_LIST_HEAD(cert_list); !CERT_LIST_END(node, cert_list); node = CERT_LIST_NEXT(node)) { - scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( - node->cert, X509Certificate::OSCertHandles()); - if (!cert) { - LOG(ERROR) << "X509Certificate::CreateFromHandle failed"; - continue; - } - certs->push_back(cert); + certs.push_back(x509_util::DupCERTCertificate(node->cert)); } CERT_DestroyCertList(cert_list); + return certs; } scoped_refptr<base::TaskRunner> NSSCertDatabase::GetSlowTaskRunner() const { @@ -456,22 +618,20 @@ } // static -bool NSSCertDatabase::DeleteCertAndKeyImpl( - scoped_refptr<X509Certificate> cert) { +bool NSSCertDatabase::DeleteCertAndKeyImpl(CERTCertificate* cert) { // For some reason, PK11_DeleteTokenCertAndKey only calls // SEC_DeletePermCertificate if the private key is found. So, we check // whether a private key exists before deciding which function to call to // delete the cert. - SECKEYPrivateKey* privKey = - PK11_FindKeyByAnyCert(cert->os_cert_handle(), NULL); + SECKEYPrivateKey* privKey = PK11_FindKeyByAnyCert(cert, NULL); if (privKey) { SECKEY_DestroyPrivateKey(privKey); - if (PK11_DeleteTokenCertAndKey(cert->os_cert_handle(), NULL)) { + if (PK11_DeleteTokenCertAndKey(cert, NULL)) { LOG(ERROR) << "PK11_DeleteTokenCertAndKey failed: " << PORT_GetError(); return false; } } else { - if (SEC_DeletePermCertificate(cert->os_cert_handle())) { + if (SEC_DeletePermCertificate(cert)) { LOG(ERROR) << "SEC_DeletePermCertificate failed: " << PORT_GetError(); return false; } @@ -479,4 +639,9 @@ return true; } +// static +bool NSSCertDatabase::DeleteCertAndKeyImplScoped(ScopedCERTCertificate cert) { + return NSSCertDatabase::DeleteCertAndKeyImpl(cert.get()); +} + } // namespace net
diff --git a/net/cert/nss_cert_database.h b/net/cert/nss_cert_database.h index 5b068735..05da157 100644 --- a/net/cert/nss_cert_database.h +++ b/net/cert/nss_cert_database.h
@@ -20,6 +20,7 @@ #include "net/base/net_errors.h" #include "net/base/net_export.h" #include "net/cert/cert_type.h" +#include "net/cert/scoped_nss_types.h" #include "net/cert/x509_certificate.h" namespace base { @@ -57,11 +58,11 @@ // Stores per-certificate error codes for import failures. struct NET_EXPORT ImportCertFailure { public: - ImportCertFailure(const scoped_refptr<X509Certificate>& cert, int err); - ImportCertFailure(const ImportCertFailure& other); + ImportCertFailure(ScopedCERTCertificate cert, int err); + ImportCertFailure(ImportCertFailure&& other); ~ImportCertFailure(); - scoped_refptr<X509Certificate> certificate; + ScopedCERTCertificate certificate; int net_error; }; typedef std::vector<ImportCertFailure> ImportCertFailureList; @@ -92,8 +93,10 @@ DISTRUSTED_OBJ_SIGN = 1 << 5, }; - typedef base::Callback<void(std::unique_ptr<CertificateList> certs)> + typedef base::Callback<void(ScopedCERTCertificateList certs)> ListCertsCallback; + typedef base::Callback<void(std::unique_ptr<CertificateList> certs)> + OldListCertsCallback; typedef base::Callback<void(bool)> DeleteCertCallback; @@ -113,12 +116,14 @@ // Get a list of unique certificates in the certificate database (one // instance of all certificates). // DEPRECATED by |ListCerts|. See http://crbug.com/340460. - virtual void ListCertsSync(CertificateList* certs); + virtual ScopedCERTCertificateList ListCertsSync(); + void ListCertsSync(CertificateList* certs); // Asynchronously get a list of unique certificates in the certificate // database (one instance of all certificates). Note that the callback may be // run even after the database is deleted. virtual void ListCerts(const ListCertsCallback& callback); + void ListCerts(const OldListCertsCallback& callback); // Get a list of certificates in the certificate database of the given slot. // Note that the callback may be run even after the database is deleted. @@ -127,6 +132,8 @@ // thread. Never calls |callback| synchronously. virtual void ListCertsInSlot(const ListCertsCallback& callback, PK11SlotInfo* slot); + void ListCertsInSlot(const OldListCertsCallback& callback, + PK11SlotInfo* slot); #if defined(OS_CHROMEOS) // Get the slot for system-wide key data. May be NULL if the system token was @@ -160,11 +167,26 @@ const std::string& data, const base::string16& password, bool is_extractable, + ScopedCERTCertificateList* imported_certs); + int ImportFromPKCS12(PK11SlotInfo* slot_info, + const std::string& data, + const base::string16& password, + bool is_extractable, CertificateList* imported_certs); + // Overload on nullptr_t is required as otherwise it would be ambiguous which + // of the above methods should be used when nullptr is passed as the last arg. + int ImportFromPKCS12(PK11SlotInfo* slot_info, + const std::string& data, + const base::string16& password, + bool is_extractable, + std::nullptr_t /* imported_certs */); // Export the given certificates and private keys into a PKCS #12 blob, // storing into |output|. // Returns the number of certificates successfully exported. + int ExportToPKCS12(const ScopedCERTCertificateList& certs, + const base::string16& password, + std::string* output) const; int ExportToPKCS12(const CertificateList& certs, const base::string16& password, std::string* output) const; @@ -173,12 +195,15 @@ // root. Assumes the list is an ordered hierarchy with the root being either // the first or last element. // TODO(mattm): improve this to handle any order. + CERTCertificate* FindRootInList( + const ScopedCERTCertificateList& certificates) const; X509Certificate* FindRootInList(const CertificateList& certificates) const; // Import a user certificate. The private key for the user certificate must // already be installed, otherwise we return ERR_NO_PRIVATE_KEY_FOR_CERT. // Returns OK or a network error code. int ImportUserCert(const std::string& data); + int ImportUserCert(CERTCertificate* cert); int ImportUserCert(X509Certificate* cert); // Import CA certificates. @@ -188,6 +213,9 @@ // Returns false if there is an internal error, otherwise true is returned and // |not_imported| should be checked for any certificates that were not // imported. + bool ImportCACerts(const ScopedCERTCertificateList& certificates, + TrustBits trust_bits, + ImportCertFailureList* not_imported); bool ImportCACerts(const CertificateList& certificates, TrustBits trust_bits, ImportCertFailureList* not_imported); @@ -202,16 +230,21 @@ // Returns false if there is an internal error, otherwise true is returned and // |not_imported| should be checked for any certificates that were not // imported. + bool ImportServerCert(const ScopedCERTCertificateList& certificates, + TrustBits trust_bits, + ImportCertFailureList* not_imported); bool ImportServerCert(const CertificateList& certificates, TrustBits trust_bits, ImportCertFailureList* not_imported); // Get trust bits for certificate. + TrustBits GetCertTrust(const CERTCertificate* cert, CertType type) const; TrustBits GetCertTrust(const X509Certificate* cert, CertType type) const; // IsUntrusted returns true if |cert| is specifically untrusted. These // certificates are stored in the database for the specific purpose of // rejecting them. + bool IsUntrusted(const CERTCertificate* cert) const; bool IsUntrusted(const X509Certificate* cert) const; // Set trust values for certificate. @@ -224,18 +257,23 @@ // Delete certificate and associated private key (if one exists). // |cert| is still valid when this function returns. Returns true on // success. + bool DeleteCertAndKey(CERTCertificate* cert); bool DeleteCertAndKey(X509Certificate* cert); // Like DeleteCertAndKey but does not block by running the removal on a worker // thread. This must be called on IO thread and it will run |callback| on IO // thread. Never calls |callback| synchronously. + void DeleteCertAndKeyAsync(ScopedCERTCertificate cert, + const DeleteCertCallback& callback); void DeleteCertAndKeyAsync(const scoped_refptr<X509Certificate>& cert, const DeleteCertCallback& callback); // Check whether cert is stored in a readonly slot. + bool IsReadOnly(const CERTCertificate* cert) const; bool IsReadOnly(const X509Certificate* cert) const; // Check whether cert is stored in a hardware slot. + bool IsHardwareBacked(const CERTCertificate* cert) const; bool IsHardwareBacked(const X509Certificate* cert) const; // Overrides task runner that's used for running slow tasks. @@ -247,8 +285,7 @@ // |ListCertsSync|. Static so it may safely be used on the worker thread. // If |slot| is NULL, obtains the certs of all slots, otherwise only of // |slot|. - static void ListCertsImpl(crypto::ScopedPK11Slot slot, - CertificateList* certs); + static ScopedCERTCertificateList ListCertsImpl(crypto::ScopedPK11Slot slot); // Gets task runner that should be used for slow tasks like certificate // listing. Defaults to a base::WorkerPool runner, but may be overriden @@ -279,7 +316,11 @@ // Certificate removal implementation used by |DeleteCertAndKey*|. Static so // it may safely be used on the worker thread. - static bool DeleteCertAndKeyImpl(scoped_refptr<X509Certificate> cert); + static bool DeleteCertAndKeyImpl(CERTCertificate* cert); + // Like above, but taking a ScopedCERTCertificate. This is a workaround for + // base::Bind not having a way to own a unique_ptr but pass it to the + // function as a raw pointer. + static bool DeleteCertAndKeyImplScoped(ScopedCERTCertificate cert); crypto::ScopedPK11Slot public_slot_; crypto::ScopedPK11Slot private_slot_;
diff --git a/net/cert/nss_cert_database_chromeos.cc b/net/cert/nss_cert_database_chromeos.cc index a3b0c4c..8c09bb7 100644 --- a/net/cert/nss_cert_database_chromeos.cc +++ b/net/cert/nss_cert_database_chromeos.cc
@@ -16,7 +16,7 @@ #include "base/location.h" #include "base/stl_util.h" #include "base/task_runner.h" -#include "net/cert/x509_certificate.h" +#include "base/task_runner_util.h" namespace net { @@ -39,20 +39,16 @@ profile_filter_.Init(GetPublicSlot(), GetPrivateSlot(), GetSystemSlot()); } -void NSSCertDatabaseChromeOS::ListCertsSync(CertificateList* certs) { - ListCertsImpl(profile_filter_, certs); +ScopedCERTCertificateList NSSCertDatabaseChromeOS::ListCertsSync() { + return ListCertsImpl(profile_filter_); } void NSSCertDatabaseChromeOS::ListCerts( const NSSCertDatabase::ListCertsCallback& callback) { - std::unique_ptr<CertificateList> certs(new CertificateList()); - - // base::Pased will NULL out |certs|, so cache the underlying pointer here. - CertificateList* raw_certs = certs.get(); - GetSlowTaskRunner()->PostTaskAndReply( - FROM_HERE, base::Bind(&NSSCertDatabaseChromeOS::ListCertsImpl, - profile_filter_, base::Unretained(raw_certs)), - base::Bind(callback, base::Passed(&certs))); + base::PostTaskAndReplyWithResult( + GetSlowTaskRunner().get(), FROM_HERE, + base::Bind(&NSSCertDatabaseChromeOS::ListCertsImpl, profile_filter_), + callback); } crypto::ScopedPK11Slot NSSCertDatabaseChromeOS::GetSystemSlot() const { @@ -74,17 +70,18 @@ << " modules"; } -void NSSCertDatabaseChromeOS::ListCertsImpl( - const NSSProfileFilterChromeOS& profile_filter, - CertificateList* certs) { - NSSCertDatabase::ListCertsImpl(crypto::ScopedPK11Slot(), certs); +ScopedCERTCertificateList NSSCertDatabaseChromeOS::ListCertsImpl( + const NSSProfileFilterChromeOS& profile_filter) { + ScopedCERTCertificateList certs( + NSSCertDatabase::ListCertsImpl(crypto::ScopedPK11Slot())); - size_t pre_size = certs->size(); - base::EraseIf(*certs, + size_t pre_size = certs.size(); + base::EraseIf(certs, NSSProfileFilterChromeOS::CertNotAllowedForProfilePredicate( profile_filter)); - DVLOG(1) << "filtered " << pre_size - certs->size() << " of " << pre_size + DVLOG(1) << "filtered " << pre_size - certs.size() << " of " << pre_size << " certs"; + return certs; } } // namespace net
diff --git a/net/cert/nss_cert_database_chromeos.h b/net/cert/nss_cert_database_chromeos.h index df2585f..adc28be 100644 --- a/net/cert/nss_cert_database_chromeos.h +++ b/net/cert/nss_cert_database_chromeos.h
@@ -26,7 +26,7 @@ void SetSystemSlot(crypto::ScopedPK11Slot system_slot); // NSSCertDatabase implementation. - void ListCertsSync(CertificateList* certs) override; + ScopedCERTCertificateList ListCertsSync() override; void ListCerts(const NSSCertDatabase::ListCertsCallback& callback) override; void ListModules(std::vector<crypto::ScopedPK11Slot>* modules, bool need_rw) const override; @@ -41,8 +41,8 @@ // The certificate list normally returned by NSSCertDatabase::ListCertsImpl // is additionally filtered by |profile_filter|. // Static so it may safely be used on the worker thread. - static void ListCertsImpl(const NSSProfileFilterChromeOS& profile_filter, - CertificateList* certs); + static ScopedCERTCertificateList ListCertsImpl( + const NSSProfileFilterChromeOS& profile_filter); NSSProfileFilterChromeOS profile_filter_; crypto::ScopedPK11Slot system_slot_;
diff --git a/net/cert/nss_cert_database_chromeos_unittest.cc b/net/cert/nss_cert_database_chromeos_unittest.cc index f4a35d6..34e9911 100644 --- a/net/cert/nss_cert_database_chromeos_unittest.cc +++ b/net/cert/nss_cert_database_chromeos_unittest.cc
@@ -14,6 +14,7 @@ #include "crypto/scoped_test_nss_chromeos_user.h" #include "crypto/scoped_test_nss_db.h" #include "net/cert/cert_database.h" +#include "net/cert/x509_util_nss.h" #include "net/test/cert_test_util.h" #include "net/test/test_data_directory.h" #include "testing/gtest/include/gtest/gtest.h" @@ -23,23 +24,28 @@ namespace { bool IsCertInCertificateList(const X509Certificate* cert, - const CertificateList& cert_list) { - for (CertificateList::const_iterator it = cert_list.begin(); - it != cert_list.end(); - ++it) { - if (X509Certificate::IsSameOSCert((*it)->os_cert_handle(), - cert->os_cert_handle())) + const ScopedCERTCertificateList& cert_list) { + for (const auto& other : cert_list) { + if (x509_util::IsSameCertificate(other.get(), cert)) return true; } return false; } -void SwapCertLists(CertificateList* destination, - std::unique_ptr<CertificateList> source) { - ASSERT_TRUE(destination); - ASSERT_TRUE(source); +bool IsCertInCertificateList(CERTCertificate* cert, + const ScopedCERTCertificateList& cert_list) { + for (const auto& other : cert_list) { + if (x509_util::IsSameCertificate(other.get(), cert)) + return true; + } + return false; +} - destination->swap(*source); +void SwapCertLists(ScopedCERTCertificateList* destination, + ScopedCERTCertificateList source) { + ASSERT_TRUE(destination); + + destination->swap(source); } } // namespace @@ -135,16 +141,14 @@ // it for the other user. TEST_F(NSSCertDatabaseChromeOSTest, ImportCACerts) { // Load test certs from disk. - CertificateList certs_1 = - CreateCertificateListFromFile(GetTestCertsDirectory(), - "root_ca_cert.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs_1 = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "root_ca_cert.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs_1.size()); - CertificateList certs_2 = - CreateCertificateListFromFile(GetTestCertsDirectory(), - "2048-rsa-root.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs_2 = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "2048-rsa-root.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs_2.size()); // Import one cert for each user. @@ -158,10 +162,8 @@ EXPECT_EQ(0U, failed.size()); // Get cert list for each user. - CertificateList user_1_certlist; - CertificateList user_2_certlist; - db_1_->ListCertsSync(&user_1_certlist); - db_2_->ListCertsSync(&user_2_certlist); + ScopedCERTCertificateList user_1_certlist = db_1_->ListCertsSync(); + ScopedCERTCertificateList user_2_certlist = db_2_->ListCertsSync(); // Check that the imported certs only shows up in the list for the user that // imported them. @@ -177,8 +179,8 @@ ASSERT_EQ(2, db_changed_count_); // Tests that the new certs are loaded by async ListCerts method. - CertificateList user_1_certlist_async; - CertificateList user_2_certlist_async; + ScopedCERTCertificateList user_1_certlist_async; + ScopedCERTCertificateList user_2_certlist_async; db_1_->ListCerts( base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); db_2_->ListCerts( @@ -200,14 +202,13 @@ // it for the other user. TEST_F(NSSCertDatabaseChromeOSTest, ImportServerCert) { // Load test certs from disk. - CertificateList certs_1 = CreateCertificateListFromFile( + ScopedCERTCertificateList certs_1 = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs_1.size()); - CertificateList certs_2 = - CreateCertificateListFromFile(GetTestCertsDirectory(), - "2048-rsa-ee-by-2048-rsa-intermediate.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs_2 = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs_2.size()); // Import one cert for each user. @@ -221,10 +222,8 @@ EXPECT_EQ(0U, failed.size()); // Get cert list for each user. - CertificateList user_1_certlist; - CertificateList user_2_certlist; - db_1_->ListCertsSync(&user_1_certlist); - db_2_->ListCertsSync(&user_2_certlist); + ScopedCERTCertificateList user_1_certlist = db_1_->ListCertsSync(); + ScopedCERTCertificateList user_2_certlist = db_2_->ListCertsSync(); // Check that the imported certs only shows up in the list for the user that // imported them. @@ -241,8 +240,8 @@ EXPECT_EQ(0, db_changed_count_); // Tests that the new certs are loaded by async ListCerts method. - CertificateList user_1_certlist_async; - CertificateList user_2_certlist_async; + ScopedCERTCertificateList user_1_certlist_async; + ScopedCERTCertificateList user_2_certlist_async; db_1_->ListCerts( base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); db_2_->ListCerts( @@ -262,7 +261,7 @@ // Tests that There is no crash if the database is deleted while ListCerts // is being processed on the worker pool. TEST_F(NSSCertDatabaseChromeOSTest, NoCrashIfShutdownBeforeDoneOnWorkerPool) { - CertificateList certlist; + ScopedCERTCertificateList certlist; db_1_->ListCerts(base::Bind(&SwapCertLists, base::Unretained(&certlist))); EXPECT_EQ(0U, certlist.size()); @@ -285,8 +284,7 @@ "client_2.pem", "client_2.pk8", db_1_->GetSystemSlot().get())); - CertificateList certs; - db_1_->ListCertsSync(&certs); + ScopedCERTCertificateList certs = db_1_->ListCertsSync(); EXPECT_TRUE(IsCertInCertificateList(cert_1.get(), certs)); EXPECT_TRUE(IsCertInCertificateList(cert_2.get(), certs)); } @@ -303,8 +301,7 @@ "client_2.pem", "client_2.pk8", system_db_.slot())); - CertificateList certs; - db_2_->ListCertsSync(&certs); + ScopedCERTCertificateList certs = db_2_->ListCertsSync(); EXPECT_TRUE(IsCertInCertificateList(cert_1.get(), certs)); EXPECT_FALSE(IsCertInCertificateList(cert_2.get(), certs)); }
diff --git a/net/cert/nss_cert_database_unittest.cc b/net/cert/nss_cert_database_unittest.cc index 254dc74..e4f0ea6 100644 --- a/net/cert/nss_cert_database_unittest.cc +++ b/net/cert/nss_cert_database_unittest.cc
@@ -28,6 +28,7 @@ #include "net/cert/cert_verify_proc_nss.h" #include "net/cert/cert_verify_result.h" #include "net/cert/x509_certificate.h" +#include "net/cert/x509_util_nss.h" #include "net/test/cert_test_util.h" #include "net/test/gtest_util.h" #include "net/test/test_data_directory.h" @@ -50,10 +51,17 @@ namespace { -void SwapCertList(CertificateList* destination, - std::unique_ptr<CertificateList> source) { +void SwapCertList(ScopedCERTCertificateList* destination, + ScopedCERTCertificateList source) { ASSERT_TRUE(destination); - destination->swap(*source); + destination->swap(source); +} + +std::string GetSubjectCN(CERTCertificate* cert) { + char* cn = CERT_GetCommonName(&cert->subject); + std::string s = cn; + PORT_Free(cn); + return s; } } // namespace @@ -91,40 +99,33 @@ } static bool ReadCertIntoList(const std::string& name, - CertificateList* certs) { - scoped_refptr<X509Certificate> cert( - ImportCertFromFile(GetTestCertsDirectory(), name)); - if (!cert.get()) + ScopedCERTCertificateList* certs) { + ScopedCERTCertificate cert = + ImportCERTCertificateFromFile(GetTestCertsDirectory(), name); + if (!cert) return false; - certs->push_back(cert); + certs->push_back(std::move(cert)); return true; } - CertificateList ListCerts() { - CertificateList result; + ScopedCERTCertificateList ListCerts() { + ScopedCERTCertificateList result; CERTCertList* cert_list = PK11_ListCertsInSlot(test_nssdb_.slot()); for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); !CERT_LIST_END(node, cert_list); node = CERT_LIST_NEXT(node)) { - scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( - node->cert, X509Certificate::OSCertHandles()); - if (!cert) { - ADD_FAILURE() << "X509Certificate::CreateFromHandle failed"; - continue; - } - result.push_back(cert); + result.push_back(x509_util::DupCERTCertificate(node->cert)); } CERT_DestroyCertList(cert_list); // Sort the result so that test comparisons can be deterministic. std::sort( result.begin(), result.end(), - [](const scoped_refptr<X509Certificate>& lhs, - const scoped_refptr<X509Certificate>& rhs) { + [](const ScopedCERTCertificate& lhs, const ScopedCERTCertificate& rhs) { return SHA256HashValueLessThan()( - X509Certificate::CalculateFingerprint256(lhs->os_cert_handle()), - X509Certificate::CalculateFingerprint256(rhs->os_cert_handle())); + x509_util::CalculateFingerprint256(lhs.get()), + x509_util::CalculateFingerprint256(rhs.get())); }); return result; } @@ -138,8 +139,7 @@ TEST_F(CertDatabaseNSSTest, ListCertsSync) { // This test isn't terribly useful, though it will at least let valgrind test // for leaks. - CertificateList certs; - cert_db_->ListCertsSync(&certs); + ScopedCERTCertificateList certs = cert_db_->ListCertsSync(); // The test DB is empty, but let's assume there will always be something in // the other slots. EXPECT_LT(0U, certs.size()); @@ -148,7 +148,7 @@ TEST_F(CertDatabaseNSSTest, ListCerts) { // This test isn't terribly useful, though it will at least let valgrind test // for leaks. - CertificateList certs; + ScopedCERTCertificateList certs; cert_db_->SetSlowTaskRunnerForTest(base::ThreadTaskRunnerHandle::Get()); cert_db_->ListCerts(base::Bind(&SwapCertList, base::Unretained(&certs))); EXPECT_EQ(0U, certs.size()); @@ -163,12 +163,11 @@ TEST_F(CertDatabaseNSSTest, ImportFromPKCS12WrongPassword) { std::string pkcs12_data = ReadTestFile("client.p12"); - EXPECT_EQ(ERR_PKCS12_IMPORT_BAD_PASSWORD, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - base::string16(), - true, // is_extractable - NULL)); + EXPECT_EQ( + ERR_PKCS12_IMPORT_BAD_PASSWORD, + cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, base::string16(), + true, // is_extractable + nullptr)); // Test db should still be empty. EXPECT_EQ(0U, ListCerts().size()); @@ -177,19 +176,14 @@ TEST_F(CertDatabaseNSSTest, ImportFromPKCS12AsExtractableAndExportAgain) { std::string pkcs12_data = ReadTestFile("client.p12"); - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - ASCIIToUTF16("12345"), - true, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + ASCIIToUTF16("12345"), + true, // is_extractable + nullptr)); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - scoped_refptr<X509Certificate> cert(cert_list[0]); - - EXPECT_EQ("testusercert", - cert->subject().common_name); + EXPECT_EQ("testusercert", GetSubjectCN(cert_list[0].get())); // TODO(mattm): move export test to separate test case? std::string exported_data; @@ -202,41 +196,32 @@ TEST_F(CertDatabaseNSSTest, ImportFromPKCS12Twice) { std::string pkcs12_data = ReadTestFile("client.p12"); - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - ASCIIToUTF16("12345"), - true, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + ASCIIToUTF16("12345"), + true, // is_extractable + nullptr)); EXPECT_EQ(1U, ListCerts().size()); // NSS has a SEC_ERROR_PKCS12_DUPLICATE_DATA error, but it doesn't look like // it's ever used. This test verifies that. - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - ASCIIToUTF16("12345"), - true, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + ASCIIToUTF16("12345"), + true, // is_extractable + nullptr)); EXPECT_EQ(1U, ListCerts().size()); } TEST_F(CertDatabaseNSSTest, ImportFromPKCS12AsUnextractableAndExportAgain) { std::string pkcs12_data = ReadTestFile("client.p12"); - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - ASCIIToUTF16("12345"), - false, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + ASCIIToUTF16("12345"), + false, // is_extractable + nullptr)); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - scoped_refptr<X509Certificate> cert(cert_list[0]); - - EXPECT_EQ("testusercert", - cert->subject().common_name); + EXPECT_EQ("testusercert", GetSubjectCN(cert_list[0].get())); std::string exported_data; EXPECT_EQ(0, cert_db_->ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"), @@ -247,24 +232,20 @@ // private key should not mark an existing private key as unextractable. TEST_F(CertDatabaseNSSTest, ImportFromPKCS12OnlyMarkIncludedKey) { std::string pkcs12_data = ReadTestFile("client.p12"); - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - ASCIIToUTF16("12345"), - true, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + ASCIIToUTF16("12345"), + true, // is_extractable + nullptr)); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); // Now import a PKCS#12 file with just a certificate but no private key. pkcs12_data = ReadTestFile("client-nokey.p12"); - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - ASCIIToUTF16("12345"), - false, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + ASCIIToUTF16("12345"), + false, // is_extractable + nullptr)); cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); @@ -279,12 +260,11 @@ TEST_F(CertDatabaseNSSTest, ImportFromPKCS12InvalidFile) { std::string pkcs12_data = "Foobarbaz"; - EXPECT_EQ(ERR_PKCS12_IMPORT_INVALID_FILE, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - base::string16(), - true, // is_extractable - NULL)); + EXPECT_EQ( + ERR_PKCS12_IMPORT_INVALID_FILE, + cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, base::string16(), + true, // is_extractable + nullptr)); // Test db should still be empty. EXPECT_EQ(0U, ListCerts().size()); @@ -293,33 +273,29 @@ TEST_F(CertDatabaseNSSTest, ImportFromPKCS12EmptyPassword) { std::string pkcs12_data = ReadTestFile("client-empty-password.p12"); - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - base::string16(), - true, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + base::string16(), + true, // is_extractable + nullptr)); EXPECT_EQ(1U, ListCerts().size()); } TEST_F(CertDatabaseNSSTest, ImportFromPKCS12NullPassword) { std::string pkcs12_data = ReadTestFile("client-null-password.p12"); - EXPECT_EQ(OK, - cert_db_->ImportFromPKCS12(GetPublicSlot(), - pkcs12_data, - base::string16(), - true, // is_extractable - NULL)); + EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, + base::string16(), + true, // is_extractable + nullptr)); EXPECT_EQ(1U, ListCerts().size()); } TEST_F(CertDatabaseNSSTest, ImportCACert_SSLTrust) { - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "root_ca_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); - EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); + EXPECT_FALSE(certs[0]->isperm); // Import it. NSSCertDatabase::ImportCertFailureList failed; @@ -328,29 +304,27 @@ EXPECT_EQ(0U, failed.size()); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - scoped_refptr<X509Certificate> cert(cert_list[0]); - EXPECT_EQ("Test Root CA", cert->subject().common_name); + CERTCertificate* cert = cert_list[0].get(); + EXPECT_EQ("Test Root CA", GetSubjectCN(cert)); EXPECT_EQ(NSSCertDatabase::TRUSTED_SSL, - cert_db_->GetCertTrust(cert.get(), CA_CERT)); + cert_db_->GetCertTrust(cert, CA_CERT)); - EXPECT_EQ(unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | - CERTDB_TRUSTED_CLIENT_CA), - cert->os_cert_handle()->trust->sslFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - cert->os_cert_handle()->trust->emailFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - cert->os_cert_handle()->trust->objectSigningFlags); + EXPECT_EQ( + unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | CERTDB_TRUSTED_CLIENT_CA), + cert->trust->sslFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), cert->trust->emailFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), cert->trust->objectSigningFlags); } TEST_F(CertDatabaseNSSTest, ImportCACert_EmailTrust) { - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "root_ca_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); - EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); + EXPECT_FALSE(certs[0]->isperm); // Import it. NSSCertDatabase::ImportCertFailureList failed; @@ -359,29 +333,27 @@ EXPECT_EQ(0U, failed.size()); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - scoped_refptr<X509Certificate> cert(cert_list[0]); - EXPECT_EQ("Test Root CA", cert->subject().common_name); + CERTCertificate* cert = cert_list[0].get(); + EXPECT_EQ("Test Root CA", GetSubjectCN(cert)); EXPECT_EQ(NSSCertDatabase::TRUSTED_EMAIL, - cert_db_->GetCertTrust(cert.get(), CA_CERT)); + cert_db_->GetCertTrust(cert, CA_CERT)); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - cert->os_cert_handle()->trust->sslFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | - CERTDB_TRUSTED_CLIENT_CA), - cert->os_cert_handle()->trust->emailFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - cert->os_cert_handle()->trust->objectSigningFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), cert->trust->sslFlags); + EXPECT_EQ( + unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | CERTDB_TRUSTED_CLIENT_CA), + cert->trust->emailFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), cert->trust->objectSigningFlags); } TEST_F(CertDatabaseNSSTest, ImportCACert_ObjSignTrust) { - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "root_ca_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); - EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); + EXPECT_FALSE(certs[0]->isperm); // Import it. NSSCertDatabase::ImportCertFailureList failed; @@ -390,29 +362,26 @@ EXPECT_EQ(0U, failed.size()); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - scoped_refptr<X509Certificate> cert(cert_list[0]); - EXPECT_EQ("Test Root CA", cert->subject().common_name); + CERTCertificate* cert = cert_list[0].get(); + EXPECT_EQ("Test Root CA", GetSubjectCN(cert)); EXPECT_EQ(NSSCertDatabase::TRUSTED_OBJ_SIGN, - cert_db_->GetCertTrust(cert.get(), CA_CERT)); + cert_db_->GetCertTrust(cert, CA_CERT)); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - cert->os_cert_handle()->trust->sslFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - cert->os_cert_handle()->trust->emailFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | - CERTDB_TRUSTED_CLIENT_CA), - cert->os_cert_handle()->trust->objectSigningFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), cert->trust->sslFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), cert->trust->emailFlags); + EXPECT_EQ( + unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | CERTDB_TRUSTED_CLIENT_CA), + cert->trust->objectSigningFlags); } TEST_F(CertDatabaseNSSTest, ImportCA_NotCACert) { - CertificateList certs = CreateCertificateListFromFile( - GetTestCertsDirectory(), "ok_cert.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); - EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); + EXPECT_FALSE(certs[0]->isperm); // Import it. NSSCertDatabase::ImportCertFailureList failed; @@ -429,7 +398,7 @@ } TEST_F(CertDatabaseNSSTest, ImportCACertHierarchy) { - CertificateList certs; + ScopedCERTCertificateList certs; ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs)); @@ -445,19 +414,19 @@ &failed)); ASSERT_EQ(2U, failed.size()); - EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); + EXPECT_EQ("DOD CA-17", GetSubjectCN(failed[0].certificate.get())); EXPECT_THAT(failed[0].net_error, IsError(ERR_FAILED)); // The certificate expired. - EXPECT_EQ("www.us.army.mil", failed[1].certificate->subject().common_name); + EXPECT_EQ("www.us.army.mil", GetSubjectCN(failed[1].certificate.get())); EXPECT_THAT(failed[1].net_error, IsError(ERR_IMPORT_CA_CERT_NOT_CA)); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); + EXPECT_EQ("DoD Root CA 2", GetSubjectCN(cert_list[0].get())); } TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyDupeRoot) { - CertificateList certs; + ScopedCERTCertificateList certs; ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); // First import just the root. @@ -467,9 +436,9 @@ &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); + EXPECT_EQ("DoD Root CA 2", GetSubjectCN(cert_list[0].get())); ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs)); @@ -482,21 +451,21 @@ &failed)); ASSERT_EQ(3U, failed.size()); - EXPECT_EQ("DoD Root CA 2", failed[0].certificate->subject().common_name); + EXPECT_EQ("DoD Root CA 2", GetSubjectCN(failed[0].certificate.get())); EXPECT_THAT(failed[0].net_error, IsError(ERR_IMPORT_CERT_ALREADY_EXISTS)); - EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); + EXPECT_EQ("DOD CA-17", GetSubjectCN(failed[1].certificate.get())); EXPECT_THAT(failed[1].net_error, IsError(ERR_FAILED)); // The certificate expired. - EXPECT_EQ("www.us.army.mil", failed[2].certificate->subject().common_name); + EXPECT_EQ("www.us.army.mil", GetSubjectCN(failed[2].certificate.get())); EXPECT_THAT(failed[2].net_error, IsError(ERR_IMPORT_CA_CERT_NOT_CA)); cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); + EXPECT_EQ("DoD Root CA 2", GetSubjectCN(cert_list[0].get())); } TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyUntrusted) { - CertificateList certs; + ScopedCERTCertificateList certs; ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); @@ -506,18 +475,18 @@ &failed)); ASSERT_EQ(1U, failed.size()); - EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); + EXPECT_EQ("DOD CA-17", GetSubjectCN(failed[0].certificate.get())); // TODO(mattm): should check for net error equivalent of // SEC_ERROR_UNTRUSTED_ISSUER EXPECT_THAT(failed[0].net_error, IsError(ERR_FAILED)); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); + EXPECT_EQ("DoD Root CA 2", GetSubjectCN(cert_list[0].get())); } TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyTree) { - CertificateList certs; + ScopedCERTCertificateList certs; ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); @@ -529,20 +498,20 @@ &failed)); EXPECT_EQ(2U, failed.size()); - EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); + EXPECT_EQ("DOD CA-13", GetSubjectCN(failed[0].certificate.get())); EXPECT_THAT(failed[0].net_error, IsError(ERR_FAILED)); // The certificate expired. - EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); + EXPECT_EQ("DOD CA-17", GetSubjectCN(failed[1].certificate.get())); EXPECT_THAT(failed[1].net_error, IsError(ERR_FAILED)); // The certificate expired. - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); + EXPECT_EQ("DoD Root CA 2", GetSubjectCN(cert_list[0].get())); } TEST_F(CertDatabaseNSSTest, ImportCACertNotHierarchy) { - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "root_ca_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); @@ -551,38 +520,35 @@ // Import it. NSSCertDatabase::ImportCertFailureList failed; - EXPECT_TRUE(cert_db_->ImportCACerts( - certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL | - NSSCertDatabase::TRUSTED_OBJ_SIGN, &failed)); + EXPECT_TRUE(cert_db_->ImportCACerts(certs, + NSSCertDatabase::TRUSTED_SSL | + NSSCertDatabase::TRUSTED_EMAIL | + NSSCertDatabase::TRUSTED_OBJ_SIGN, + &failed)); ASSERT_EQ(2U, failed.size()); // TODO(mattm): should check for net error equivalent of // SEC_ERROR_UNKNOWN_ISSUER - EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); + EXPECT_EQ("DOD CA-13", GetSubjectCN(failed[0].certificate.get())); EXPECT_THAT(failed[0].net_error, IsError(ERR_FAILED)); - EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); + EXPECT_EQ("DOD CA-17", GetSubjectCN(failed[1].certificate.get())); EXPECT_THAT(failed[1].net_error, IsError(ERR_FAILED)); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - EXPECT_EQ("Test Root CA", cert_list[0]->subject().common_name); + EXPECT_EQ("Test Root CA", GetSubjectCN(cert_list[0].get())); } // Test importing a server cert + chain to the NSS DB with default trust. After // importing, all the certs should be found in the DB and should have default // trust flags. TEST_F(CertDatabaseNSSTest, ImportServerCert) { - scoped_refptr<X509Certificate> input_server_cert = ImportCertFromFile( - GetTestCertsDirectory(), "ok_cert_by_intermediate.pem"); - scoped_refptr<X509Certificate> input_intermediate_cert = - ImportCertFromFile(GetTestCertsDirectory(), "intermediate_ca_cert.pem"); - scoped_refptr<X509Certificate> input_root_cert = - ImportCertFromFile(GetTestCertsDirectory(), "root_ca_cert.pem"); - // Import the server and its chain. - CertificateList certs_to_import = {input_server_cert, input_intermediate_cert, - input_root_cert}; - ASSERT_EQ(3U, certs_to_import.size()); + ScopedCERTCertificateList certs_to_import; + ASSERT_TRUE( + ReadCertIntoList("ok_cert_by_intermediate.pem", &certs_to_import)); + ASSERT_TRUE(ReadCertIntoList("intermediate_ca_cert.pem", &certs_to_import)); + ASSERT_TRUE(ReadCertIntoList("root_ca_cert.pem", &certs_to_import)); NSSCertDatabase::ImportCertFailureList failed; EXPECT_TRUE(cert_db_->ImportServerCert( @@ -590,40 +556,42 @@ EXPECT_EQ(0U, failed.size()); // All the certs in the imported list should now be found in the NSS DB. - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(3U, cert_list.size()); - scoped_refptr<X509Certificate> found_server_cert(cert_list[1]); - scoped_refptr<X509Certificate> found_intermediate_cert(cert_list[2]); - scoped_refptr<X509Certificate> found_root_cert(cert_list[0]); - EXPECT_EQ("127.0.0.1", found_server_cert->subject().common_name); - EXPECT_EQ("Test Intermediate CA", - found_intermediate_cert->subject().common_name); - EXPECT_EQ("Test Root CA", found_root_cert->subject().common_name); + CERTCertificate* found_server_cert = cert_list[1].get(); + CERTCertificate* found_intermediate_cert = cert_list[2].get(); + CERTCertificate* found_root_cert = cert_list[0].get(); + EXPECT_EQ("127.0.0.1", GetSubjectCN(found_server_cert)); + EXPECT_EQ("Test Intermediate CA", GetSubjectCN(found_intermediate_cert)); + EXPECT_EQ("Test Root CA", GetSubjectCN(found_root_cert)); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, - cert_db_->GetCertTrust(found_server_cert.get(), SERVER_CERT)); - EXPECT_EQ(0U, found_server_cert->os_cert_handle()->trust->sslFlags); + cert_db_->GetCertTrust(found_server_cert, SERVER_CERT)); + EXPECT_EQ(0U, found_server_cert->trust->sslFlags); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, - cert_db_->GetCertTrust(found_intermediate_cert.get(), CA_CERT)); - EXPECT_EQ(0U, found_intermediate_cert->os_cert_handle()->trust->sslFlags); + cert_db_->GetCertTrust(found_intermediate_cert, CA_CERT)); + EXPECT_EQ(0U, found_intermediate_cert->trust->sslFlags); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, - cert_db_->GetCertTrust(found_root_cert.get(), CA_CERT)); - EXPECT_EQ(0U, found_root_cert->os_cert_handle()->trust->sslFlags); + cert_db_->GetCertTrust(found_root_cert, CA_CERT)); + EXPECT_EQ(0U, found_root_cert->trust->sslFlags); // Verification fails, as the intermediate & CA certs are imported without // trust. + scoped_refptr<X509Certificate> x509_found_server_cert = + x509_util::CreateX509CertificateFromCERTCertificate(found_server_cert); + ASSERT_TRUE(x509_found_server_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; - int error = - verify_proc->Verify(found_server_cert.get(), "127.0.0.1", std::string(), - flags, NULL, empty_cert_list_, &verify_result); + int error = verify_proc->Verify(x509_found_server_cert.get(), "127.0.0.1", + std::string(), flags, NULL, empty_cert_list_, + &verify_result); EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID)); EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status); } TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned) { - CertificateList certs; + ScopedCERTCertificateList certs; ASSERT_TRUE(ReadCertIntoList("punycodetest.pem", &certs)); NSSCertDatabase::ImportCertFailureList failed; @@ -632,26 +600,29 @@ EXPECT_EQ(0U, failed.size()); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - scoped_refptr<X509Certificate> puny_cert(cert_list[0]); + CERTCertificate* puny_cert = cert_list[0].get(); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, - cert_db_->GetCertTrust(puny_cert.get(), SERVER_CERT)); - EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->sslFlags); + cert_db_->GetCertTrust(puny_cert, SERVER_CERT)); + EXPECT_EQ(0U, puny_cert->trust->sslFlags); + scoped_refptr<X509Certificate> x509_puny_cert = + x509_util::CreateX509CertificateFromCERTCertificate(puny_cert); + ASSERT_TRUE(x509_puny_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; - int error = - verify_proc->Verify(puny_cert.get(), "xn--wgv71a119e.com", std::string(), - flags, NULL, empty_cert_list_, &verify_result); + int error = verify_proc->Verify(x509_puny_cert.get(), "xn--wgv71a119e.com", + std::string(), flags, NULL, empty_cert_list_, + &verify_result); EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID)); EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status); } TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned_Trusted) { - CertificateList certs; + ScopedCERTCertificateList certs; ASSERT_TRUE(ReadCertIntoList("punycodetest.pem", &certs)); NSSCertDatabase::ImportCertFailureList failed; @@ -660,27 +631,30 @@ EXPECT_EQ(0U, failed.size()); - CertificateList cert_list = ListCerts(); + ScopedCERTCertificateList cert_list = ListCerts(); ASSERT_EQ(1U, cert_list.size()); - scoped_refptr<X509Certificate> puny_cert(cert_list[0]); + CERTCertificate* puny_cert = cert_list[0].get(); EXPECT_EQ(NSSCertDatabase::TRUSTED_SSL, - cert_db_->GetCertTrust(puny_cert.get(), SERVER_CERT)); + cert_db_->GetCertTrust(puny_cert, SERVER_CERT)); EXPECT_EQ(unsigned(CERTDB_TRUSTED | CERTDB_TERMINAL_RECORD), - puny_cert->os_cert_handle()->trust->sslFlags); + puny_cert->trust->sslFlags); + scoped_refptr<X509Certificate> x509_puny_cert = + x509_util::CreateX509CertificateFromCERTCertificate(puny_cert); + ASSERT_TRUE(x509_puny_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; - int error = - verify_proc->Verify(puny_cert.get(), "xn--wgv71a119e.com", std::string(), - flags, NULL, empty_cert_list_, &verify_result); + int error = verify_proc->Verify(x509_puny_cert.get(), "xn--wgv71a119e.com", + std::string(), flags, NULL, empty_cert_list_, + &verify_result); EXPECT_THAT(error, IsOk()); EXPECT_EQ(0U, verify_result.cert_status); } TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert) { - CertificateList ca_certs = CreateCertificateListFromFile( + ScopedCERTCertificateList ca_certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "root_ca_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, ca_certs.size()); @@ -691,9 +665,8 @@ &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList certs = CreateCertificateListFromFile( - GetTestCertsDirectory(), "ok_cert.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); // Import server cert with default trust. @@ -702,18 +675,21 @@ EXPECT_EQ(0U, failed.size()); // Server cert should verify. + scoped_refptr<X509Certificate> x509_server_cert = + x509_util::CreateX509CertificateFromCERTCertificate(certs[0].get()); + ASSERT_TRUE(x509_server_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; int error = - verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result); + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result); EXPECT_THAT(error, IsOk()); EXPECT_EQ(0U, verify_result.cert_status); } TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert_DistrustServer) { - CertificateList ca_certs = CreateCertificateListFromFile( + ScopedCERTCertificateList ca_certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "root_ca_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, ca_certs.size()); @@ -724,35 +700,36 @@ &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList certs = CreateCertificateListFromFile( - GetTestCertsDirectory(), "ok_cert.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); // Import server cert without inheriting trust from issuer (explicit // distrust). - EXPECT_TRUE(cert_db_->ImportServerCert( - certs, NSSCertDatabase::DISTRUSTED_SSL, &failed)); + EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::DISTRUSTED_SSL, + &failed)); EXPECT_EQ(0U, failed.size()); EXPECT_EQ(NSSCertDatabase::DISTRUSTED_SSL, cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); - EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD), - certs[0]->os_cert_handle()->trust->sslFlags); + EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD), certs[0]->trust->sslFlags); // Server cert should fail to verify. + scoped_refptr<X509Certificate> x509_server_cert = + x509_util::CreateX509CertificateFromCERTCertificate(certs[0].get()); + ASSERT_TRUE(x509_server_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; int error = - verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result); + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result); EXPECT_THAT(error, IsError(ERR_CERT_REVOKED)); EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status); } TEST_F(CertDatabaseNSSTest, TrustIntermediateCa) { - CertificateList ca_certs = CreateCertificateListFromFile( + ScopedCERTCertificateList ca_certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "2048-rsa-root.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, ca_certs.size()); @@ -763,9 +740,10 @@ &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList intermediate_certs = CreateCertificateListFromFile( - GetTestCertsDirectory(), "2048-rsa-intermediate.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList intermediate_certs = + CreateCERTCertificateListFromFile(GetTestCertsDirectory(), + "2048-rsa-intermediate.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, intermediate_certs.size()); // Import Intermediate CA cert and trust it. @@ -773,25 +751,28 @@ NSSCertDatabase::TRUSTED_SSL, &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); // Import server cert with default trust. - EXPECT_TRUE(cert_db_->ImportServerCert( - certs, NSSCertDatabase::TRUST_DEFAULT, &failed)); + EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUST_DEFAULT, + &failed)); EXPECT_EQ(0U, failed.size()); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); // Server cert should verify. + scoped_refptr<X509Certificate> x509_server_cert = + x509_util::CreateX509CertificateFromCERTCertificate(certs[0].get()); + ASSERT_TRUE(x509_server_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; int error = - verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result); + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result); EXPECT_THAT(error, IsOk()); EXPECT_EQ(0U, verify_result.cert_status); @@ -802,23 +783,21 @@ intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::DISTRUSTED_SSL)); EXPECT_EQ( unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | CERTDB_TRUSTED_CLIENT_CA), - ca_certs[0]->os_cert_handle()->trust->sslFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - ca_certs[0]->os_cert_handle()->trust->emailFlags); - EXPECT_EQ(unsigned(CERTDB_VALID_CA), - ca_certs[0]->os_cert_handle()->trust->objectSigningFlags); + ca_certs[0]->trust->sslFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), ca_certs[0]->trust->emailFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), ca_certs[0]->trust->objectSigningFlags); EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD), - intermediate_certs[0]->os_cert_handle()->trust->sslFlags); + intermediate_certs[0]->trust->sslFlags); EXPECT_EQ(unsigned(CERTDB_VALID_CA), - intermediate_certs[0]->os_cert_handle()->trust->emailFlags); - EXPECT_EQ( - unsigned(CERTDB_VALID_CA), - intermediate_certs[0]->os_cert_handle()->trust->objectSigningFlags); + intermediate_certs[0]->trust->emailFlags); + EXPECT_EQ(unsigned(CERTDB_VALID_CA), + intermediate_certs[0]->trust->objectSigningFlags); // Server cert should fail to verify. CertVerifyResult verify_result2; - error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result2); + error = + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result2); EXPECT_THAT(error, IsError(ERR_CERT_REVOKED)); EXPECT_EQ(CERT_STATUS_REVOKED, verify_result2.cert_status); } @@ -832,9 +811,10 @@ NSSCertDatabase::ImportCertFailureList failed; - CertificateList intermediate_certs = CreateCertificateListFromFile( - GetTestCertsDirectory(), "2048-rsa-intermediate.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList intermediate_certs = + CreateCERTCertificateListFromFile(GetTestCertsDirectory(), + "2048-rsa-intermediate.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, intermediate_certs.size()); // Import Intermediate CA cert and trust it. @@ -842,25 +822,28 @@ NSSCertDatabase::TRUSTED_SSL, &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); // Import server cert with default trust. - EXPECT_TRUE(cert_db_->ImportServerCert( - certs, NSSCertDatabase::TRUST_DEFAULT, &failed)); + EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUST_DEFAULT, + &failed)); EXPECT_EQ(0U, failed.size()); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); // Server cert should verify. + scoped_refptr<X509Certificate> x509_server_cert = + x509_util::CreateX509CertificateFromCERTCertificate(certs[0].get()); + ASSERT_TRUE(x509_server_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; int error = - verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result); + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result); EXPECT_THAT(error, IsOk()); EXPECT_EQ(0U, verify_result.cert_status); @@ -870,8 +853,9 @@ // Server cert should fail to verify. CertVerifyResult verify_result2; - error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result2); + error = + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result2); EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID)); EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status); } @@ -885,7 +869,7 @@ NSSCertDatabase::ImportCertFailureList failed; - CertificateList ca_certs = CreateCertificateListFromFile( + ScopedCERTCertificateList ca_certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "2048-rsa-root.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, ca_certs.size()); @@ -895,9 +879,10 @@ &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList intermediate_certs = CreateCertificateListFromFile( - GetTestCertsDirectory(), "2048-rsa-intermediate.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList intermediate_certs = + CreateCERTCertificateListFromFile(GetTestCertsDirectory(), + "2048-rsa-intermediate.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, intermediate_certs.size()); // Import Intermediate CA cert and trust it. @@ -905,25 +890,28 @@ NSSCertDatabase::TRUSTED_SSL, &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); // Import server cert with default trust. - EXPECT_TRUE(cert_db_->ImportServerCert( - certs, NSSCertDatabase::TRUST_DEFAULT, &failed)); + EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUST_DEFAULT, + &failed)); EXPECT_EQ(0U, failed.size()); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); // Server cert should verify. + scoped_refptr<X509Certificate> x509_server_cert = + x509_util::CreateX509CertificateFromCERTCertificate(certs[0].get()); + ASSERT_TRUE(x509_server_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; int error = - verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result); + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result); EXPECT_THAT(error, IsOk()); EXPECT_EQ(0U, verify_result.cert_status); @@ -933,8 +921,9 @@ // Server cert should fail to verify. CertVerifyResult verify_result2; - error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result2); + error = + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result2); EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID)); EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status); } @@ -942,7 +931,7 @@ TEST_F(CertDatabaseNSSTest, TrustIntermediateCa4) { NSSCertDatabase::ImportCertFailureList failed; - CertificateList ca_certs = CreateCertificateListFromFile( + ScopedCERTCertificateList ca_certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "2048-rsa-root.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, ca_certs.size()); @@ -952,35 +941,39 @@ &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList intermediate_certs = CreateCertificateListFromFile( - GetTestCertsDirectory(), "2048-rsa-intermediate.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList intermediate_certs = + CreateCERTCertificateListFromFile(GetTestCertsDirectory(), + "2048-rsa-intermediate.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, intermediate_certs.size()); // Import Intermediate CA cert and distrust it. EXPECT_TRUE(cert_db_->ImportCACerts( - intermediate_certs, NSSCertDatabase::DISTRUSTED_SSL, &failed)); + intermediate_certs, NSSCertDatabase::DISTRUSTED_SSL, &failed)); EXPECT_EQ(0U, failed.size()); - CertificateList certs = CreateCertificateListFromFile( + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); // Import server cert with default trust. - EXPECT_TRUE(cert_db_->ImportServerCert( - certs, NSSCertDatabase::TRUST_DEFAULT, &failed)); + EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUST_DEFAULT, + &failed)); EXPECT_EQ(0U, failed.size()); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); // Server cert should not verify. + scoped_refptr<X509Certificate> x509_server_cert = + x509_util::CreateX509CertificateFromCERTCertificate(certs[0].get()); + ASSERT_TRUE(x509_server_cert); scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); int flags = 0; CertVerifyResult verify_result; int error = - verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result); + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result); EXPECT_THAT(error, IsError(ERR_CERT_REVOKED)); EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status); @@ -990,8 +983,9 @@ // Server cert should verify. CertVerifyResult verify_result2; - error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, - NULL, empty_cert_list_, &verify_result2); + error = + verify_proc->Verify(x509_server_cert.get(), "127.0.0.1", std::string(), + flags, NULL, empty_cert_list_, &verify_result2); EXPECT_THAT(error, IsOk()); EXPECT_EQ(0U, verify_result2.cert_status); } @@ -1000,43 +994,40 @@ // but overall distinct subject names, should succeed and generate a unique // nickname for the second certificate. TEST_F(CertDatabaseNSSTest, ImportDuplicateCommonName) { - CertificateList certs = - CreateCertificateListFromFile(GetTestCertsDirectory(), - "duplicate_cn_1.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "duplicate_cn_1.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs.size()); EXPECT_EQ(0U, ListCerts().size()); // Import server cert with default trust. NSSCertDatabase::ImportCertFailureList failed; - EXPECT_TRUE(cert_db_->ImportServerCert( - certs, NSSCertDatabase::TRUST_DEFAULT, &failed)); + EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUST_DEFAULT, + &failed)); EXPECT_EQ(0U, failed.size()); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); - CertificateList new_certs = ListCerts(); + ScopedCERTCertificateList new_certs = ListCerts(); ASSERT_EQ(1U, new_certs.size()); // Now attempt to import a different certificate with the same common name. - CertificateList certs2 = - CreateCertificateListFromFile(GetTestCertsDirectory(), - "duplicate_cn_2.pem", - X509Certificate::FORMAT_AUTO); + ScopedCERTCertificateList certs2 = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "duplicate_cn_2.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs2.size()); // Import server cert with default trust. - EXPECT_TRUE(cert_db_->ImportServerCert( - certs2, NSSCertDatabase::TRUST_DEFAULT, &failed)); + EXPECT_TRUE(cert_db_->ImportServerCert(certs2, NSSCertDatabase::TRUST_DEFAULT, + &failed)); EXPECT_EQ(0U, failed.size()); EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, cert_db_->GetCertTrust(certs2[0].get(), SERVER_CERT)); new_certs = ListCerts(); ASSERT_EQ(2U, new_certs.size()); - EXPECT_STRNE(new_certs[0]->os_cert_handle()->nickname, - new_certs[1]->os_cert_handle()->nickname); + EXPECT_STRNE(new_certs[0]->nickname, new_certs[1]->nickname); } } // namespace net
diff --git a/net/cert/nss_profile_filter_chromeos.cc b/net/cert/nss_profile_filter_chromeos.cc index ebde973..a119fed 100644 --- a/net/cert/nss_profile_filter_chromeos.cc +++ b/net/cert/nss_profile_filter_chromeos.cc
@@ -144,8 +144,8 @@ : filter_(filter) {} bool NSSProfileFilterChromeOS::CertNotAllowedForProfilePredicate::operator()( - const scoped_refptr<X509Certificate>& cert) const { - return !filter_.IsCertAllowed(cert->os_cert_handle()); + const ScopedCERTCertificate& cert) const { + return !filter_.IsCertAllowed(cert.get()); } NSSProfileFilterChromeOS::ModuleNotAllowedForProfilePredicate::
diff --git a/net/cert/nss_profile_filter_chromeos.h b/net/cert/nss_profile_filter_chromeos.h index 20bcf5bf..2538099 100644 --- a/net/cert/nss_profile_filter_chromeos.h +++ b/net/cert/nss_profile_filter_chromeos.h
@@ -10,11 +10,10 @@ #include "base/memory/ref_counted.h" #include "crypto/scoped_nss_types.h" #include "net/base/net_export.h" +#include "net/cert/scoped_nss_types.h" namespace net { -class X509Certificate; - // On ChromeOS each user has separate NSS databases, which are loaded // simultaneously when multiple users are logged in at the same time. NSS // doesn't have built-in support to partition databases into separate groups, so @@ -43,11 +42,12 @@ bool IsModuleAllowed(PK11SlotInfo* slot) const; bool IsCertAllowed(CERTCertificate* cert) const; + // TODO(mattm): remove these predicates and use labmdas instead. class CertNotAllowedForProfilePredicate { public: explicit CertNotAllowedForProfilePredicate( const NSSProfileFilterChromeOS& filter); - bool operator()(const scoped_refptr<X509Certificate>& cert) const; + bool operator()(const ScopedCERTCertificate& cert) const; private: const NSSProfileFilterChromeOS& filter_;
diff --git a/net/cert/nss_profile_filter_chromeos_unittest.cc b/net/cert/nss_profile_filter_chromeos_unittest.cc index 01d5ed3..3301916 100644 --- a/net/cert/nss_profile_filter_chromeos_unittest.cc +++ b/net/cert/nss_profile_filter_chromeos_unittest.cc
@@ -16,6 +16,7 @@ #include "crypto/scoped_test_nss_chromeos_user.h" #include "crypto/scoped_test_nss_db.h" #include "net/base/hash_value.h" +#include "net/cert/x509_util_nss.h" #include "net/test/cert_test_util.h" #include "net/test/test_data_directory.h" #include "testing/gtest/include/gtest/gtest.h" @@ -40,30 +41,23 @@ return crypto::ScopedPK11Slot(); } -CertificateList ListCertsInSlot(PK11SlotInfo* slot) { - CertificateList result; +ScopedCERTCertificateList ListCertsInSlot(PK11SlotInfo* slot) { + ScopedCERTCertificateList result; CERTCertList* cert_list = PK11_ListCertsInSlot(slot); for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); !CERT_LIST_END(node, cert_list); node = CERT_LIST_NEXT(node)) { - scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( - node->cert, X509Certificate::OSCertHandles()); - if (!cert) { - ADD_FAILURE() << "X509Certificate::CreateFromHandle failed"; - continue; - } - result.push_back(cert); + result.push_back(x509_util::DupCERTCertificate(node->cert)); } CERT_DestroyCertList(cert_list); // Sort the result so that test comparisons can be deterministic. std::sort( result.begin(), result.end(), - [](const scoped_refptr<X509Certificate>& lhs, - const scoped_refptr<X509Certificate>& rhs) { + [](const ScopedCERTCertificate& lhs, const ScopedCERTCertificate& rhs) { return SHA256HashValueLessThan()( - X509Certificate::CalculateFingerprint256(lhs->os_cert_handle()), - X509Certificate::CalculateFingerprint256(rhs->os_cert_handle())); + x509_util::CalculateFingerprint256(lhs.get()), + x509_util::CalculateFingerprint256(rhs.get())); }); return result; } @@ -104,9 +98,9 @@ std::move(private_slot_2), crypto::ScopedPK11Slot() /* no system slot */); - certs_ = CreateCertificateListFromFile(GetTestCertsDirectory(), - "root_ca_cert.pem", - X509Certificate::FORMAT_AUTO); + certs_ = CreateCERTCertificateListFromFile(GetTestCertsDirectory(), + "root_ca_cert.pem", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs_.size()); } @@ -115,7 +109,7 @@ } protected: - CertificateList certs_; + ScopedCERTCertificateList certs_; crypto::ScopedTestNSSDB system_slot_user_; crypto::ScopedTestNSSChromeOSUser user_1_; crypto::ScopedTestNSSChromeOSUser user_2_; @@ -126,13 +120,11 @@ }; TEST_F(NSSProfileFilterChromeOSTest, TempCertNotAllowed) { - EXPECT_EQ(NULL, certs_[0]->os_cert_handle()->slot); - EXPECT_FALSE( - no_slots_profile_filter_.IsCertAllowed(certs_[0]->os_cert_handle())); - EXPECT_FALSE(profile_filter_1_.IsCertAllowed(certs_[0]->os_cert_handle())); - EXPECT_FALSE( - profile_filter_1_copy_.IsCertAllowed(certs_[0]->os_cert_handle())); - EXPECT_FALSE(profile_filter_2_.IsCertAllowed(certs_[0]->os_cert_handle())); + EXPECT_EQ(NULL, certs_[0]->slot); + EXPECT_FALSE(no_slots_profile_filter_.IsCertAllowed(certs_[0].get())); + EXPECT_FALSE(profile_filter_1_.IsCertAllowed(certs_[0].get())); + EXPECT_FALSE(profile_filter_1_copy_.IsCertAllowed(certs_[0].get())); + EXPECT_FALSE(profile_filter_2_.IsCertAllowed(certs_[0].get())); } TEST_F(NSSProfileFilterChromeOSTest, InternalSlotAllowed) { @@ -160,14 +152,12 @@ EXPECT_TRUE(profile_filter_1_copy_.IsModuleAllowed(root_certs_slot.get())); EXPECT_TRUE(profile_filter_2_.IsModuleAllowed(root_certs_slot.get())); - CertificateList root_certs(ListCertsInSlot(root_certs_slot.get())); + ScopedCERTCertificateList root_certs(ListCertsInSlot(root_certs_slot.get())); ASSERT_FALSE(root_certs.empty()); - EXPECT_TRUE( - no_slots_profile_filter_.IsCertAllowed(root_certs[0]->os_cert_handle())); - EXPECT_TRUE(profile_filter_1_.IsCertAllowed(root_certs[0]->os_cert_handle())); - EXPECT_TRUE( - profile_filter_1_copy_.IsCertAllowed(root_certs[0]->os_cert_handle())); - EXPECT_TRUE(profile_filter_2_.IsCertAllowed(root_certs[0]->os_cert_handle())); + EXPECT_TRUE(no_slots_profile_filter_.IsCertAllowed(root_certs[0].get())); + EXPECT_TRUE(profile_filter_1_.IsCertAllowed(root_certs[0].get())); + EXPECT_TRUE(profile_filter_1_copy_.IsCertAllowed(root_certs[0].get())); + EXPECT_TRUE(profile_filter_2_.IsCertAllowed(root_certs[0].get())); } TEST_F(NSSProfileFilterChromeOSTest, SoftwareSlots) { @@ -179,56 +169,42 @@ crypto::GetPublicSlotForChromeOSUser(user_2_.username_hash())); ASSERT_TRUE(slot_2); - scoped_refptr<X509Certificate> cert_1 = certs_[0]; - CertificateList certs_2 = CreateCertificateListFromFile( + CERTCertificate* cert_1 = certs_[0].get(); + ScopedCERTCertificateList certs_2 = CreateCERTCertificateListFromFile( GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, certs_2.size()); - scoped_refptr<X509Certificate> cert_2 = certs_2[0]; - CertificateList system_certs = - CreateCertificateListFromFile(GetTestCertsDirectory(), - "mit.davidben.der", - X509Certificate::FORMAT_AUTO); + CERTCertificate* cert_2 = certs_2[0].get(); + ScopedCERTCertificateList system_certs = CreateCERTCertificateListFromFile( + GetTestCertsDirectory(), "mit.davidben.der", + X509Certificate::FORMAT_AUTO); ASSERT_EQ(1U, system_certs.size()); - scoped_refptr<X509Certificate> system_cert = system_certs[0]; + CERTCertificate* system_cert = system_certs[0].get(); ASSERT_EQ(SECSuccess, - PK11_ImportCert(slot_1.get(), - cert_1->os_cert_handle(), - CK_INVALID_HANDLE, - "cert1", + PK11_ImportCert(slot_1.get(), cert_1, CK_INVALID_HANDLE, "cert1", PR_FALSE /* includeTrust (unused) */)); ASSERT_EQ(SECSuccess, - PK11_ImportCert(slot_2.get(), - cert_2->os_cert_handle(), - CK_INVALID_HANDLE, - "cert2", + PK11_ImportCert(slot_2.get(), cert_2, CK_INVALID_HANDLE, "cert2", PR_FALSE /* includeTrust (unused) */)); - ASSERT_EQ(SECSuccess, - PK11_ImportCert(system_slot.get(), - system_cert->os_cert_handle(), - CK_INVALID_HANDLE, - "systemcert", - PR_FALSE /* includeTrust (unused) */)); + ASSERT_EQ(SECSuccess, PK11_ImportCert(system_slot.get(), system_cert, + CK_INVALID_HANDLE, "systemcert", + PR_FALSE /* includeTrust (unused) */)); - EXPECT_FALSE( - no_slots_profile_filter_.IsCertAllowed(cert_1->os_cert_handle())); - EXPECT_FALSE( - no_slots_profile_filter_.IsCertAllowed(cert_2->os_cert_handle())); - EXPECT_FALSE( - no_slots_profile_filter_.IsCertAllowed(system_cert->os_cert_handle())); + EXPECT_FALSE(no_slots_profile_filter_.IsCertAllowed(cert_1)); + EXPECT_FALSE(no_slots_profile_filter_.IsCertAllowed(cert_2)); + EXPECT_FALSE(no_slots_profile_filter_.IsCertAllowed(system_cert)); - EXPECT_TRUE(profile_filter_1_.IsCertAllowed(cert_1->os_cert_handle())); - EXPECT_TRUE(profile_filter_1_copy_.IsCertAllowed(cert_1->os_cert_handle())); - EXPECT_FALSE(profile_filter_1_.IsCertAllowed(cert_2->os_cert_handle())); - EXPECT_FALSE(profile_filter_1_copy_.IsCertAllowed(cert_2->os_cert_handle())); - EXPECT_TRUE(profile_filter_1_.IsCertAllowed(system_cert->os_cert_handle())); - EXPECT_TRUE( - profile_filter_1_copy_.IsCertAllowed(system_cert->os_cert_handle())); + EXPECT_TRUE(profile_filter_1_.IsCertAllowed(cert_1)); + EXPECT_TRUE(profile_filter_1_copy_.IsCertAllowed(cert_1)); + EXPECT_FALSE(profile_filter_1_.IsCertAllowed(cert_2)); + EXPECT_FALSE(profile_filter_1_copy_.IsCertAllowed(cert_2)); + EXPECT_TRUE(profile_filter_1_.IsCertAllowed(system_cert)); + EXPECT_TRUE(profile_filter_1_copy_.IsCertAllowed(system_cert)); - EXPECT_FALSE(profile_filter_2_.IsCertAllowed(cert_1->os_cert_handle())); - EXPECT_TRUE(profile_filter_2_.IsCertAllowed(cert_2->os_cert_handle())); - EXPECT_FALSE(profile_filter_2_.IsCertAllowed(system_cert->os_cert_handle())); + EXPECT_FALSE(profile_filter_2_.IsCertAllowed(cert_1)); + EXPECT_TRUE(profile_filter_2_.IsCertAllowed(cert_2)); + EXPECT_FALSE(profile_filter_2_.IsCertAllowed(system_cert)); } } // namespace net
diff --git a/net/cert/test_root_certs.h b/net/cert/test_root_certs.h index 2a8276ca..c6127fb 100644 --- a/net/cert/test_root_certs.h +++ b/net/cert/test_root_certs.h
@@ -10,6 +10,7 @@ #include "base/memory/ref_counted.h" #include "build/build_config.h" #include "net/base/net_export.h" +#include "net/cert/internal/trust_store_in_memory.h" #if defined(USE_NSS_CERTS) #include <cert.h> @@ -82,6 +83,8 @@ // engine is appropriate. The caller is responsible for freeing the // returned HCERTCHAINENGINE. HCERTCHAINENGINE GetChainEngine() const; +#elif defined(OS_FUCHSIA) + TrustStore* test_trust_store() { return &test_trust_store_; } #endif private: @@ -126,11 +129,13 @@ #elif defined(OS_MACOSX) base::ScopedCFTypeRef<CFMutableArrayRef> temporary_roots_; bool allow_system_trust_; +#elif defined(OS_FUCHSIA) + TrustStoreInMemory test_trust_store_; #endif #if defined(OS_WIN) || defined(OS_ANDROID) || defined(OS_FUCHSIA) // True if there are no temporarily trusted root certificates. - bool empty_; + bool empty_ = true; #endif DISALLOW_COPY_AND_ASSIGN(TestRootCerts);
diff --git a/net/cert/test_root_certs_fuchsia.cc b/net/cert/test_root_certs_fuchsia.cc index d71647fb..b0bd830 100644 --- a/net/cert/test_root_certs_fuchsia.cc +++ b/net/cert/test_root_certs_fuchsia.cc
@@ -6,19 +6,30 @@ #include "base/location.h" #include "base/logging.h" +#include "net/cert/internal/cert_errors.h" +#include "net/cert/internal/parsed_certificate.h" #include "net/cert/x509_certificate.h" +#include "third_party/boringssl/src/include/openssl/pool.h" namespace net { bool TestRootCerts::Add(X509Certificate* certificate) { - // TODO(fuchsia): Implement this. - NOTIMPLEMENTED(); - return false; + CertErrors errors; + auto parsed = ParsedCertificate::Create( + bssl::UniquePtr<CRYPTO_BUFFER>( + X509Certificate::DupOSCertHandle(certificate->os_cert_handle())), + ParseCertificateOptions(), &errors); + if (!parsed) { + LOG(ERROR) << "Failed to parse DER certificate: " << errors.ToDebugString(); + return false; + } + test_trust_store_.AddTrustAnchor(parsed); + empty_ = false; + return true; } void TestRootCerts::Clear() { - // TODO(fuchsia): Implement this. - NOTIMPLEMENTED(); + test_trust_store_.Clear(); empty_ = true; }
diff --git a/net/cert/x509_certificate_nss.cc b/net/cert/x509_certificate_nss.cc index 0d38dac..3ab486fc5 100644 --- a/net/cert/x509_certificate_nss.cc +++ b/net/cert/x509_certificate_nss.cc
@@ -354,17 +354,7 @@ // static SHA256HashValue X509Certificate::CalculateFingerprint256(OSCertHandle cert) { - SHA256HashValue sha256; - memset(sha256.data, 0, sizeof(sha256.data)); - - DCHECK(NULL != cert->derCert.data); - DCHECK_NE(0U, cert->derCert.len); - - SECStatus rv = HASH_HashBuf( - HASH_AlgSHA256, sha256.data, cert->derCert.data, cert->derCert.len); - DCHECK_EQ(SECSuccess, rv); - - return sha256; + return x509_util::CalculateFingerprint256(cert); } // static
diff --git a/net/cert/x509_util_nss.cc b/net/cert/x509_util_nss.cc index 711364b..50cf746 100644 --- a/net/cert/x509_util_nss.cc +++ b/net/cert/x509_util_nss.cc
@@ -11,6 +11,7 @@ #include <pk11pub.h> #include <prerror.h> #include <secder.h> +#include <sechash.h> #include <secmod.h> #include <secport.h> #include <string.h> @@ -274,6 +275,20 @@ cert, std::vector<CERTCertificate*>()); } +CertificateList CreateX509CertificateListFromCERTCertificates( + const ScopedCERTCertificateList& certs) { + CertificateList result; + result.reserve(certs.size()); + for (const ScopedCERTCertificate& cert : certs) { + scoped_refptr<X509Certificate> x509_cert( + CreateX509CertificateFromCERTCertificate(cert.get())); + if (!x509_cert) + return {}; + result.push_back(std::move(x509_cert)); + } + return result; +} + bool GetDEREncoded(CERTCertificate* cert, std::string* der_encoded) { if (!cert || !cert->derCert.len) return false; @@ -385,6 +400,20 @@ return std::string(); } +SHA256HashValue CalculateFingerprint256(CERTCertificate* cert) { + SHA256HashValue sha256; + memset(sha256.data, 0, sizeof(sha256.data)); + + DCHECK(cert->derCert.data); + DCHECK_NE(0U, cert->derCert.len); + + SECStatus rv = HASH_HashBuf(HASH_AlgSHA256, sha256.data, cert->derCert.data, + cert->derCert.len); + DCHECK_EQ(SECSuccess, rv); + + return sha256; +} + } // namespace x509_util } // namespace net
diff --git a/net/cert/x509_util_nss.h b/net/cert/x509_util_nss.h index 8e05cdc..fe950d8b 100644 --- a/net/cert/x509_util_nss.h +++ b/net/cert/x509_util_nss.h
@@ -68,6 +68,11 @@ NET_EXPORT scoped_refptr<X509Certificate> CreateX509CertificateFromCERTCertificate(CERTCertificate* cert); +// Creates an X509Certificate for each element in |certs|. +// Returns an empty list on failure. +NET_EXPORT CertificateList CreateX509CertificateListFromCERTCertificates( + const ScopedCERTCertificateList& certs); + // Obtains the DER encoded certificate data for |cert|. On success, returns // true and writes the DER encoded certificate to |*der_encoded|. NET_EXPORT bool GetDEREncoded(CERTCertificate* cert, std::string* der_encoded); @@ -111,6 +116,10 @@ // This mirrors net::CertPrincipal::GetDisplayName. NET_EXPORT std::string GetCERTNameDisplayName(CERTName* name); +// Calculates the SHA-256 fingerprint of the certificate. Returns an empty +// (all zero) fingerprint on failure. +NET_EXPORT SHA256HashValue CalculateFingerprint256(CERTCertificate* cert); + } // namespace x509_util } // namespace net
diff --git a/net/cert/x509_util_nss_unittest.cc b/net/cert/x509_util_nss_unittest.cc index 5a2b56e..96154514 100644 --- a/net/cert/x509_util_nss_unittest.cc +++ b/net/cert/x509_util_nss_unittest.cc
@@ -213,6 +213,34 @@ BytesForNSSCert(nss_cert2.get())); } +TEST(X509UtilNSSTest, CreateX509CertificateListFromCERTCertificates) { + ScopedCERTCertificate nss_cert(x509_util::CreateCERTCertificateFromBytes( + google_der, arraysize(google_der))); + ASSERT_TRUE(nss_cert); + ScopedCERTCertificate nss_cert2(x509_util::CreateCERTCertificateFromBytes( + webkit_der, arraysize(webkit_der))); + ASSERT_TRUE(nss_cert2); + ScopedCERTCertificateList nss_certs; + nss_certs.push_back(std::move(nss_cert)); + nss_certs.push_back(std::move(nss_cert2)); + + CertificateList x509_certs = + x509_util::CreateX509CertificateListFromCERTCertificates(nss_certs); + ASSERT_EQ(2U, x509_certs.size()); + + EXPECT_EQ(BytesForNSSCert(nss_certs[0].get()), + BytesForX509Cert(x509_certs[0].get())); + EXPECT_EQ(BytesForNSSCert(nss_certs[1].get()), + BytesForX509Cert(x509_certs[1].get())); +} + +TEST(X509UtilNSSTest, CreateX509CertificateListFromCERTCertificates_EmptyList) { + ScopedCERTCertificateList nss_certs; + CertificateList x509_certs = + x509_util::CreateX509CertificateListFromCERTCertificates(nss_certs); + ASSERT_EQ(0U, x509_certs.size()); +} + TEST(X509UtilNSSTest, GetDEREncoded) { ScopedCERTCertificate google_cert(x509_util::CreateCERTCertificateFromBytes( google_der, arraysize(google_der))); @@ -293,4 +321,18 @@ EXPECT_EQ("santest@ad.corp.example.com", upn_names[0]); } +TEST(X509UtilNSSTest, CalculateFingerprint256) { + static const SHA256HashValue google_fingerprint = { + {0x21, 0xaf, 0x58, 0x74, 0xea, 0x6b, 0xad, 0xbd, 0xe4, 0xb3, 0xb1, + 0xaa, 0x53, 0x32, 0x80, 0x8f, 0xbf, 0x8a, 0x24, 0x7d, 0x98, 0xec, + 0x7f, 0x77, 0x49, 0x38, 0x42, 0x81, 0x26, 0x7f, 0xed, 0x38}}; + + ScopedCERTCertificate google_cert(x509_util::CreateCERTCertificateFromBytes( + google_der, arraysize(google_der))); + ASSERT_TRUE(google_cert); + + EXPECT_EQ(google_fingerprint, + x509_util::CalculateFingerprint256(google_cert.get())); +} + } // namespace net
diff --git a/net/http/failing_http_transaction_factory.cc b/net/http/failing_http_transaction_factory.cc index 18c757fd..d6202bf 100644 --- a/net/http/failing_http_transaction_factory.cc +++ b/net/http/failing_http_transaction_factory.cc
@@ -71,6 +71,7 @@ int ResumeNetworkStart() override; void GetConnectionAttempts(ConnectionAttempts* out) const override; void SetRequestHeadersCallback(RequestHeadersCallback) override {} + void SetResponseHeadersCallback(ResponseHeadersCallback) override {} private: Error error_;
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc index 1439c700..8912d2e 100644 --- a/net/http/http_cache_transaction.cc +++ b/net/http/http_cache_transaction.cc
@@ -555,6 +555,12 @@ request_headers_callback_ = std::move(callback); } +void HttpCache::Transaction::SetResponseHeadersCallback( + ResponseHeadersCallback callback) { + DCHECK(!network_trans_); + response_headers_callback_ = std::move(callback); +} + int HttpCache::Transaction::ResumeNetworkStart() { if (network_trans_) return network_trans_->ResumeNetworkStart(); @@ -1501,6 +1507,7 @@ network_trans_->SetBeforeNetworkStartCallback(before_network_start_callback_); network_trans_->SetBeforeHeadersSentCallback(before_headers_sent_callback_); network_trans_->SetRequestHeadersCallback(request_headers_callback_); + network_trans_->SetResponseHeadersCallback(response_headers_callback_); // Old load timing information, if any, is now obsolete. old_network_trans_load_timing_.reset();
diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h index 6357334..8c709a754 100644 --- a/net/http/http_cache_transaction.h +++ b/net/http/http_cache_transaction.h
@@ -169,7 +169,8 @@ const BeforeNetworkStartCallback& callback) override; void SetBeforeHeadersSentCallback( const BeforeHeadersSentCallback& callback) override; - void SetRequestHeadersCallback(RequestHeadersCallback) override; + void SetRequestHeadersCallback(RequestHeadersCallback callback) override; + void SetResponseHeadersCallback(ResponseHeadersCallback callback) override; int ResumeNetworkStart() override; void GetConnectionAttempts(ConnectionAttempts* out) const override; @@ -569,6 +570,7 @@ BeforeNetworkStartCallback before_network_start_callback_; BeforeHeadersSentCallback before_headers_sent_callback_; RequestHeadersCallback request_headers_callback_; + ResponseHeadersCallback response_headers_callback_; // True if the Transaction is currently processing the DoLoop. bool in_do_loop_;
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index 4f0deafa4d..2290f32 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc
@@ -457,6 +457,12 @@ request_headers_callback_ = std::move(callback); } +void HttpNetworkTransaction::SetResponseHeadersCallback( + ResponseHeadersCallback callback) { + DCHECK(!stream_); + response_headers_callback_ = std::move(callback); +} + int HttpNetworkTransaction::ResumeNetworkStart() { DCHECK_EQ(next_state_, STATE_CREATE_STREAM); return DoLoop(OK); @@ -1280,6 +1286,8 @@ net_log_.AddEvent( NetLogEventType::HTTP_TRANSACTION_READ_RESPONSE_HEADERS, base::Bind(&HttpResponseHeaders::NetLogCallback, response_.headers)); + if (response_headers_callback_) + response_headers_callback_.Run(response_.headers); if (response_.headers->GetHttpVersion() < HttpVersion(1, 0)) { // HTTP/0.9 doesn't support the PUT method, so lack of response headers
diff --git a/net/http/http_network_transaction.h b/net/http/http_network_transaction.h index 735e3d2..866b5a2 100644 --- a/net/http/http_network_transaction.h +++ b/net/http/http_network_transaction.h
@@ -90,7 +90,8 @@ const BeforeNetworkStartCallback& callback) override; void SetBeforeHeadersSentCallback( const BeforeHeadersSentCallback& callback) override; - void SetRequestHeadersCallback(RequestHeadersCallback) override; + void SetRequestHeadersCallback(RequestHeadersCallback callback) override; + void SetResponseHeadersCallback(ResponseHeadersCallback callback) override; int ResumeNetworkStart() override; @@ -398,6 +399,7 @@ BeforeNetworkStartCallback before_network_start_callback_; BeforeHeadersSentCallback before_headers_sent_callback_; RequestHeadersCallback request_headers_callback_; + ResponseHeadersCallback response_headers_callback_; ConnectionAttempts connection_attempts_; IPEndPoint remote_endpoint_;
diff --git a/net/http/http_response_headers.h b/net/http/http_response_headers.h index ea27a47..839dd75d8 100644 --- a/net/http/http_response_headers.h +++ b/net/http/http_response_headers.h
@@ -390,6 +390,9 @@ DISALLOW_COPY_AND_ASSIGN(HttpResponseHeaders); }; +using ResponseHeadersCallback = + base::Callback<void(scoped_refptr<const HttpResponseHeaders>)>; + } // namespace net #endif // NET_HTTP_HTTP_RESPONSE_HEADERS_H_
diff --git a/net/http/http_transaction.h b/net/http/http_transaction.h index 28fe77e..a921206 100644 --- a/net/http/http_transaction.h +++ b/net/http/http_transaction.h
@@ -14,6 +14,7 @@ #include "net/base/request_priority.h" #include "net/base/upload_progress.h" #include "net/http/http_raw_request_headers.h" +#include "net/http/http_response_headers.h" #include "net/socket/connection_attempts.h" #include "net/websockets/websocket_handshake_stream_base.h" @@ -193,7 +194,8 @@ virtual void SetBeforeHeadersSentCallback( const BeforeHeadersSentCallback& callback) = 0; - virtual void SetRequestHeadersCallback(RequestHeadersCallback) = 0; + virtual void SetRequestHeadersCallback(RequestHeadersCallback callback) = 0; + virtual void SetResponseHeadersCallback(ResponseHeadersCallback callback) = 0; // Resumes the transaction after being deferred. virtual int ResumeNetworkStart() = 0;
diff --git a/net/http/http_transaction_test_util.h b/net/http/http_transaction_test_util.h index 419719a..bc834575 100644 --- a/net/http/http_transaction_test_util.h +++ b/net/http/http_transaction_test_util.h
@@ -238,6 +238,7 @@ const BeforeHeadersSentCallback& callback) override; void SetRequestHeadersCallback(RequestHeadersCallback callback) override {} + void SetResponseHeadersCallback(ResponseHeadersCallback) override {} int ResumeNetworkStart() override;
diff --git a/net/http/http_util.cc b/net/http/http_util.cc index 95ba606..98abf96 100644 --- a/net/http/http_util.cc +++ b/net/http/http_util.cc
@@ -738,12 +738,8 @@ return disassembled_headers; } -// TODO(jungshik): 1. If the list is 'fr-CA,fr-FR,en,de', we have to add -// 'fr' after 'fr-CA' with the same q-value as 'fr-CA' because -// web servers, in general, do not fall back to 'fr' and may end up picking -// 'en' which has a lower preference than 'fr-CA' and 'fr-FR'. -// 2. This function assumes that the input is a comma separated list -// without any whitespace. As long as it comes from the preference and +// TODO(jungshik): This function assumes that the input is a comma separated +// list without any whitespace. As long as it comes from the preference and // a user does not manually edit the preference file, it's the case. Still, // we may have to make it more robust. std::string HttpUtil::GenerateAcceptLanguageHeader( @@ -751,7 +747,7 @@ // We use integers for qvalue and qvalue decrement that are 10 times // larger than actual values to avoid a problem with comparing // two floating point numbers. - const unsigned int kQvalueDecrement10 = 2; + const unsigned int kQvalueDecrement10 = 1; unsigned int qvalue10 = 10; base::StringTokenizer t(raw_language_list, ","); std::string lang_list_with_q;
diff --git a/net/http/http_util_unittest.cc b/net/http/http_util_unittest.cc index f56f48e..d0b78023 100644 --- a/net/http/http_util_unittest.cc +++ b/net/http/http_util_unittest.cc
@@ -709,11 +709,19 @@ } TEST(HttpUtilTest, GenerateAcceptLanguageHeader) { - EXPECT_EQ(std::string("en-US,fr;q=0.8,de;q=0.6"), - HttpUtil::GenerateAcceptLanguageHeader("en-US,fr,de")); - EXPECT_EQ(std::string("en-US,fr;q=0.8,de;q=0.6,ko;q=0.4,zh-CN;q=0.2," - "ja;q=0.2"), - HttpUtil::GenerateAcceptLanguageHeader("en-US,fr,de,ko,zh-CN,ja")); + std::string header = HttpUtil::GenerateAcceptLanguageHeader(""); + EXPECT_TRUE(header.empty()); + + header = HttpUtil::GenerateAcceptLanguageHeader("es"); + EXPECT_EQ(std::string("es"), header); + + header = HttpUtil::GenerateAcceptLanguageHeader("en-US,fr,de"); + EXPECT_EQ(std::string("en-US,fr;q=0.9,de;q=0.8"), header); + + header = HttpUtil::GenerateAcceptLanguageHeader("en-US,fr,de,ko,zh-CN,ja"); + EXPECT_EQ( + std::string("en-US,fr;q=0.9,de;q=0.8,ko;q=0.7,zh-CN;q=0.6,ja;q=0.5"), + header); } // HttpResponseHeadersTest.GetMimeType also tests ParseContentType.
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json index f8c3d5b..4349812 100644 --- a/net/http/transport_security_state_static.json +++ b/net/http/transport_security_state_static.json
@@ -7277,7 +7277,6 @@ { "name": "kjaermaxi.me", "include_subdomains": true, "mode": "force-https" }, { "name": "kleinerarchitekturfuehrer.de", "include_subdomains": true, "mode": "force-https" }, { "name": "klicktojob.de", "include_subdomains": true, "mode": "force-https" }, - { "name": "kmartin.io", "include_subdomains": true, "mode": "force-https" }, { "name": "kmkz.jp", "include_subdomains": true, "mode": "force-https" }, { "name": "kojima-life.co.jp", "include_subdomains": true, "mode": "force-https" }, { "name": "kolmann.eu", "include_subdomains": true, "mode": "force-https" }, @@ -23064,7 +23063,6 @@ { "name": "tulsameetingroom.com", "include_subdomains": true, "mode": "force-https" }, { "name": "ugo.ninja", "include_subdomains": true, "mode": "force-https" }, { "name": "timeauction.hk", "include_subdomains": true, "mode": "force-https" }, - { "name": "tendertime.jp", "include_subdomains": true, "mode": "force-https" }, { "name": "tremoureux.fr", "include_subdomains": true, "mode": "force-https" }, { "name": "topanlage.de", "include_subdomains": true, "mode": "force-https" }, { "name": "ultimate-garcinia-plus.com", "include_subdomains": true, "mode": "force-https" }, @@ -29662,7 +29660,6 @@ { "name": "epistas.de", "include_subdomains": true, "mode": "force-https" }, { "name": "etienne.cc", "include_subdomains": true, "mode": "force-https" }, { "name": "epossystems.co.uk", "include_subdomains": true, "mode": "force-https" }, - { "name": "eternalabyss.ml", "include_subdomains": true, "mode": "force-https" }, { "name": "echoworld.ch", "include_subdomains": true, "mode": "force-https" }, { "name": "ethiobaba.com", "include_subdomains": true, "mode": "force-https" }, { "name": "ethicsburg.gov", "include_subdomains": true, "mode": "force-https" }, @@ -34745,6 +34742,273 @@ { "name": "xiaoyu.net", "include_subdomains": true, "mode": "force-https" }, { "name": "welcome-tahiti.com", "include_subdomains": true, "mode": "force-https" }, { "name": "westcentenaryscouts.org.au", "include_subdomains": true, "mode": "force-https" }, + { "name": "aiforsocialmedia.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "digitalrights.center", "include_subdomains": true, "mode": "force-https" }, + { "name": "dalaran.city", "include_subdomains": true, "mode": "force-https" }, + { "name": "changecopyright.ru", "include_subdomains": true, "mode": "force-https" }, + { "name": "albertathome.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "developermail.io", "include_subdomains": true, "mode": "force-https" }, + { "name": "dheart.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "chriscowley.me.uk", "include_subdomains": true, "mode": "force-https" }, + { "name": "consuwijzer.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "directtwo.solutions", "include_subdomains": true, "mode": "force-https" }, + { "name": "bluecards.eu", "include_subdomains": true, "mode": "force-https" }, + { "name": "eternalabyss.int.eu.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "famososnaweb.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "fastwebsites.com.br", "include_subdomains": true, "mode": "force-https" }, + { "name": "backpacken.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "flikmsg.co", "include_subdomains": true, "mode": "force-https" }, + { "name": "figshare.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "corningcu.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "77778522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522n.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "agrarking.de", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522r.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522t.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522c.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "3338522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "13318522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "codingfromhell.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "99998522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522g.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522v.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "foneo.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522j.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "betsonlinefree.com.au", "include_subdomains": true, "mode": "force-https" }, + { "name": "blockstream.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "freeblog.me", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522x.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "futurezone.at", "include_subdomains": true, "mode": "force-https" }, + { "name": "forro.info", "include_subdomains": true, "mode": "force-https" }, + { "name": "exe-boss.tech", "include_subdomains": true, "mode": "force-https" }, + { "name": "forsec.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "garycwaite.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "angryroute.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "bpaste.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "cabforum.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "gwhois.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "freejeremy.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "fuskator.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "bioespuna.eu", "include_subdomains": true, "mode": "force-https" }, + { "name": "harrypottereditor.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "ilikfreshweedstores.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "eminhuseynov.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "hj.rs", "include_subdomains": true, "mode": "force-https" }, + { "name": "casadowifi.com.br", "include_subdomains": true, "mode": "force-https" }, + { "name": "doenjoylife.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "barprive.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "injust.cf", "include_subdomains": true, "mode": "force-https" }, + { "name": "chrisself.xyz", "include_subdomains": true, "mode": "force-https" }, + { "name": "injust.ga", "include_subdomains": true, "mode": "force-https" }, + { "name": "artschmidtoptical.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "injust.ml", "include_subdomains": true, "mode": "force-https" }, + { "name": "injust.tk", "include_subdomains": true, "mode": "force-https" }, + { "name": "graetnew.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "boel073.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "freebarrettbrown.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "flyingpackets.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "ind.ie", "include_subdomains": true, "mode": "force-https" }, + { "name": "homesfordinner.ca", "include_subdomains": true, "mode": "force-https" }, + { "name": "baobaobooks.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "eyesonly.cc", "include_subdomains": true, "mode": "force-https" }, + { "name": "balancenaturalhealthclinic.ca", "include_subdomains": true, "mode": "force-https" }, + { "name": "groklearning.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "intune.life", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522m.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "ius.io", "include_subdomains": true, "mode": "force-https" }, + { "name": "eonet.cc", "include_subdomains": true, "mode": "force-https" }, + { "name": "freeassangenow.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "27728522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "dbpmedia.se", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522q.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522b.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "ipleak.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "jaccblog.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "geteckeld.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522u.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522y.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "get-link.info", "include_subdomains": true, "mode": "force-https" }, + { "name": "asec01.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "44448522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "lucidoccult.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "docupet.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "huzu.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "33338522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "cronometer.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "bibliomarkt.ch", "include_subdomains": true, "mode": "force-https" }, + { "name": "freelauri.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "berry.cat", "include_subdomains": true, "mode": "force-https" }, + { "name": "gigolodavid.be", "include_subdomains": true, "mode": "force-https" }, + { "name": "einsteinathome.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "loanaway.ca", "include_subdomains": true, "mode": "force-https" }, + { "name": "frebib.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "freesnowden.is", "include_subdomains": true, "mode": "force-https" }, + { "name": "latecnosfera.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "55558522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "miscreant.me", "include_subdomains": true, "mode": "force-https" }, + { "name": "demo9.ovh", "include_subdomains": true, "mode": "force-https" }, + { "name": "lnhequipmentltd.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "matildajaneclothing.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "geeklan.co.uk", "include_subdomains": true, "mode": "force-https" }, + { "name": "liberapay.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "meetmygoods.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "hup.hu", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522cn.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "lifecism.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "learninglaw.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "cyberduck.io", "include_subdomains": true, "mode": "force-https" }, + { "name": "66668522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522d.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "fl0333.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "lovelens.ch", "include_subdomains": true, "mode": "force-https" }, + { "name": "fkfev.de", "include_subdomains": true, "mode": "force-https" }, + { "name": "pivotaltracker.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "mindleaking.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "22228522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "lovelens.li", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522w.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "jabjab.de", "include_subdomains": true, "mode": "force-https" }, + { "name": "juku-wing.jp", "include_subdomains": true, "mode": "force-https" }, + { "name": "fl0888.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522e.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "distribuidorveterinario.es", "include_subdomains": true, "mode": "force-https" }, + { "name": "flc111.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "miticobikes.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "quanyin.eu.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "litsovet.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "49948522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "loveislandgames.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "redivis.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "phpartners.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522f.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "jailbreakingisnotacrime.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "hostingsolutions.cz", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522k.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "novelabs.de", "include_subdomains": true, "mode": "force-https" }, + { "name": "mkhsoft.eu", "include_subdomains": true, "mode": "force-https" }, + { "name": "really.ai", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522top.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "opengg.me", "include_subdomains": true, "mode": "force-https" }, + { "name": "causae-fincas.es", "include_subdomains": true, "mode": "force-https" }, + { "name": "dingcc.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "mikakalevi.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "ohm2013.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "68868522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "nielshoogenhout.be", "include_subdomains": true, "mode": "force-https" }, + { "name": "really.io", "include_subdomains": true, "mode": "force-https" }, + { "name": "psycho-lobby.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "nielshoogenhout.eu", "include_subdomains": true, "mode": "force-https" }, + { "name": "naturtint.co.uk", "include_subdomains": true, "mode": "force-https" }, + { "name": "opunch.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "noodweer.be", "include_subdomains": true, "mode": "force-https" }, + { "name": "pristal.eu", "include_subdomains": true, "mode": "force-https" }, + { "name": "leuenhagen.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "pascalmathis.me", "include_subdomains": true, "mode": "force-https" }, + { "name": "sujoydhar.in", "include_subdomains": true, "mode": "force-https" }, + { "name": "online-results.dk", "include_subdomains": true, "mode": "force-https" }, + { "name": "photo-paysage.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "get-refer.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "hb8522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "prototypefund.de", "include_subdomains": true, "mode": "force-https" }, + { "name": "page-builders.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "mrs-labo.jp", "include_subdomains": true, "mode": "force-https" }, + { "name": "screenparadigm.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "searchbrothers.co.il", "include_subdomains": true, "mode": "force-https" }, + { "name": "littleservice.cn", "include_subdomains": true, "mode": "force-https" }, + { "name": "dnplegal.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "privatebin.info", "include_subdomains": true, "mode": "force-https" }, + { "name": "ppmathis.ch", "include_subdomains": true, "mode": "force-https" }, + { "name": "purikore.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "pascalmathis.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "seattleprivacy.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "tokobungadijambi.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "555fl.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "okeeferanch.ca", "include_subdomains": true, "mode": "force-https" }, + { "name": "sundaycooks.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "naganithin.me", "include_subdomains": true, "mode": "force-https" }, + { "name": "uptodateinteriors.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "vescudero.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "steampress.io", "include_subdomains": true, "mode": "force-https" }, + { "name": "kanzlei-sixt.de", "include_subdomains": true, "mode": "force-https" }, + { "name": "insinuator.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "inheritestate.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "fl0111.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "00002.am", "include_subdomains": true, "mode": "force-https" }, + { "name": "tweaktown.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "simplesamlphp.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "yubico.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "tablescraps.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "ytpak.pk", "include_subdomains": true, "mode": "force-https" }, + { "name": "sahkotyot.eu", "include_subdomains": true, "mode": "force-https" }, + { "name": "starwins.co.uk", "include_subdomains": true, "mode": "force-https" }, + { "name": "nfls.io", "include_subdomains": true, "mode": "force-https" }, + { "name": "spingenie.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "mx5international.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "publicintelligence.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522z.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522s.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "ztytian.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "fl0555.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "nsm.stat.no", "include_subdomains": true, "mode": "force-https" }, + { "name": "spontex.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "enoou.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "0fl.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "ripmixmake.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "00001.am", "include_subdomains": true, "mode": "force-https" }, + { "name": "pascalmathis.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "zqwqz.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522p.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "scrumbleship.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "sidpod.ru", "include_subdomains": true, "mode": "force-https" }, + { "name": "saintaardvarkthecarpeted.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "fl0999.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "4448522.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "kaptadata.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "techpro.net.br", "include_subdomains": true, "mode": "force-https" }, + { "name": "s2member.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "slingooriginals.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "fuli.am", "include_subdomains": true, "mode": "force-https" }, + { "name": "shinko-osaka.jp", "include_subdomains": true, "mode": "force-https" }, + { "name": "gamingrealms.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "seavancouver.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522h.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "smspodmena.ru", "include_subdomains": true, "mode": "force-https" }, + { "name": "tektuts.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "welovejobs.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "qelectrotech.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "provitec.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "searchbrothers.it", "include_subdomains": true, "mode": "force-https" }, + { "name": "secumail.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "world-education-association.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "promohunt.ru", "include_subdomains": true, "mode": "force-https" }, + { "name": "8522.am", "include_subdomains": true, "mode": "force-https" }, + { "name": "snapserv.net", "include_subdomains": true, "mode": "force-https" }, + { "name": "limeres.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "v4s.ro", "include_subdomains": true, "mode": "force-https" }, + { "name": "injust.gq", "include_subdomains": true, "mode": "force-https" }, + { "name": "nielshoogenhout.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "verduccies.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "wapking.live", "include_subdomains": true, "mode": "force-https" }, + { "name": "nova.live", "include_subdomains": true, "mode": "force-https" }, + { "name": "fl0777.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "princeofwhales.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "szczot3k.pl", "include_subdomains": true, "mode": "force-https" }, + { "name": "thedevilwearswibra.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "jungleculture.co.za", "include_subdomains": true, "mode": "force-https" }, + { "name": "www-8522.am", "include_subdomains": true, "mode": "force-https" }, + { "name": "savecrypto.org", "include_subdomains": true, "mode": "force-https" }, + { "name": "ppmathis.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "rickmartensen.nl", "include_subdomains": true, "mode": "force-https" }, + { "name": "vigoxatelier.tech", "include_subdomains": true, "mode": "force-https" }, + { "name": "sproing.ca", "include_subdomains": true, "mode": "force-https" }, + { "name": "webveloper.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "sintesysglobal.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "soli.cafe", "include_subdomains": true, "mode": "force-https" }, + { "name": "limereslaw.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "rdns.cc", "include_subdomains": true, "mode": "force-https" }, + { "name": "veslosada.com", "include_subdomains": true, "mode": "force-https" }, + { "name": "www-8522.com", "include_subdomains": true, "mode": "force-https" }, // END OF BULK ENTRIES // Manual additions and changes in Chrome 51 or later that do not belong in a
diff --git a/net/nqe/external_estimate_provider.h b/net/nqe/external_estimate_provider.h index c75c05e..cad69a0 100644 --- a/net/nqe/external_estimate_provider.h +++ b/net/nqe/external_estimate_provider.h
@@ -19,15 +19,12 @@ public: class NET_EXPORT UpdatedEstimateDelegate { public: - // Will be called with updated RTT, downstream and upstream throughput (both - // in kilobits per second) when an updated estimate is available. If |rtt| - // is unavailable, it is set to base::TimeDelta(). If - // |downstream_throughput_kbps| or |upstream_throughput_kbps| are - // unavailble, they are set to -1, respectively. + // Will be called with updated RTT, and downstream throughput (in kilobits + // per second) when an updated estimate is available. If the estimate is + // unavailable, it is set to a negative value. virtual void OnUpdatedEstimateAvailable( const base::TimeDelta& rtt, - int32_t downstream_throughput_kbps, - int32_t upstream_throughput_kbps) = 0; + int32_t downstream_throughput_kbps) = 0; protected: UpdatedEstimateDelegate() {} @@ -40,27 +37,6 @@ ExternalEstimateProvider() {} virtual ~ExternalEstimateProvider() {} - // Returns true if the estimated RTT duration is available, and sets |rtt| - // to the estimate. - virtual bool GetRTT(base::TimeDelta* rtt) const = 0; - - // Returns true if the estimated downstream throughput (in Kbps -- Kilobits - // per second) is available, and sets |downstream_throughput_kbps| to the - // estimate. - virtual bool GetDownstreamThroughputKbps( - int32_t* downstream_throughput_kbps) const = 0; - - // Returns true if the estimated upstream throughput (in Kbps -- Kilobits - // per second) is available, and sets |upstream_throughput_kbps| to the - // estimate. - virtual bool GetUpstreamThroughputKbps( - int32_t* upstream_throughput_kbps) const = 0; - - // Returns true if the time since network quality was last updated is - // available, and sets |time_since_last_update| to that value. - virtual bool GetTimeSinceLastUpdate( - base::TimeDelta* time_since_last_update) const = 0; - // Sets delegate that is notified when an updated estimate is available. // |delegate| should outlive |ExternalEstimateProvider|. virtual void SetUpdatedEstimateDelegate(
diff --git a/net/nqe/network_quality_estimator.cc b/net/nqe/network_quality_estimator.cc index e092fa1..15aa235 100644 --- a/net/nqe/network_quality_estimator.cc +++ b/net/nqe/network_quality_estimator.cc
@@ -1565,8 +1565,7 @@ void NetworkQualityEstimator::OnUpdatedEstimateAvailable( const base::TimeDelta& rtt, - int32_t downstream_throughput_kbps, - int32_t upstream_throughput_kbps) { + int32_t downstream_throughput_kbps) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(external_estimate_provider_);
diff --git a/net/nqe/network_quality_estimator.h b/net/nqe/network_quality_estimator.h index eef60570..af987fe 100644 --- a/net/nqe/network_quality_estimator.h +++ b/net/nqe/network_quality_estimator.h
@@ -231,8 +231,7 @@ // ExternalEstimateProvider::UpdatedEstimateObserver implementation. void OnUpdatedEstimateAvailable(const base::TimeDelta& rtt, - int32_t downstream_throughput_kbps, - int32_t upstream_throughput_kbps) override; + int32_t downstream_throughput_kbps) override; // Returns true if median RTT at the HTTP layer is available and sets |rtt| // to the median of RTT observations since |start_time|.
diff --git a/net/nqe/network_quality_estimator_unittest.cc b/net/nqe/network_quality_estimator_unittest.cc index ca1531df..c7bcdce7 100644 --- a/net/nqe/network_quality_estimator_unittest.cc +++ b/net/nqe/network_quality_estimator_unittest.cc
@@ -1317,30 +1317,6 @@ InvalidExternalEstimateProvider() : update_count_(0) {} ~InvalidExternalEstimateProvider() override {} - bool GetRTT(base::TimeDelta* rtt) const override { - DCHECK(rtt); - return false; - } - - bool GetDownstreamThroughputKbps( - int32_t* downstream_throughput_kbps) const override { - DCHECK(downstream_throughput_kbps); - return false; - } - - bool GetUpstreamThroughputKbps( - int32_t* upstream_throughput_kbps) const override { - // NetworkQualityEstimator does not support upstream throughput. - ADD_FAILURE(); - return false; - } - - bool GetTimeSinceLastUpdate( - base::TimeDelta* time_since_last_update) const override { - NOTREACHED(); - return false; - } - void SetUpdatedEstimateDelegate(UpdatedEstimateDelegate* delegate) override {} void Update() const override { update_count_++; } @@ -1397,29 +1373,6 @@ update_count_(0) {} ~TestExternalEstimateProvider() override {} - bool GetRTT(base::TimeDelta* rtt) const override { - NOTREACHED(); - return true; - } - - bool GetDownstreamThroughputKbps( - int32_t* downstream_throughput_kbps) const override { - NOTREACHED(); - return true; - } - - bool GetUpstreamThroughputKbps( - int32_t* upstream_throughput_kbps) const override { - NOTREACHED(); - return false; - } - - bool GetTimeSinceLastUpdate( - base::TimeDelta* time_since_last_update) const override { - NOTREACHED(); - return true; - } - void SetUpdatedEstimateDelegate(UpdatedEstimateDelegate* delegate) override { delegate_ = delegate; } @@ -1432,8 +1385,7 @@ update_count_++; if (!should_notify_delegate_) return; - delegate_->OnUpdatedEstimateAvailable(rtt_, downstream_throughput_kbps_, - -1); + delegate_->OnUpdatedEstimateAvailable(rtt_, downstream_throughput_kbps_); } size_t update_count() const { return update_count_; }
diff --git a/net/ssl/client_cert_store_nss.cc b/net/ssl/client_cert_store_nss.cc index 35888c8..7dd1828 100644 --- a/net/ssl/client_cert_store_nss.cc +++ b/net/ssl/client_cert_store_nss.cc
@@ -167,7 +167,7 @@ password_delegate, const SSLCertRequestInfo* request) { ClientCertIdentityList selected_identities; - GetPlatformCertsOnWorkerThread(std::move(password_delegate), + GetPlatformCertsOnWorkerThread(std::move(password_delegate), CertFilter(), &selected_identities); FilterCertsOnWorkerThread(&selected_identities, *request); return selected_identities; @@ -177,6 +177,7 @@ void ClientCertStoreNSS::GetPlatformCertsOnWorkerThread( scoped_refptr<crypto::CryptoModuleBlockingPasswordDelegate> password_delegate, + const CertFilter& cert_filter, ClientCertIdentityList* identities) { CERTCertList* found_certs = CERT_FindUserCertsByUsage(CERT_GetDefaultCertDB(), certUsageSSLClient, @@ -187,6 +188,8 @@ } for (CERTCertListNode* node = CERT_LIST_HEAD(found_certs); !CERT_LIST_END(node, found_certs); node = CERT_LIST_NEXT(node)) { + if (!cert_filter.is_null() && !cert_filter.Run(node->cert)) + continue; scoped_refptr<X509Certificate> cert = x509_util::CreateX509CertificateFromCERTCertificate(node->cert); if (!cert) {
diff --git a/net/ssl/client_cert_store_nss.h b/net/ssl/client_cert_store_nss.h index 3f05267..93dbd9b 100644 --- a/net/ssl/client_cert_store_nss.h +++ b/net/ssl/client_cert_store_nss.h
@@ -13,6 +13,7 @@ #include "net/ssl/client_cert_store.h" typedef struct CERTCertListStr CERTCertList; +typedef struct CERTCertificateStr CERTCertificate; namespace crypto { class CryptoModuleBlockingPasswordDelegate; @@ -27,6 +28,8 @@ typedef base::Callback<crypto::CryptoModuleBlockingPasswordDelegate*( const HostPortPair& /* server */)> PasswordDelegateFactory; + using CertFilter = base::RepeatingCallback<bool(CERTCertificate*)>; + explicit ClientCertStoreNSS( const PasswordDelegateFactory& password_delegate_factory); ~ClientCertStoreNSS() override; @@ -43,11 +46,14 @@ const SSLCertRequestInfo& request); // Retrieves all client certificates that are stored by NSS and adds them to - // |identities|. |password_delegate| is used to unlock slots if required. + // |identities|. |password_delegate| is used to unlock slots if required. If + // |cert_filter| is not null, only certificates that it returns true on will + // be added. // Must be called from a worker thread. static void GetPlatformCertsOnWorkerThread( scoped_refptr<crypto::CryptoModuleBlockingPasswordDelegate> password_delegate, + const CertFilter& cert_filter, ClientCertIdentityList* identities); private:
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc index 79b1ba9..bf1a41db 100644 --- a/net/test/spawned_test_server/base_test_server.cc +++ b/net/test/spawned_test_server/base_test_server.cc
@@ -437,7 +437,8 @@ DCHECK(!certificates_dir_.empty()); } -bool BaseTestServer::ParseServerData(const std::string& server_data) { +bool BaseTestServer::SetAndParseServerData(const std::string& server_data, + int* port) { VLOG(1) << "Server data: " << server_data; base::JSONReader json_reader; std::unique_ptr<base::Value> value(json_reader.ReadToValue(server_data)); @@ -448,16 +449,14 @@ } server_data_.reset(static_cast<base::DictionaryValue*>(value.release())); - int port = 0; - if (!server_data_->GetInteger("port", &port)) { + if (!server_data_->GetInteger("port", port)) { LOG(ERROR) << "Could not find port value"; return false; } - if ((port <= 0) || (port > std::numeric_limits<uint16_t>::max())) { + if ((*port <= 0) || (*port > std::numeric_limits<uint16_t>::max())) { LOG(ERROR) << "Invalid port value: " << port; return false; } - host_port_pair_.set_port(port); return true; }
diff --git a/net/test/spawned_test_server/base_test_server.h b/net/test/spawned_test_server/base_test_server.h index 2f7cf10..fd44381ab 100644 --- a/net/test/spawned_test_server/base_test_server.h +++ b/net/test/spawned_test_server/base_test_server.h
@@ -371,9 +371,13 @@ void SetResourcePath(const base::FilePath& document_root, const base::FilePath& certificates_dir); - // Parses the server data read from the test server. Returns true - // on success. - bool ParseServerData(const std::string& server_data) WARN_UNUSED_RESULT; + // Parses the server data read from the test server and sets |server_data_|. + // *port is set to the port number specified in server_data. The port may be + // different from the local port set in |host_port_pair_|, specifically when + // using RemoteTestServer (which proxies connections from 127.0.0.1 to a + // different IP). Returns true on success. + bool SetAndParseServerData(const std::string& server_data, + int* port) WARN_UNUSED_RESULT; // Generates a DictionaryValue with the arguments for launching the external // Python test server. @@ -394,7 +398,9 @@ // Directory that contains the SSL certificates. base::FilePath certificates_dir_; - // Address the test server listens on. + // Address on which the tests should connect to the server. With + // RemoteTestServer it may be different from the address on which the server + // listens on. HostPortPair host_port_pair_; // Holds the data sent from the server (e.g., port number).
diff --git a/net/test/spawned_test_server/local_test_server_posix.cc b/net/test/spawned_test_server/local_test_server_posix.cc index 599e170..71fd803 100644 --- a/net/test/spawned_test_server/local_test_server_posix.cc +++ b/net/test/spawned_test_server/local_test_server_posix.cc
@@ -176,10 +176,12 @@ return false; } - if (!ParseServerData(server_data)) { + int port; + if (!SetAndParseServerData(server_data, &port)) { LOG(ERROR) << "Could not parse server_data: " << server_data; return false; } + SetPort(port); return true; }
diff --git a/net/test/spawned_test_server/local_test_server_win.cc b/net/test/spawned_test_server/local_test_server_win.cc index 4581d78..6d5517b9 100644 --- a/net/test/spawned_test_server/local_test_server_win.cc +++ b/net/test/spawned_test_server/local_test_server_win.cc
@@ -165,10 +165,12 @@ return false; } - if (!ParseServerData(server_data)) { + int port; + if (!SetAndParseServerData(server_data, &port)) { LOG(ERROR) << "Could not parse server_data: " << server_data; return false; } + SetPort(port); return true; }
diff --git a/net/test/spawned_test_server/remote_test_server.cc b/net/test/spawned_test_server/remote_test_server.cc index f000ff8..5bf7ed2a 100644 --- a/net/test/spawned_test_server/remote_test_server.cc +++ b/net/test/spawned_test_server/remote_test_server.cc
@@ -14,7 +14,6 @@ #include "base/files/file_util.h" #include "base/json/json_writer.h" #include "base/logging.h" -#include "base/memory/ptr_util.h" #include "base/path_service.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" @@ -22,6 +21,7 @@ #include "net/base/host_port_pair.h" #include "net/base/net_errors.h" #include "net/test/spawned_test_server/remote_test_server_config.h" +#include "net/test/spawned_test_server/remote_test_server_proxy.h" #include "net/test/spawned_test_server/spawner_communicator.h" #include "url/gurl.h" @@ -54,7 +54,7 @@ RemoteTestServer::RemoteTestServer(Type type, const base::FilePath& document_root) - : BaseTestServer(type) { + : BaseTestServer(type), io_thread_("RemoteTestServer IO Thread") { if (!Init(document_root)) NOTREACHED(); } @@ -62,7 +62,8 @@ RemoteTestServer::RemoteTestServer(Type type, const SSLOptions& ssl_options, const base::FilePath& document_root) - : BaseTestServer(type, ssl_options) { + : BaseTestServer(type, ssl_options), + io_thread_("RemoteTestServer IO Thread") { if (!Init(document_root)) NOTREACHED(); } @@ -75,8 +76,9 @@ if (spawner_communicator_.get()) return true; - spawner_communicator_ = - std::make_unique<SpawnerCommunicator>(RemoteTestServerConfig::Load()); + RemoteTestServerConfig config = RemoteTestServerConfig::Load(); + + spawner_communicator_ = std::make_unique<SpawnerCommunicator>(config); base::DictionaryValue arguments_dict; if (!GenerateArguments(&arguments_dict)) @@ -100,11 +102,23 @@ return false; // Parse server_data. - if (server_data.empty() || !ParseServerData(server_data)) { + int server_port; + if (server_data.empty() || + !SetAndParseServerData(server_data, &server_port)) { LOG(ERROR) << "Could not parse server_data: " << server_data; return false; } + // If the server is not on localhost then start a proxy on localhost to + // forward connections to the server. + if (config.address() != IPAddress::IPv4Localhost()) { + test_server_proxy_ = std::make_unique<RemoteTestServerProxy>( + IPEndPoint(config.address(), server_port), io_thread_.task_runner()); + SetPort(test_server_proxy_->local_port()); + } else { + SetPort(server_port); + } + return SetupWhenServerStarted(); } @@ -148,6 +162,10 @@ if (document_root.IsAbsolute()) return false; + bool thread_started = io_thread_.StartWithOptions( + base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); + CHECK(thread_started); + // Unlike LocalTestServer, RemoteTestServer passes relative paths to the test // server. The test server fails on empty strings in some configurations. base::FilePath fixed_root = document_root;
diff --git a/net/test/spawned_test_server/remote_test_server.h b/net/test/spawned_test_server/remote_test_server.h index db76a21..04dcdb4c 100644 --- a/net/test/spawned_test_server/remote_test_server.h +++ b/net/test/spawned_test_server/remote_test_server.h
@@ -8,11 +8,13 @@ #include <string> #include "base/macros.h" +#include "base/threading/thread.h" #include "net/test/spawned_test_server/base_test_server.h" namespace net { class SpawnerCommunicator; +class RemoteTestServerProxy; // The RemoteTestServer runs an external Python-based test server in another // machine that is different from the machine in which RemoteTestServer runs. @@ -51,10 +53,16 @@ private: bool Init(const base::FilePath& document_root); + // Thread used to run all IO activity in |test_server_proxy_|. + // TODO(sergeyu): Use it for |spawner_communicator_| as well. + base::Thread io_thread_; + // Helper to start and stop instances of the Python test server that runs on // the host machine. std::unique_ptr<SpawnerCommunicator> spawner_communicator_; + std::unique_ptr<RemoteTestServerProxy> test_server_proxy_; + DISALLOW_COPY_AND_ASSIGN(RemoteTestServer); };
diff --git a/net/test/spawned_test_server/remote_test_server_proxy.cc b/net/test/spawned_test_server/remote_test_server_proxy.cc new file mode 100644 index 0000000..70330cb --- /dev/null +++ b/net/test/spawned_test_server/remote_test_server_proxy.cc
@@ -0,0 +1,317 @@ +// 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 "net/test/spawned_test_server/remote_test_server_proxy.h" + +#include <memory> +#include <vector> + +#include "base/callback.h" +#include "base/memory/weak_ptr.h" +#include "base/single_thread_task_runner.h" +#include "base/synchronization/waitable_event.h" +#include "base/threading/thread_checker.h" +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" +#include "net/socket/stream_socket.h" +#include "net/socket/tcp_client_socket.h" +#include "net/socket/tcp_server_socket.h" + +namespace net { + +namespace { + +const int kBufferSize = 1024; + +// Helper that reads data from one socket and then forwards to another socket. +class SocketDataPump { + public: + SocketDataPump(StreamSocket* from_socket, + StreamSocket* to_socket, + base::OnceClosure on_done_callback) + : from_socket_(from_socket), + to_socket_(to_socket), + on_done_callback_(std::move(on_done_callback)) { + read_buffer_ = new IOBuffer(kBufferSize); + } + + ~SocketDataPump() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); } + + void Start() { Read(); } + + private: + void Read() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(!write_buffer_); + + int result = from_socket_->Read( + read_buffer_.get(), kBufferSize, + base::Bind(&SocketDataPump::HandleReadResult, base::Unretained(this))); + if (result != ERR_IO_PENDING) + HandleReadResult(result); + } + + void HandleReadResult(int result) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + if (result <= 0) { + std::move(on_done_callback_).Run(); + return; + } + + write_buffer_ = new DrainableIOBuffer(read_buffer_.get(), result); + Write(); + } + + void Write() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(write_buffer_); + + int result = to_socket_->Write( + write_buffer_.get(), write_buffer_->BytesRemaining(), + base::Bind(&SocketDataPump::HandleWriteResult, base::Unretained(this))); + if (result != ERR_IO_PENDING) + HandleWriteResult(result); + } + + void HandleWriteResult(int result) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + if (result <= 0) { + std::move(on_done_callback_).Run(); + return; + } + + write_buffer_->DidConsume(result); + if (write_buffer_->BytesRemaining()) { + Write(); + } else { + write_buffer_ = nullptr; + Read(); + } + } + + StreamSocket* from_socket_; + StreamSocket* to_socket_; + + scoped_refptr<IOBuffer> read_buffer_; + scoped_refptr<DrainableIOBuffer> write_buffer_; + + base::OnceClosure on_done_callback_; + + THREAD_CHECKER(thread_checker_); + + DISALLOW_COPY_AND_ASSIGN(SocketDataPump); +}; + +// ConnectionProxy is responsible for proxying one connection to a remote +// address. +class ConnectionProxy { + public: + explicit ConnectionProxy(std::unique_ptr<StreamSocket> local_socket); + ~ConnectionProxy(); + + void Start(const IPEndPoint& remote_address, + base::OnceClosure on_done_callback); + + private: + void Close(); + + void HandleConnectResult(const IPEndPoint& remote_address, int result); + + base::OnceClosure on_done_callback_; + + std::unique_ptr<StreamSocket> local_socket_; + std::unique_ptr<StreamSocket> remote_socket_; + + std::unique_ptr<SocketDataPump> incoming_pump_; + std::unique_ptr<SocketDataPump> outgoing_pump_; + + THREAD_CHECKER(thread_checker_); + + base::WeakPtrFactory<ConnectionProxy> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(ConnectionProxy); +}; + +ConnectionProxy::ConnectionProxy(std::unique_ptr<StreamSocket> local_socket) + : local_socket_(std::move(local_socket)), weak_factory_(this) {} + +ConnectionProxy::~ConnectionProxy() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); +} + +void ConnectionProxy::Start(const IPEndPoint& remote_address, + base::OnceClosure on_done_callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + on_done_callback_ = std::move(on_done_callback); + remote_socket_ = std::make_unique<TCPClientSocket>( + AddressList(remote_address), nullptr, nullptr, NetLogSource()); + int result = remote_socket_->Connect( + base::Bind(&ConnectionProxy::HandleConnectResult, base::Unretained(this), + remote_address)); + if (result != ERR_IO_PENDING) + HandleConnectResult(remote_address, result); +} + +void ConnectionProxy::HandleConnectResult(const IPEndPoint& remote_address, + int result) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(!incoming_pump_); + DCHECK(!outgoing_pump_); + + if (result < 0) { + LOG(ERROR) << "Connection to " << remote_address.ToString() + << " failed: " << ErrorToString(result); + Close(); + return; + } + + incoming_pump_ = std::make_unique<SocketDataPump>( + remote_socket_.get(), local_socket_.get(), + base::BindOnce(&ConnectionProxy::Close, base::Unretained(this))); + outgoing_pump_ = std::make_unique<SocketDataPump>( + local_socket_.get(), remote_socket_.get(), + base::BindOnce(&ConnectionProxy::Close, base::Unretained(this))); + + auto self = weak_factory_.GetWeakPtr(); + incoming_pump_->Start(); + if (!self) + return; + + outgoing_pump_->Start(); +} + +void ConnectionProxy::Close() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + local_socket_.reset(); + remote_socket_.reset(); + std::move(on_done_callback_).Run(); +} + +} // namespace + +// RemoteTestServerProxy implementation that runs on a background IO thread. +class RemoteTestServerProxy::Core { + public: + explicit Core(const IPEndPoint& remote_address); + ~Core(); + + void Start(base::WaitableEvent* started_event); + + uint16_t local_port() const { return local_port_; } + + private: + void DoAcceptLoop(); + void OnAcceptResult(int result); + void HandleAcceptResult(int result); + void OnConnectionClosed(ConnectionProxy* connection); + + IPEndPoint remote_address_; + + std::unique_ptr<TCPServerSocket> socket_; + + uint16_t local_port_; + std::vector<std::unique_ptr<ConnectionProxy>> connections_; + + std::unique_ptr<StreamSocket> accepted_socket_; + + DISALLOW_COPY_AND_ASSIGN(Core); +}; + +RemoteTestServerProxy::Core::Core(const IPEndPoint& remote_address) + : remote_address_(remote_address) {} + +void RemoteTestServerProxy::Core::Start(base::WaitableEvent* started_event) { + socket_ = std::make_unique<TCPServerSocket>(nullptr, net::NetLogSource()); + int result = socket_->Listen(IPEndPoint(IPAddress::IPv4Localhost(), 0), 5); + CHECK_EQ(result, OK); + + // Get local port number. + IPEndPoint address; + result = socket_->GetLocalAddress(&address); + CHECK_EQ(result, OK); + local_port_ = address.port(); + + DoAcceptLoop(); + + started_event->Signal(); +} + +RemoteTestServerProxy::Core::~Core() {} + +void RemoteTestServerProxy::Core::DoAcceptLoop() { + int result = OK; + while (result == OK) { + result = socket_->Accept( + &accepted_socket_, + base::Bind(&Core::OnAcceptResult, base::Unretained(this))); + if (result != ERR_IO_PENDING) + HandleAcceptResult(result); + } +} + +void RemoteTestServerProxy::Core::OnAcceptResult(int result) { + HandleAcceptResult(result); + if (result == OK) + DoAcceptLoop(); +} + +void RemoteTestServerProxy::Core::HandleAcceptResult(int result) { + DCHECK_NE(result, ERR_IO_PENDING); + + if (result < 0) { + LOG(ERROR) << "Error when accepting a connection: " + << ErrorToString(result); + return; + } + + std::unique_ptr<ConnectionProxy> connection_proxy = + std::make_unique<ConnectionProxy>(std::move(accepted_socket_)); + ConnectionProxy* connection_proxy_ptr = connection_proxy.get(); + connections_.push_back(std::move(connection_proxy)); + + // Start() may invoke the callback so it needs to be called after the + // connection is pushed to connections_. + connection_proxy_ptr->Start( + remote_address_, + base::BindOnce(&Core::OnConnectionClosed, base::Unretained(this), + connection_proxy_ptr)); +} + +void RemoteTestServerProxy::Core::OnConnectionClosed( + ConnectionProxy* connection) { + for (auto it = connections_.begin(); it != connections_.end(); ++it) { + if (it->get() == connection) { + connections_.erase(it); + return; + } + } + NOTREACHED(); +} + +RemoteTestServerProxy::RemoteTestServerProxy( + const IPEndPoint& remote_address, + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) + : io_task_runner_(io_task_runner), + core_(std::make_unique<Core>(remote_address)) { + base::WaitableEvent started_event( + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED); + io_task_runner_->PostTask( + FROM_HERE, + base::Bind(&Core::Start, base::Unretained(core_.get()), &started_event)); + started_event.Wait(); + + local_port_ = core_->local_port(); +} + +RemoteTestServerProxy::~RemoteTestServerProxy() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + io_task_runner_->DeleteSoon(FROM_HERE, core_.release()); +} + +} // namespace net
diff --git a/net/test/spawned_test_server/remote_test_server_proxy.h b/net/test/spawned_test_server/remote_test_server_proxy.h new file mode 100644 index 0000000..538fcea --- /dev/null +++ b/net/test/spawned_test_server/remote_test_server_proxy.h
@@ -0,0 +1,51 @@ +// 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 NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_PROXY_H_ +#define NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_PROXY_H_ + +#include <stdint.h> + +#include <memory> + +#include "base/memory/ref_counted.h" +#include "base/threading/thread_checker.h" + +namespace base { +class SingleThreadTaskRunner; +} // namespace base + +namespace net { + +class IPEndPoint; + +// RemoteTestServerProxy proxies TCP connection from localhost to a remote IP +// address. +class RemoteTestServerProxy { + public: + RemoteTestServerProxy( + const IPEndPoint& remote_address, + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner); + ~RemoteTestServerProxy(); + + uint16_t local_port() const { return local_port_; } + + private: + class Core; + + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; + + // Core implements the proxy functionality. It runs on |io_task_runner_|. + std::unique_ptr<Core> core_; + + uint16_t local_port_; + + THREAD_CHECKER(thread_checker_); + + DISALLOW_COPY_AND_ASSIGN(RemoteTestServerProxy); +}; + +} // namespace net + +#endif // NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_PROXY_H_
diff --git a/net/test/spawned_test_server/remote_test_server_proxy_unittests.cc b/net/test/spawned_test_server/remote_test_server_proxy_unittests.cc new file mode 100644 index 0000000..ddb623c --- /dev/null +++ b/net/test/spawned_test_server/remote_test_server_proxy_unittests.cc
@@ -0,0 +1,148 @@ +// 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 "net/test/spawned_test_server/remote_test_server_proxy.h" + +#include "base/message_loop/message_loop.h" +#include "base/threading/thread.h" +#include "net/base/io_buffer.h" +#include "net/base/test_completion_callback.h" +#include "net/socket/tcp_client_socket.h" +#include "net/socket/tcp_server_socket.h" +#include "net/test/gtest_util.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using net::test::IsOk; + +namespace net { + +class RemoteTestServerProxyTest : public testing::Test { + public: + RemoteTestServerProxyTest() : io_thread_("RemoteTestServer IO Thread") { + EXPECT_TRUE(io_thread_.StartWithOptions( + base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); + + listen_socket_ = + std::make_unique<TCPServerSocket>(nullptr, net::NetLogSource()); + int result = + listen_socket_->Listen(IPEndPoint(IPAddress::IPv4Localhost(), 0), 5); + EXPECT_THAT(result, IsOk()); + + // Get local address. + IPEndPoint address; + result = listen_socket_->GetLocalAddress(&address); + EXPECT_THAT(result, IsOk()); + + proxy_ = std::make_unique<RemoteTestServerProxy>(address, + io_thread_.task_runner()); + proxy_address_ = + IPEndPoint(IPAddress::IPv4Localhost(), proxy_->local_port()); + } + + void MakeConnection(std::unique_ptr<StreamSocket>* client_socket, + std::unique_ptr<StreamSocket>* server_socket) { + TestCompletionCallback connect_callback; + *client_socket = std::make_unique<TCPClientSocket>( + AddressList(proxy_address_), nullptr, nullptr, NetLogSource()); + int connect_result = (*client_socket)->Connect(connect_callback.callback()); + + TestCompletionCallback accept_callback; + int result = + listen_socket_->Accept(server_socket, accept_callback.callback()); + + ASSERT_THAT(connect_callback.GetResult(connect_result), IsOk()); + ASSERT_THAT(accept_callback.GetResult(result), IsOk()); + + EXPECT_TRUE((*server_socket)->IsConnected()); + EXPECT_TRUE((*client_socket)->IsConnected()); + } + + void SendAndReceiveData(StreamSocket* socket1, StreamSocket* socket2) { + // Send just one byte to ensure we will need only one Write() and only one + // Read(). + char test_message = '0'; + + scoped_refptr<IOBuffer> write_buffer = new IOBuffer(1); + *write_buffer->data() = test_message; + TestCompletionCallback write_callback; + int write_result = + socket1->Write(write_buffer.get(), 1, write_callback.callback()); + + scoped_refptr<IOBufferWithSize> read_buffer(new IOBufferWithSize(1024)); + TestCompletionCallback read_callback; + int read_result = socket2->Read(read_buffer.get(), read_buffer->size(), + read_callback.callback()); + + ASSERT_EQ(write_callback.GetResult(write_result), 1); + ASSERT_EQ(read_callback.GetResult(read_result), 1); + + EXPECT_EQ(test_message, *read_buffer->data()); + } + + void ExpectClosed(StreamSocket* socket) { + scoped_refptr<IOBufferWithSize> read_buffer(new IOBufferWithSize(1024)); + TestCompletionCallback read_callback; + int read_result = socket->Read(read_buffer.get(), read_buffer->size(), + read_callback.callback()); + + EXPECT_EQ(read_callback.GetResult(read_result), 0); + EXPECT_FALSE(socket->IsConnected()); + } + + protected: + base::Thread io_thread_; + + // Server socket that simulates testserver that RemoteTestServerProxy normally + // would connect to. + std::unique_ptr<TCPServerSocket> listen_socket_; + + std::unique_ptr<RemoteTestServerProxy> proxy_; + IPEndPoint proxy_address_; +}; + +TEST_F(RemoteTestServerProxyTest, SendAndReceive) { + std::unique_ptr<StreamSocket> client_socket; + std::unique_ptr<StreamSocket> server_socket; + MakeConnection(&client_socket, &server_socket); + SendAndReceiveData(client_socket.get(), server_socket.get()); + SendAndReceiveData(server_socket.get(), client_socket.get()); +} + +TEST_F(RemoteTestServerProxyTest, TwoConnections) { + std::unique_ptr<StreamSocket> client_socket1; + std::unique_ptr<StreamSocket> server_socket1; + MakeConnection(&client_socket1, &server_socket1); + + std::unique_ptr<StreamSocket> client_socket2; + std::unique_ptr<StreamSocket> server_socket2; + MakeConnection(&client_socket2, &server_socket2); + + SendAndReceiveData(client_socket1.get(), server_socket1.get()); + SendAndReceiveData(client_socket2.get(), server_socket2.get()); + SendAndReceiveData(server_socket1.get(), client_socket1.get()); + SendAndReceiveData(server_socket2.get(), client_socket2.get()); +} + +// Close socket on the server side and verify that it's closed on the client +// side. +TEST_F(RemoteTestServerProxyTest, DisconnectServer) { + std::unique_ptr<StreamSocket> client_socket; + std::unique_ptr<StreamSocket> server_socket; + MakeConnection(&client_socket, &server_socket); + server_socket.reset(); + ExpectClosed(client_socket.get()); +} + +// Close socket on the client side and verify that it's closed on the server +// side. +TEST_F(RemoteTestServerProxyTest, DisconnectClient) { + std::unique_ptr<StreamSocket> client_socket; + std::unique_ptr<StreamSocket> server_socket; + MakeConnection(&client_socket, &server_socket); + client_socket.reset(); + ExpectClosed(server_socket.get()); +} + +} // namespace net
diff --git a/net/third_party/mozilla_security_manager/nsNSSCertificateDB.cpp b/net/third_party/mozilla_security_manager/nsNSSCertificateDB.cpp index 1b6e394a..0afac87 100644 --- a/net/third_party/mozilla_security_manager/nsNSSCertificateDB.cpp +++ b/net/third_party/mozilla_security_manager/nsNSSCertificateDB.cpp
@@ -61,8 +61,8 @@ // Based on nsNSSCertificateDB::handleCACertDownload, minus the UI bits. bool ImportCACerts(PK11SlotInfo* slot, - const net::CertificateList& certificates, - net::X509Certificate* root, + const net::ScopedCERTCertificateList& certificates, + CERTCertificate* root, net::NSSCertDatabase::TrustBits trustBits, net::NSSCertDatabase::ImportCertFailureList* not_imported) { if (!slot || certificates.empty() || !root) @@ -72,31 +72,32 @@ // already and use that, but CERT_NewTempCertificate actually does that // itself, so we skip it here. - if (!CERT_IsCACert(root->os_cert_handle(), NULL)) { + if (!CERT_IsCACert(root, NULL)) { not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( - root, net::ERR_IMPORT_CA_CERT_NOT_CA)); - } else if (root->os_cert_handle()->isperm) { + net::x509_util::DupCERTCertificate(root), + net::ERR_IMPORT_CA_CERT_NOT_CA)); + } else if (root->isperm) { // Mozilla just returns here, but we continue in case there are other certs // in the list which aren't already imported. // TODO(mattm): should we set/add trust if it differs from the present // settings? not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( - root, net::ERR_IMPORT_CERT_ALREADY_EXISTS)); + net::x509_util::DupCERTCertificate(root), + net::ERR_IMPORT_CERT_ALREADY_EXISTS)); } else { // Mozilla uses CERT_AddTempCertToPerm, however it is privately exported, // and it doesn't take the slot as an argument either. Instead, we use // PK11_ImportCert and CERT_ChangeCertTrust. - SECStatus srv = - PK11_ImportCert(slot, root->os_cert_handle(), CK_INVALID_HANDLE, - net::x509_util::GetDefaultUniqueNickname( - root->os_cert_handle(), net::CA_CERT, slot) - .c_str(), - PR_FALSE /* includeTrust (unused) */); + SECStatus srv = PK11_ImportCert( + slot, root, CK_INVALID_HANDLE, + net::x509_util::GetDefaultUniqueNickname(root, net::CA_CERT, slot) + .c_str(), + PR_FALSE /* includeTrust (unused) */); if (srv != SECSuccess) { LOG(ERROR) << "PK11_ImportCert failed with error " << PORT_GetError(); return false; } - if (!SetCertTrust(root->os_cert_handle(), net::CA_CERT, trustBits)) + if (!SetCertTrust(root, net::CA_CERT, trustBits)) return false; } @@ -108,7 +109,7 @@ // |not_imported| result. So, we keep using our net::CertificateList and // filter it ourself. for (size_t i = 0; i < certificates.size(); i++) { - const scoped_refptr<net::X509Certificate>& cert = certificates[i]; + CERTCertificate* cert = certificates[i].get(); if (cert == root) { // we already processed that one continue; @@ -116,45 +117,47 @@ // Mozilla uses CERT_FilterCertListByUsage(certList, certUsageAnyCA, // PR_TRUE). Afaict, checking !CERT_IsCACert on each cert is equivalent. - if (!CERT_IsCACert(cert->os_cert_handle(), NULL)) { + if (!CERT_IsCACert(cert, NULL)) { not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( - cert, net::ERR_IMPORT_CA_CERT_NOT_CA)); + net::x509_util::DupCERTCertificate(cert), + net::ERR_IMPORT_CA_CERT_NOT_CA)); VLOG(1) << "skipping cert (non-ca)"; continue; } - if (cert->os_cert_handle()->isperm) { + if (cert->isperm) { not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( - cert, net::ERR_IMPORT_CERT_ALREADY_EXISTS)); + net::x509_util::DupCERTCertificate(cert), + net::ERR_IMPORT_CERT_ALREADY_EXISTS)); VLOG(1) << "skipping cert (perm)"; continue; } - if (CERT_VerifyCert(CERT_GetDefaultCertDB(), cert->os_cert_handle(), - PR_TRUE, certUsageVerifyCA, now, NULL, NULL) != SECSuccess) { + if (CERT_VerifyCert(CERT_GetDefaultCertDB(), cert, PR_TRUE, + certUsageVerifyCA, now, NULL, NULL) != SECSuccess) { // TODO(mattm): use better error code (map PORT_GetError to an appropriate // error value). (maybe make MapSecurityError or MapCertErrorToCertStatus // public.) not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( - cert, net::ERR_FAILED)); + net::x509_util::DupCERTCertificate(cert), net::ERR_FAILED)); VLOG(1) << "skipping cert (verify) " << PORT_GetError(); continue; } // Mozilla uses CERT_ImportCerts, which doesn't take a slot arg. We use // PK11_ImportCert instead. - SECStatus srv = - PK11_ImportCert(slot, cert->os_cert_handle(), CK_INVALID_HANDLE, - net::x509_util::GetDefaultUniqueNickname( - cert->os_cert_handle(), net::CA_CERT, slot) - .c_str(), - PR_FALSE /* includeTrust (unused) */); + SECStatus srv = PK11_ImportCert( + slot, cert, CK_INVALID_HANDLE, + net::x509_util::GetDefaultUniqueNickname(cert, net::CA_CERT, slot) + .c_str(), + PR_FALSE /* includeTrust (unused) */); if (srv != SECSuccess) { LOG(ERROR) << "PK11_ImportCert failed with error " << PORT_GetError(); // TODO(mattm): Should we bail or continue on error here? Mozilla doesn't // check error code at all. not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( - cert, net::ERR_IMPORT_CA_CERT_FAILED)); + net::x509_util::DupCERTCertificate(cert), + net::ERR_IMPORT_CA_CERT_FAILED)); } } @@ -165,32 +168,32 @@ // Based on nsNSSCertificateDB::ImportServerCertificate. bool ImportServerCert( PK11SlotInfo* slot, - const net::CertificateList& certificates, + const net::ScopedCERTCertificateList& certificates, net::NSSCertDatabase::TrustBits trustBits, net::NSSCertDatabase::ImportCertFailureList* not_imported) { if (!slot || certificates.empty()) return false; for (size_t i = 0; i < certificates.size(); ++i) { - const scoped_refptr<net::X509Certificate>& cert = certificates[i]; + CERTCertificate* cert = certificates[i].get(); // Mozilla uses CERT_ImportCerts, which doesn't take a slot arg. We use // PK11_ImportCert instead. - SECStatus srv = - PK11_ImportCert(slot, cert->os_cert_handle(), CK_INVALID_HANDLE, - net::x509_util::GetDefaultUniqueNickname( - cert->os_cert_handle(), net::SERVER_CERT, slot) - .c_str(), - PR_FALSE /* includeTrust (unused) */); + SECStatus srv = PK11_ImportCert( + slot, cert, CK_INVALID_HANDLE, + net::x509_util::GetDefaultUniqueNickname(cert, net::SERVER_CERT, slot) + .c_str(), + PR_FALSE /* includeTrust (unused) */); if (srv != SECSuccess) { LOG(ERROR) << "PK11_ImportCert failed with error " << PORT_GetError(); not_imported->push_back(net::NSSCertDatabase::ImportCertFailure( - cert, net::ERR_IMPORT_SERVER_CERT_FAILED)); + net::x509_util::DupCERTCertificate(cert), + net::ERR_IMPORT_SERVER_CERT_FAILED)); continue; } } - SetCertTrust(certificates[0]->os_cert_handle(), net::SERVER_CERT, trustBits); + SetCertTrust(certificates[0].get(), net::SERVER_CERT, trustBits); // TODO(mattm): Report SetCertTrust result? Putting in not_imported // wouldn't quite match up since it was imported... @@ -199,26 +202,23 @@ } // Based on nsNSSCertificateDB::ImportUserCertificate. -int ImportUserCert(const net::CertificateList& certificates) { - if (certificates.empty()) +int ImportUserCert(CERTCertificate* cert) { + if (!cert) return net::ERR_CERT_INVALID; - const scoped_refptr<net::X509Certificate>& cert = certificates[0]; CK_OBJECT_HANDLE key; - crypto::ScopedPK11Slot slot( - PK11_KeyForCertExists(cert->os_cert_handle(), &key, NULL)); + crypto::ScopedPK11Slot slot(PK11_KeyForCertExists(cert, &key, NULL)); if (!slot.get()) return net::ERR_NO_PRIVATE_KEY_FOR_CERT; // Mozilla uses CERT_ImportCerts, which doesn't take a slot arg. We use // PK11_ImportCert instead. - SECStatus srv = - PK11_ImportCert(slot.get(), cert->os_cert_handle(), key, - net::x509_util::GetDefaultUniqueNickname( - cert->os_cert_handle(), net::USER_CERT, slot.get()) - .c_str(), - PR_FALSE /* includeTrust (unused) */); + SECStatus srv = PK11_ImportCert( + slot.get(), cert, key, + net::x509_util::GetDefaultUniqueNickname(cert, net::USER_CERT, slot.get()) + .c_str(), + PR_FALSE /* includeTrust (unused) */); if (srv != SECSuccess) { LOG(ERROR) << "PK11_ImportCert failed with error " << PORT_GetError();
diff --git a/net/third_party/mozilla_security_manager/nsNSSCertificateDB.h b/net/third_party/mozilla_security_manager/nsNSSCertificateDB.h index 74673ad..26275c2 100644 --- a/net/third_party/mozilla_security_manager/nsNSSCertificateDB.h +++ b/net/third_party/mozilla_security_manager/nsNSSCertificateDB.h
@@ -43,29 +43,26 @@ #include "base/memory/ref_counted.h" #include "net/cert/nss_cert_database.h" +#include "net/cert/scoped_nss_types.h" typedef struct CERTCertificateStr CERTCertificate; typedef struct PK11SlotInfoStr PK11SlotInfo; -namespace net { -class X509Certificate; -typedef std::vector<scoped_refptr<X509Certificate> > CertificateList; -} // namespace net namespace mozilla_security_manager { bool ImportCACerts(PK11SlotInfo* slot, - const net::CertificateList& certificates, - net::X509Certificate* root, + const net::ScopedCERTCertificateList& certificates, + CERTCertificate* root, net::NSSCertDatabase::TrustBits trustBits, net::NSSCertDatabase::ImportCertFailureList* not_imported); bool ImportServerCert( PK11SlotInfo* slot, - const net::CertificateList& certificates, + const net::ScopedCERTCertificateList& certificates, net::NSSCertDatabase::TrustBits trustBits, net::NSSCertDatabase::ImportCertFailureList* not_imported); -int ImportUserCert(const net::CertificateList& certificates); +int ImportUserCert(CERTCertificate* cert); bool SetCertTrust(CERTCertificate* cert, net::CertType type,
diff --git a/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp b/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp index 3b607e1..3ed7590e 100644 --- a/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp +++ b/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp
@@ -47,7 +47,6 @@ #include "base/strings/string_util.h" #include "crypto/nss_util_internal.h" #include "net/base/net_errors.h" -#include "net/cert/x509_certificate.h" namespace mozilla_security_manager { @@ -145,15 +144,13 @@ } // Based on nsPKCS12Blob::ImportFromFileHelper. -int -nsPKCS12Blob_ImportHelper(const char* pkcs12_data, - size_t pkcs12_len, - const base::string16& password, - bool is_extractable, - bool try_zero_length_secitem, - PK11SlotInfo *slot, - net::CertificateList* imported_certs) -{ +int nsPKCS12Blob_ImportHelper(const char* pkcs12_data, + size_t pkcs12_len, + const base::string16& password, + bool is_extractable, + bool try_zero_length_secitem, + PK11SlotInfo* slot, + net::ScopedCERTCertificateList* imported_certs) { DCHECK(pkcs12_data); DCHECK(slot); int import_result = net::ERR_PKCS12_IMPORT_FAILED; @@ -212,37 +209,22 @@ if (decoder_item->type != SEC_OID_PKCS12_V1_CERT_BAG_ID) continue; - CERTCertificate* cert = PK11_FindCertFromDERCertItem( - slot, decoder_item->der, - NULL); // wincx + net::ScopedCERTCertificate cert( + PK11_FindCertFromDERCertItem(slot, decoder_item->der, + NULL)); // wincx if (!cert) { LOG(ERROR) << "Could not grab a handle to the certificate in the slot " << "from the corresponding PKCS#12 DER certificate."; continue; } - // Add the cert to the list - if (imported_certs) { - // Empty list of intermediates. - net::X509Certificate::OSCertHandles intermediates; - scoped_refptr<net::X509Certificate> x509_cert = - net::X509Certificate::CreateFromHandle(cert, intermediates); - if (x509_cert) - imported_certs->push_back(std::move(x509_cert)); - } - // Once we have determined that the imported certificate has an // associated private key too, only then can we mark the key as // non-extractable. - if (!decoder_item->hasKey) { - CERT_DestroyCertificate(cert); - continue; - } - // Iterate through all the imported PKCS12 items and mark any accompanying // private keys as non-extractable. - if (!is_extractable) { - SECKEYPrivateKey* privKey = PK11_FindPrivateKeyFromCert(slot, cert, + if (decoder_item->hasKey && !is_extractable) { + SECKEYPrivateKey* privKey = PK11_FindPrivateKeyFromCert(slot, cert.get(), NULL); // wincx if (privKey) { // Mark the private key as non-extractable. @@ -252,12 +234,15 @@ if (srv) { LOG(ERROR) << "Could not set CKA_EXTRACTABLE attribute on private " << "key."; - CERT_DestroyCertificate(cert); break; } } } - CERT_DestroyCertificate(cert); + + // Add the cert to the list + if (imported_certs) + imported_certs->push_back(std::move(cert)); + if (srv) goto finish; } import_result = net::OK; @@ -359,8 +344,7 @@ size_t pkcs12_len, const base::string16& password, bool is_extractable, - net::CertificateList* imported_certs) { - + net::ScopedCERTCertificateList* imported_certs) { int rv = nsPKCS12Blob_ImportHelper(pkcs12_data, pkcs12_len, password, is_extractable, false, slot, imported_certs); @@ -391,11 +375,9 @@ // mirror "slotToUse" behavior from PSM 1.x // verify the cert array to start off with? // set appropriate error codes -int -nsPKCS12Blob_Export(std::string* output, - const net::CertificateList& certs, - const base::string16& password) -{ +int nsPKCS12Blob_Export(std::string* output, + const net::ScopedCERTCertificateList& certs, + const base::string16& password) { int return_count = 0; SECStatus srv = SECSuccess; SEC_PKCS12ExportContext *ecx = NULL; @@ -423,7 +405,7 @@ for (size_t i=0; i<certs.size(); i++) { DCHECK(certs[i].get()); - CERTCertificate* nssCert = certs[i]->os_cert_handle(); + CERTCertificate* nssCert = certs[i].get(); DCHECK(nssCert); // We only allow certificate and private key extraction if the corresponding
diff --git a/net/third_party/mozilla_security_manager/nsPKCS12Blob.h b/net/third_party/mozilla_security_manager/nsPKCS12Blob.h index 1a87c060..352ccf6 100644 --- a/net/third_party/mozilla_security_manager/nsPKCS12Blob.h +++ b/net/third_party/mozilla_security_manager/nsPKCS12Blob.h
@@ -45,13 +45,10 @@ #include "base/memory/ref_counted.h" #include "base/strings/string16.h" +#include "net/cert/scoped_nss_types.h" typedef struct CERTCertificateStr CERTCertificate; typedef struct PK11SlotInfoStr PK11SlotInfo; -namespace net { -class X509Certificate; -typedef std::vector<scoped_refptr<X509Certificate> > CertificateList; -} // namespace net namespace mozilla_security_manager { @@ -67,13 +64,13 @@ size_t pkcs12_len, const base::string16& password, bool is_extractable, - net::CertificateList* imported_certs); + net::ScopedCERTCertificateList* imported_certs); // Export the given certificates into a PKCS#12 blob, storing into output. // Returns the number of certificates exported. // TODO(mattm): provide better error return status? int nsPKCS12Blob_Export(std::string* output, - const net::CertificateList& certs, + const net::ScopedCERTCertificateList& certs, const base::string16& password); } // namespace mozilla_security_manager
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc index 9950182..a66d192b 100644 --- a/net/url_request/url_request.cc +++ b/net/url_request/url_request.cc
@@ -28,7 +28,6 @@ #include "net/base/network_change_notifier.h" #include "net/base/network_delegate.h" #include "net/base/upload_data_stream.h" -#include "net/http/http_response_headers.h" #include "net/http/http_util.h" #include "net/log/net_log.h" #include "net/log/net_log_event_type.h" @@ -646,6 +645,7 @@ job_->SetExtraRequestHeaders(extra_request_headers_); job_->SetPriority(priority_); job_->SetRequestHeadersCallback(request_headers_callback_); + job_->SetResponseHeadersCallback(response_headers_callback_); if (upload_data_stream_.get()) job_->SetUpload(upload_data_stream_.get()); @@ -950,6 +950,13 @@ if (redirect_info.new_method != method_) { // TODO(davidben): This logic still needs to be replicated at the consumers. + if (method_ == "POST") { + // If being switched from POST, must remove Origin header. + // TODO(jww): This is Origin header removal is probably layering violation + // and should be refactored into //content. See https://crbug.com/471397. + // See also: https://crbug.com/760487 + extra_request_headers_.RemoveHeader(HttpRequestHeaders::kOrigin); + } // The inclusion of a multipart Content-Type header can cause problems with // some // servers: @@ -1213,6 +1220,12 @@ request_headers_callback_ = std::move(callback); } +void URLRequest::SetResponseHeadersCallback(ResponseHeadersCallback callback) { + DCHECK(!job_.get()); + DCHECK(response_headers_callback_.is_null()); + response_headers_callback_ = std::move(callback); +} + void URLRequest::set_status(URLRequestStatus status) { DCHECK(status_.is_io_pending() || status_.is_success() || (!status.is_success() && !status.is_io_pending()));
diff --git a/net/url_request/url_request.h b/net/url_request/url_request.h index 603c4bd..ae6bba1 100644 --- a/net/url_request/url_request.h +++ b/net/url_request/url_request.h
@@ -31,6 +31,7 @@ #include "net/cookies/canonical_cookie.h" #include "net/http/http_raw_request_headers.h" #include "net/http/http_request_headers.h" +#include "net/http/http_response_headers.h" #include "net/http/http_response_info.h" #include "net/log/net_log_with_source.h" #include "net/proxy/proxy_server.h" @@ -673,6 +674,13 @@ // before the request is started. void SetRequestHeadersCallback(RequestHeadersCallback callback); + // Sets a callback that will be invoked each time the response is received + // from the remote party with the actual response headers recieved. Note this + // is different from response_headers() getter in that in case of revalidation + // request, the latter will return cached headers, while the callback will be + // called with a response from the server. + void SetResponseHeadersCallback(ResponseHeadersCallback callback); + protected: // Allow the URLRequestJob class to control the is_pending() flag. void set_is_pending(bool value) { is_pending_ = value; } @@ -877,8 +885,9 @@ const NetworkTrafficAnnotationTag traffic_annotation_; - // See SetRequestHeadersCallback() above for details. + // See Set{Request|Response}HeadersCallback() above for details. RequestHeadersCallback request_headers_callback_; + ResponseHeadersCallback response_headers_callback_; THREAD_CHECKER(thread_checker_);
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 7a61c851..6b115afc 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc
@@ -576,6 +576,7 @@ base::Bind(&URLRequestHttpJob::NotifyBeforeSendHeadersCallback, base::Unretained(this))); transaction_->SetRequestHeadersCallback(request_headers_callback_); + transaction_->SetResponseHeadersCallback(response_headers_callback_); if (!throttling_entry_.get() || !throttling_entry_->ShouldRejectRequest(*request_)) { @@ -1558,6 +1559,13 @@ request_headers_callback_ = std::move(callback); } +void URLRequestHttpJob::SetResponseHeadersCallback( + ResponseHeadersCallback callback) { + DCHECK(!transaction_); + DCHECK(!response_headers_callback_); + response_headers_callback_ = std::move(callback); +} + void URLRequestHttpJob::RecordPerfHistograms(CompletionCause reason) { if (start_time_.is_null()) return;
diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h index 989c5c8f..55101ce 100644 --- a/net/url_request/url_request_http_job.h +++ b/net/url_request/url_request_http_job.h
@@ -50,6 +50,7 @@ // access it. void RecordPacketStats(SdchPolicyDelegate::StatisticSelector statistic) const; void SetRequestHeadersCallback(RequestHeadersCallback callback) override; + void SetResponseHeadersCallback(ResponseHeadersCallback callback) override; protected: URLRequestHttpJob(URLRequest* request, @@ -271,6 +272,7 @@ int64_t total_sent_bytes_from_previous_transactions_; RequestHeadersCallback request_headers_callback_; + ResponseHeadersCallback response_headers_callback_; base::WeakPtrFactory<URLRequestHttpJob> weak_factory_;
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc index d7feb59..9112c44 100644 --- a/net/url_request/url_request_job.cc +++ b/net/url_request/url_request_job.cc
@@ -27,7 +27,6 @@ #include "net/base/load_states.h" #include "net/base/net_errors.h" #include "net/base/network_delegate.h" -#include "net/http/http_response_headers.h" #include "net/log/net_log.h" #include "net/log/net_log_capture_mode.h" #include "net/log/net_log_event_type.h" @@ -382,10 +381,6 @@ out->clear(); } -void URLRequestJob::SetRequestHeadersCallback(RequestHeadersCallback callback) { - request_headers_callback_ = std::move(callback); -} - // static GURL URLRequestJob::ComputeReferrerForPolicy(URLRequest::ReferrerPolicy policy, const GURL& original_referrer,
diff --git a/net/url_request/url_request_job.h b/net/url_request/url_request_job.h index a844f74..aaed867 100644 --- a/net/url_request/url_request_job.h +++ b/net/url_request/url_request_job.h
@@ -22,6 +22,7 @@ #include "net/cookies/canonical_cookie.h" #include "net/filter/source_stream.h" #include "net/http/http_raw_request_headers.h" +#include "net/http/http_response_headers.h" #include "net/socket/connection_attempts.h" #include "net/url_request/redirect_info.h" #include "net/url_request/url_request.h" @@ -234,7 +235,11 @@ // be actually sent and will receive actual request headers that are about // to hit the wire, including SPDY/QUIC internal headers and any additional // request headers set via BeforeSendHeaders hooks. - virtual void SetRequestHeadersCallback(RequestHeadersCallback callback); + virtual void SetRequestHeadersCallback(RequestHeadersCallback callback) {} + + // Sets a callback that will be invoked each time the response is received + // from the remote party with the actual response headers recieved. + virtual void SetResponseHeadersCallback(ResponseHeadersCallback callback) {} // Given |policy|, |referrer|, and |destination|, returns the // referrer URL mandated by |request|'s referrer policy. @@ -450,9 +455,6 @@ // completed. CompletionCallback read_raw_callback_; - // See SetRequestHeadersCallback() above for details. - RequestHeadersCallback request_headers_callback_; - base::WeakPtrFactory<URLRequestJob> weak_factory_; DISALLOW_COPY_AND_ASSIGN(URLRequestJob);
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index ed590d6d..937bae4 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc
@@ -8066,12 +8066,12 @@ // Check that the post-specific headers were stripped: EXPECT_FALSE(ContainsString(data, "Content-Length:")); EXPECT_FALSE(ContainsString(data, "Content-Type:")); + EXPECT_FALSE(ContainsString(data, "Origin:")); // These extra request headers should not have been stripped. EXPECT_TRUE(ContainsString(data, "Accept:")); EXPECT_TRUE(ContainsString(data, "Accept-Language:")); EXPECT_TRUE(ContainsString(data, "Accept-Charset:")); - EXPECT_TRUE(ContainsString(data, "Origin: http://localhost:1337")); } // The following tests check that we handle mutating the request for HTTP @@ -8092,8 +8092,9 @@ HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); - HTTPRedirectOriginHeaderTest(url, "POST", "GET", url.GetOrigin().spec()); - HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", "null"); + HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string()); + HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", + std::string()); } TEST_F(URLRequestTestHTTP, Redirect302Tests) { @@ -8109,8 +8110,9 @@ HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); - HTTPRedirectOriginHeaderTest(url, "POST", "GET", url.GetOrigin().spec()); - HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", "null"); + HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string()); + HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", + std::string()); } TEST_F(URLRequestTestHTTP, Redirect303Tests) { @@ -8126,8 +8128,9 @@ HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); - HTTPRedirectOriginHeaderTest(url, "POST", "GET", url.GetOrigin().spec()); - HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", "null"); + HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string()); + HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", + std::string()); } TEST_F(URLRequestTestHTTP, Redirect307Tests) { @@ -11713,7 +11716,7 @@ EXPECT_EQ(0, d.received_redirect_count()); } -TEST_F(URLRequestTestHTTP, RequestHeadersCallback) { +TEST_F(URLRequestTestHTTP, HeadersCallbacks) { ASSERT_TRUE(http_test_server()->Start()); TestURLRequestContext context; GURL url(http_test_server()->GetURL("/cachetime")); @@ -11722,44 +11725,54 @@ extra_headers.SetHeader("X-Foo", "bar"); { - HttpRawRequestHeaders raw_headers; + HttpRawRequestHeaders raw_req_headers; + scoped_refptr<const HttpResponseHeaders> raw_resp_headers; + std::unique_ptr<URLRequest> r(context.CreateRequest( url, DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS)); r->SetExtraRequestHeaders(extra_headers); - r->SetRequestHeadersCallback(base::Bind(&HttpRawRequestHeaders::Assign, - base::Unretained(&raw_headers))); + r->SetRequestHeadersCallback(base::Bind( + &HttpRawRequestHeaders::Assign, base::Unretained(&raw_req_headers))); + r->SetResponseHeadersCallback(base::Bind( + [](scoped_refptr<const HttpResponseHeaders>* left, + scoped_refptr<const HttpResponseHeaders> right) { *left = right; }, + base::Unretained(&raw_resp_headers))); r->Start(); while (!delegate.response_started_count()) base::RunLoop().RunUntilIdle(); - EXPECT_FALSE(raw_headers.headers().empty()); + EXPECT_FALSE(raw_req_headers.headers().empty()); std::string value; - EXPECT_TRUE(raw_headers.FindHeaderForTest("X-Foo", &value)); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("X-Foo", &value)); EXPECT_EQ("bar", value); - EXPECT_TRUE(raw_headers.FindHeaderForTest("Accept-Encoding", &value)); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("Accept-Encoding", &value)); EXPECT_EQ("gzip, deflate", value); - EXPECT_TRUE(raw_headers.FindHeaderForTest("Connection", &value)); - EXPECT_TRUE(raw_headers.FindHeaderForTest("Host", &value)); - EXPECT_EQ("GET /cachetime HTTP/1.1\r\n", raw_headers.request_line()); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("Connection", &value)); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("Host", &value)); + EXPECT_EQ("GET /cachetime HTTP/1.1\r\n", raw_req_headers.request_line()); + EXPECT_EQ(raw_resp_headers.get(), r->response_headers()); } { - HttpRawRequestHeaders raw_headers; std::unique_ptr<URLRequest> r(context.CreateRequest( url, DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS)); r->SetExtraRequestHeaders(extra_headers); - r->SetRequestHeadersCallback(base::Bind([](net::HttpRawRequestHeaders) { + r->SetRequestHeadersCallback(base::Bind([](HttpRawRequestHeaders) { FAIL() << "Callback should not be called unless request is sent"; })); + r->SetResponseHeadersCallback( + base::Bind([](scoped_refptr<const HttpResponseHeaders>) { + FAIL() << "Callback should not be called unless request is sent"; + })); r->Start(); base::RunLoop().Run(); EXPECT_TRUE(r->was_cached()); - EXPECT_TRUE(raw_headers.headers().empty()); - EXPECT_TRUE(raw_headers.request_line().empty()); } } -TEST_F(URLRequestTestHTTP, RequestHeadersCallbackWithRedirect) { +TEST_F(URLRequestTestHTTP, HeadersCallbacksWithRedirect) { ASSERT_TRUE(http_test_server()->Start()); - HttpRawRequestHeaders raw_headers; + HttpRawRequestHeaders raw_req_headers; + scoped_refptr<const HttpResponseHeaders> raw_resp_headers; + TestURLRequestContext context; TestDelegate delegate; HttpRequestHeaders extra_headers; @@ -11770,30 +11783,41 @@ url, DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS)); r->SetExtraRequestHeaders(extra_headers); r->SetRequestHeadersCallback(base::Bind(&HttpRawRequestHeaders::Assign, - base::Unretained(&raw_headers))); + base::Unretained(&raw_req_headers))); + r->SetResponseHeadersCallback(base::Bind( + [](scoped_refptr<const HttpResponseHeaders>* left, + scoped_refptr<const HttpResponseHeaders> right) { *left = right; }, + base::Unretained(&raw_resp_headers))); r->Start(); base::RunLoop().Run(); ASSERT_EQ(1, delegate.received_redirect_count()); std::string value; - EXPECT_TRUE(raw_headers.FindHeaderForTest("X-Foo", &value)); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("X-Foo", &value)); EXPECT_EQ("bar", value); - EXPECT_TRUE(raw_headers.FindHeaderForTest("Accept-Encoding", &value)); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("Accept-Encoding", &value)); EXPECT_EQ("gzip, deflate", value); EXPECT_EQ(1, delegate.received_redirect_count()); - EXPECT_EQ("GET /redirect-test.html HTTP/1.1\r\n", raw_headers.request_line()); + EXPECT_EQ("GET /redirect-test.html HTTP/1.1\r\n", + raw_req_headers.request_line()); + EXPECT_TRUE(raw_resp_headers->HasHeader("Location")); + EXPECT_EQ(302, raw_resp_headers->response_code()); + EXPECT_EQ("Redirect", raw_resp_headers->GetStatusText()); - raw_headers = HttpRawRequestHeaders(); + raw_req_headers = HttpRawRequestHeaders(); + raw_resp_headers = nullptr; r->FollowDeferredRedirect(); base::RunLoop().Run(); - EXPECT_TRUE(raw_headers.FindHeaderForTest("X-Foo", &value)); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("X-Foo", &value)); EXPECT_EQ("bar", value); - EXPECT_TRUE(raw_headers.FindHeaderForTest("Accept-Encoding", &value)); + EXPECT_TRUE(raw_req_headers.FindHeaderForTest("Accept-Encoding", &value)); EXPECT_EQ("gzip, deflate", value); - EXPECT_EQ("GET /with-headers.html HTTP/1.1\r\n", raw_headers.request_line()); + EXPECT_EQ("GET /with-headers.html HTTP/1.1\r\n", + raw_req_headers.request_line()); + EXPECT_EQ(r->response_headers(), raw_resp_headers.get()); } -TEST_F(URLRequestTest, RequestHeadersCallbackConnectFailed) { +TEST_F(URLRequestTest, HeadersCallbacksConnectFailed) { TestDelegate request_delegate; std::unique_ptr<URLRequest> r(default_context_.CreateRequest( @@ -11802,12 +11826,16 @@ r->SetRequestHeadersCallback(base::Bind([](net::HttpRawRequestHeaders) { FAIL() << "Callback should not be called unless request is sent"; })); + r->SetResponseHeadersCallback( + base::Bind([](scoped_refptr<const net::HttpResponseHeaders>) { + FAIL() << "Callback should not be called unless request is sent"; + })); r->Start(); base::RunLoop().Run(); EXPECT_FALSE(r->is_pending()); } -TEST_F(URLRequestTestHTTP, RequestHeadersCallbackAuthRetry) { +TEST_F(URLRequestTestHTTP, HeadersCallbacksAuthRetry) { ASSERT_TRUE(http_test_server()->Start()); GURL url(http_test_server()->GetURL("/auth-basic")); @@ -11818,38 +11846,75 @@ HttpRequestHeaders extra_headers; extra_headers.SetHeader("X-Foo", "bar"); - using HeadersVector = std::vector<std::unique_ptr<HttpRawRequestHeaders>>; - HeadersVector raw_headers; + using ReqHeadersVector = std::vector<std::unique_ptr<HttpRawRequestHeaders>>; + ReqHeadersVector raw_req_headers; + using RespHeadersVector = + std::vector<scoped_refptr<const HttpResponseHeaders>>; + RespHeadersVector raw_resp_headers; + + auto req_headers_callback = base::Bind( + [](ReqHeadersVector* vec, HttpRawRequestHeaders headers) { + vec->emplace_back(new HttpRawRequestHeaders(std::move(headers))); + }, + &raw_req_headers); + auto resp_headers_callback = base::Bind( + [](RespHeadersVector* vec, + scoped_refptr<const HttpResponseHeaders> headers) { + vec->push_back(headers); + }, + &raw_resp_headers); std::unique_ptr<URLRequest> r(context.CreateRequest( url, DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS)); r->SetExtraRequestHeaders(extra_headers); - r->SetRequestHeadersCallback(base::Bind( - [](HeadersVector* vec, HttpRawRequestHeaders headers) { - vec->emplace_back(new HttpRawRequestHeaders(std::move(headers))); - }, - &raw_headers)); + r->SetRequestHeadersCallback(req_headers_callback); + r->SetResponseHeadersCallback(resp_headers_callback); r->Start(); base::RunLoop().Run(); EXPECT_FALSE(r->is_pending()); - ASSERT_GE(raw_headers.size(), 2u); + ASSERT_EQ(raw_req_headers.size(), 2u); + ASSERT_EQ(raw_resp_headers.size(), 2u); std::string value; - EXPECT_FALSE(raw_headers[0]->FindHeaderForTest("Authorization", &value)); - EXPECT_TRUE(raw_headers[0]->FindHeaderForTest("X-Foo", &value)); + EXPECT_FALSE(raw_req_headers[0]->FindHeaderForTest("Authorization", &value)); + EXPECT_TRUE(raw_req_headers[0]->FindHeaderForTest("X-Foo", &value)); EXPECT_EQ("bar", value); - EXPECT_TRUE(raw_headers[1]->FindHeaderForTest("Authorization", &value)); - EXPECT_TRUE(raw_headers[1]->FindHeaderForTest("X-Foo", &value)); + EXPECT_TRUE(raw_req_headers[1]->FindHeaderForTest("Authorization", &value)); + EXPECT_TRUE(raw_req_headers[1]->FindHeaderForTest("X-Foo", &value)); EXPECT_EQ("bar", value); + EXPECT_EQ(raw_resp_headers[1], r->response_headers()); + EXPECT_NE(raw_resp_headers[0], raw_resp_headers[1]); + EXPECT_EQ(401, raw_resp_headers[0]->response_code()); + EXPECT_EQ("Unauthorized", raw_resp_headers[0]->GetStatusText()); + + std::unique_ptr<URLRequest> r2(context.CreateRequest( + url, DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS)); + r2->SetExtraRequestHeaders(extra_headers); + r2->SetRequestHeadersCallback(req_headers_callback); + r2->SetResponseHeadersCallback(resp_headers_callback); + r2->SetLoadFlags(LOAD_VALIDATE_CACHE); + r2->Start(); + base::RunLoop().Run(); + EXPECT_FALSE(r2->is_pending()); + ASSERT_EQ(raw_req_headers.size(), 3u); + ASSERT_EQ(raw_resp_headers.size(), 3u); + EXPECT_TRUE(raw_req_headers[2]->FindHeaderForTest("If-None-Match", &value)); + EXPECT_NE(raw_resp_headers[2].get(), r2->response_headers()); + EXPECT_EQ(304, raw_resp_headers[2]->response_code()); + EXPECT_EQ("Not Modified", raw_resp_headers[2]->GetStatusText()); } -TEST_F(URLRequestTest, RequestHeadersCallbackNonHTTP) { +TEST_F(URLRequestTest, HeadersCallbacksNonHTTP) { GURL data_url("data:text/html,<html><body>Hello!</body></html>"); TestDelegate d; std::unique_ptr<URLRequest> r(default_context_.CreateRequest( data_url, DEFAULT_PRIORITY, &d, TRAFFIC_ANNOTATION_FOR_TESTS)); r->SetRequestHeadersCallback(base::Bind([](net::HttpRawRequestHeaders) { - FAIL() << "Callback should not be called unless request is sent"; + FAIL() << "Callback should not be called for non-HTTP schemes"; })); + r->SetResponseHeadersCallback( + base::Bind([](scoped_refptr<const net::HttpResponseHeaders>) { + FAIL() << "Callback should not be called for non-HTTP schemes"; + })); r->Start(); base::RunLoop().Run(); EXPECT_FALSE(r->is_pending());
diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc index af6cc0d4..5749eb81 100644 --- a/pdf/out_of_process_instance.cc +++ b/pdf/out_of_process_instance.cc
@@ -1275,7 +1275,7 @@ void OutOfProcessInstance::NotifySelectedFindResultChanged( int current_find_index) { - DCHECK_GE(current_find_index, 0); + DCHECK_GE(current_find_index, -1); SelectedFindResultChanged(current_find_index); }
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc index 56dcda7..edfeadf29 100644 --- a/pdf/pdfium/pdfium_engine.cc +++ b/pdf/pdfium/pdfium_engine.cc
@@ -1915,14 +1915,15 @@ bool is_form_text_area = IsFormTextArea(area, form_type); bool is_editable_form_text_area = false; + + double page_x = -1; + double page_y = -1; + FPDF_PAGE page = nullptr; if (is_form_text_area) { DCHECK_NE(page_index, -1); - double page_x; - double page_y; DeviceToPage(page_index, point.x(), point.y(), &page_x, &page_y); - - FPDF_PAGE page = pages_[page_index]->GetPage(); + page = pages_[page_index]->GetPage(); is_editable_form_text_area = IsPointInEditableFormTextArea(page, page_x, page_y, form_type); } @@ -1930,17 +1931,12 @@ // Handle the case when focus starts inside a form text area. if (in_form_text_area_) { if (is_form_text_area) { - // TODO(bug_754594): Right now this is a no-op, but what needs to happen - // here is a check to see if this right click occurred in the same text - // area as the currently focused text area. If they are not the same, - // refocus. This requires more state tracking, and a new PDFium API to - // set focus. - return true; + FORM_OnFocus(form_, page, 0, page_x, page_y); + } else { + // Transition out of a form text area. + FORM_ForceToKillFocus(form_); + SetInFormTextArea(false); } - - // Transition out of a form text area. - FORM_ForceToKillFocus(form_); - SetInFormTextArea(false); return true; } @@ -1952,10 +1948,9 @@ selection_.clear(); } - // TODO(bug_754594): This does not actually set focus inside the form area. - // To do so requires a new PDFium API. SetInFormTextArea(true); editable_form_text_area_ = is_editable_form_text_area; + FORM_OnFocus(form_, page, 0, page_x, page_y); return true; }
diff --git a/ppapi/api/private/ppb_platform_verification_private.idl b/ppapi/api/private/ppb_platform_verification_private.idl index b39d4eb..afd41bd 100644 --- a/ppapi/api/private/ppb_platform_verification_private.idl +++ b/ppapi/api/private/ppb_platform_verification_private.idl
@@ -87,7 +87,7 @@ * Requests the device's storage ID. * * @param[out] storage_id A <code>PP_Var</code> of type - * <code>PP_VARTYPE_ARRAY_BUFFER</code> that contains the storage ID. + * <code>PP_VARTYPE_STRING</code> that contains the storage ID. * * @param[in] callback A <code>PP_CompletionCallback</code> to be called after * the storage ID has been obtained. This callback will only run if
diff --git a/ppapi/c/private/ppb_platform_verification_private.h b/ppapi/c/private/ppb_platform_verification_private.h index bd3690b..83f6860 100644 --- a/ppapi/c/private/ppb_platform_verification_private.h +++ b/ppapi/c/private/ppb_platform_verification_private.h
@@ -4,7 +4,7 @@ */ /* From private/ppb_platform_verification_private.idl, - * modified Fri Aug 11 11:47:35 2017. + * modified Tue Jun 13 15:47:24 2017. */ #ifndef PPAPI_C_PRIVATE_PPB_PLATFORM_VERIFICATION_PRIVATE_H_ @@ -102,7 +102,7 @@ * Requests the device's storage ID. * * @param[out] storage_id A <code>PP_Var</code> of type - * <code>PP_VARTYPE_ARRAY_BUFFER</code> that contains the storage ID. + * <code>PP_VARTYPE_STRING</code> that contains the storage ID. * * @param[in] callback A <code>PP_CompletionCallback</code> to be called after * the storage ID has been obtained. This callback will only run if
diff --git a/ppapi/proxy/OWNERS b/ppapi/proxy/OWNERS index 172f398b..a9e73964 100644 --- a/ppapi/proxy/OWNERS +++ b/ppapi/proxy/OWNERS
@@ -3,5 +3,8 @@ per-file *_messages*.h=set noparent per-file *_messages*.h=file://ipc/SECURITY_OWNERS +per-file *_messages.cc=set noparent +per-file *_messages.cc=file://ipc/SECURITY_OWNERS + per-file *_param_traits*.*=set noparent per-file *_param_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/ppapi/proxy/platform_verification_private_resource.cc b/ppapi/proxy/platform_verification_private_resource.cc index a832d70..d9fbf998 100644 --- a/ppapi/proxy/platform_verification_private_resource.cc +++ b/ppapi/proxy/platform_verification_private_resource.cc
@@ -121,17 +121,14 @@ void PlatformVerificationPrivateResource::OnGetStorageIdReply( GetStorageIdParams output_params, const ResourceMessageReplyParams& params, - const std::vector<uint8_t>& storage_id) { + const std::string& storage_id) { if (!TrackedCallback::IsPending(output_params.callback) || TrackedCallback::IsScheduledToRun(output_params.callback)) { return; } if (params.result() == PP_OK) { - *(output_params.storage_id) = - (PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferVar( - static_cast<uint32_t>(storage_id.size()), &storage_id.front())) - ->GetPPVar(); + *(output_params.storage_id) = (new StringVar(storage_id))->GetPPVar(); } output_params.callback->Run(params.result()); }
diff --git a/ppapi/proxy/platform_verification_private_resource.h b/ppapi/proxy/platform_verification_private_resource.h index 87198b63..031e9ef 100644 --- a/ppapi/proxy/platform_verification_private_resource.h +++ b/ppapi/proxy/platform_verification_private_resource.h
@@ -58,7 +58,7 @@ const scoped_refptr<TrackedCallback>& callback) override; void OnGetStorageIdReply(GetStorageIdParams output_params, const ResourceMessageReplyParams& params, - const std::vector<uint8_t>& storage_id); + const std::string& storage_id); DISALLOW_COPY_AND_ASSIGN(PlatformVerificationPrivateResource); };
diff --git a/ppapi/proxy/ppapi_messages.cc b/ppapi/proxy/ppapi_messages.cc index 6ed361b2..a487a76 100644 --- a/ppapi/proxy/ppapi_messages.cc +++ b/ppapi/proxy/ppapi_messages.cc
@@ -4,37 +4,64 @@ // Get basic type definitions. #define IPC_MESSAGE_IMPL +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif // Generate constructors. #include "ipc/struct_constructor_macros.h" +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif // Generate destructors. #include "ipc/struct_destructor_macros.h" +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif // Generate param traits size methods. #include "ipc/param_traits_size_macros.h" namespace IPC { +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif } // Generate param traits write methods. #include "ipc/param_traits_write_macros.h" namespace IPC { +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif } // namespace IPC // Generate param traits read methods. #include "ipc/param_traits_read_macros.h" namespace IPC { +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif } // namespace IPC // Generate param traits log methods. #include "ipc/param_traits_log_macros.h" namespace IPC { +#undef PPAPI_PROXY_PPAPI_MESSAGES_H_ #include "ppapi/proxy/ppapi_messages.h" +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#error "Failed to include ppapi/proxy/ppapi_messages.h" +#endif } // namespace IPC -
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h index ca534fb..4307409 100644 --- a/ppapi/proxy/ppapi_messages.h +++ b/ppapi/proxy/ppapi_messages.h
@@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Multiply-included message header, no traditional include guard. +#ifndef PPAPI_PROXY_PPAPI_MESSAGES_H_ +#define PPAPI_PROXY_PPAPI_MESSAGES_H_ #include <stdint.h> @@ -1868,7 +1869,7 @@ std::string /* platform_key_certificate */) IPC_MESSAGE_CONTROL0(PpapiHostMsg_PlatformVerification_GetStorageId) IPC_MESSAGE_CONTROL1(PpapiHostMsg_PlatformVerification_GetStorageIdReply, - std::vector<uint8_t> /* storage_id */) + std::string /* storage_id */) // Printing. IPC_MESSAGE_CONTROL0(PpapiHostMsg_Printing_Create) @@ -2583,3 +2584,5 @@ uint32_t /* buffer */) #endif // !defined(OS_NACL) && !defined(NACL_WIN64) + +#endif // PPAPI_PROXY_PPAPI_MESSAGES_H_
diff --git a/printing/OWNERS b/printing/OWNERS index db535f8..d941f7e 100644 --- a/printing/OWNERS +++ b/printing/OWNERS
@@ -1,9 +1,6 @@ dpapad@chromium.org -gene@chromium.org -scottbyer@chromium.org +rbpotter@chromium.org thestig@chromium.org -vandebo@chromium.org -vitalybuka@chromium.org per-file printing_context_android*=avayvod@chromium.org per-file printing_context_android*=dgn@chromium.org
diff --git a/remoting/android/java/src/org/chromium/chromoting/HostInfo.java b/remoting/android/java/src/org/chromium/chromoting/HostInfo.java index 63ed82b..a8ac2cc 100644 --- a/remoting/android/java/src/org/chromium/chromoting/HostInfo.java +++ b/remoting/android/java/src/org/chromium/chromoting/HostInfo.java
@@ -5,7 +5,6 @@ package org.chromium.chromoting; import android.content.Context; -import android.content.res.Resources; import android.text.TextUtils; import org.json.JSONArray; @@ -74,19 +73,39 @@ this.updatedTime = updatedTimeCandidate; } + private int getHostOfflineReasonResourceId(String reason) { + switch (reason) { + case "initialization_failed": + return R.string.offline_reason_initialization_failed; + case "invalid_host_configuration": + return R.string.offline_reason_invalid_host_configuration; + case "invalid_host_id": + return R.string.offline_reason_invalid_host_id; + case "invalid_oauth_credentials": + return R.string.offline_reason_invalid_oauth_credentials; + case "invalid_host_domain": + return R.string.offline_reason_invalid_host_domain; + case "login_screen_not_supported": + return R.string.offline_reason_login_screen_not_supported; + case "policy_read_error": + return R.string.offline_reason_policy_read_error; + case "policy_change_requires_restart": + return R.string.offline_reason_policy_change_requires_restart; + case "success_exit": + return R.string.offline_reason_success_exit; + case "username_mismatch": + return R.string.offline_reason_username_mismatch; + default: + return R.string.offline_reason_unknown; + } + } + public String getHostOfflineReasonText(Context context) { if (TextUtils.isEmpty(hostOfflineReason)) { return context.getString(R.string.host_offline_tooltip); } - try { - // TODO(wnwen): Replace this with explicit usage so errors move to compile time. - String resourceName = "offline_reason_" + hostOfflineReason.toLowerCase(Locale.ENGLISH); - int resourceId = context.getResources().getIdentifier( - resourceName, "string", context.getPackageName()); - return context.getString(resourceId); - } catch (Resources.NotFoundException ignored) { - return context.getString(R.string.offline_reason_unknown, hostOfflineReason); - } + return context.getString( + getHostOfflineReasonResourceId(hostOfflineReason.toLowerCase(Locale.ENGLISH))); } public ArrayList<String> getTokenUrlPatterns() {
diff --git a/remoting/host/desktop_environment_options.cc b/remoting/host/desktop_environment_options.cc index b3fc33bf..fd17fad 100644 --- a/remoting/host/desktop_environment_options.cc +++ b/remoting/host/desktop_environment_options.cc
@@ -82,6 +82,14 @@ enable_user_interface_ = enabled; } +bool DesktopEnvironmentOptions::enable_file_transfer() const { + return enable_file_transfer_; +} + +void DesktopEnvironmentOptions::set_enable_file_transfer(bool enabled) { + enable_file_transfer_ = enabled; +} + void DesktopEnvironmentOptions::ApplyHostSessionOptions( const HostSessionOptions& options) { #if defined(OS_WIN)
diff --git a/remoting/host/desktop_environment_options.h b/remoting/host/desktop_environment_options.h index 15cacfa8..ea74d04 100644 --- a/remoting/host/desktop_environment_options.h +++ b/remoting/host/desktop_environment_options.h
@@ -36,6 +36,9 @@ bool enable_user_interface() const; void set_enable_user_interface(bool enabled); + bool enable_file_transfer() const; + void set_enable_file_transfer(bool enabled); + const webrtc::DesktopCaptureOptions* desktop_capture_options() const; webrtc::DesktopCaptureOptions* desktop_capture_options(); @@ -53,6 +56,9 @@ // True if a user-interactive window is showing up in it2me scenario. bool enable_user_interface_ = true; + // True if this host has file transfer enabled. + bool enable_file_transfer_ = false; + // The DesktopCaptureOptions to initialize DesktopCapturer. webrtc::DesktopCaptureOptions desktop_capture_options_; };
diff --git a/remoting/host/file_transfer_message_handler.cc b/remoting/host/file_transfer_message_handler.cc index b83d020..f4e4754 100644 --- a/remoting/host/file_transfer_message_handler.cc +++ b/remoting/host/file_transfer_message_handler.cc
@@ -71,7 +71,7 @@ response.set_state(protocol::FileTransferResponse_TransferState_DONE); response.set_total_bytes_written(request_->filesize()); } - Send(&response, base::Closure()); + Send(response, base::Closure()); } void FileTransferMessageHandler::SendToFileProxy( @@ -117,7 +117,7 @@ file_proxy_wrapper_->Cancel(); protocol::FileTransferResponse response; response.set_error(protocol::FileTransferResponse_ErrorCode_UNEXPECTED_ERROR); - Send(&response, base::Closure()); + Send(response, base::Closure()); } } // namespace remoting
diff --git a/remoting/host/me2me_desktop_environment.cc b/remoting/host/me2me_desktop_environment.cc index 0c6e2ba9..05590dc 100644 --- a/remoting/host/me2me_desktop_environment.cc +++ b/remoting/host/me2me_desktop_environment.cc
@@ -57,12 +57,10 @@ capabilities += protocol::kTouchEventsCapability; } -// TODO(jarhar): Replace this ifdef with settings in DesktopEnvironmentOptions, -// and then a chrome policy. -#ifdef CHROME_REMOTE_DESKTOP_FILE_TRANSFER_ENABLED - capabilities += " "; - capabilities += protocol::kFileTransferCapability; -#endif + if (desktop_environment_options().enable_file_transfer()) { + capabilities += " "; + capabilities += protocol::kFileTransferCapability; + } return capabilities; }
diff --git a/remoting/host/remoting_me2me_host.cc b/remoting/host/remoting_me2me_host.cc index 06e478ec..d7666a9 100644 --- a/remoting/host/remoting_me2me_host.cc +++ b/remoting/host/remoting_me2me_host.cc
@@ -460,6 +460,13 @@ // desktop_environment_options_.desktop_capture_options() // ->set_use_update_notifications(true); // And remove the same line from me2me_desktop_environment.cc. + + + // TODO(jarhar): Replace this ifdef with a chrome policy. +#ifdef CHROME_REMOTE_DESKTOP_FILE_TRANSFER_ENABLED + desktop_environment_options_.set_enable_file_transfer(true); +#endif + StartOnUiThread(); }
diff --git a/remoting/protocol/data_channel_manager_unittest.cc b/remoting/protocol/data_channel_manager_unittest.cc index 8f9ab3f..70e594c2 100644 --- a/remoting/protocol/data_channel_manager_unittest.cc +++ b/remoting/protocol/data_channel_manager_unittest.cc
@@ -47,7 +47,7 @@ bool connected() const { return NamedMessagePipeHandler::connected(); } - void Send(google::protobuf::MessageLite* message, + void Send(const google::protobuf::MessageLite& message, const base::Closure& done); protected: @@ -82,8 +82,9 @@ return it->second; } -void FakeNamedMessagePipeHandler::Send(google::protobuf::MessageLite* message, - const base::Closure& done) { +void FakeNamedMessagePipeHandler::Send( + const google::protobuf::MessageLite& message, + const base::Closure& done) { if (connected()) { NamedMessagePipeHandler::Send(message, done); return; @@ -140,9 +141,9 @@ }, base::Unretained(&sent)); ASSERT_TRUE(handler1->connected()); - handler1->Send(&message, sent_callback); + handler1->Send(message, sent_callback); ASSERT_FALSE(handler2->connected()); - handler2->Send(&message, sent_callback); + handler2->Send(message, sent_callback); base::RunLoop().RunUntilIdle(); ASSERT_EQ(sent, 1); @@ -159,8 +160,8 @@ base::Unretained(&sent)); ASSERT_TRUE(handler2->connected()); - handler1->Send(&message, sent_callback); - handler2->Send(&message, sent_callback); + handler1->Send(message, sent_callback); + handler2->Send(message, sent_callback); base::RunLoop().RunUntilIdle(); ASSERT_EQ(sent, 2);
diff --git a/remoting/protocol/message_pipe.h b/remoting/protocol/message_pipe.h index 4d18249..3c8de690 100644 --- a/remoting/protocol/message_pipe.h +++ b/remoting/protocol/message_pipe.h
@@ -50,6 +50,9 @@ // client, but it doesn't mean that the client has received it. |done| is // never called if the message is never sent (e.g. if the pipe is destroyed // before the message is sent). + // |message| is guaranteed to be used synchronously. It won't be referred + // after this function returns. + // TODO(zijiehe): the |message| should be const-ref. virtual void Send(google::protobuf::MessageLite* message, const base::Closure& done) = 0; };
diff --git a/remoting/protocol/named_message_pipe_handler.cc b/remoting/protocol/named_message_pipe_handler.cc index 4741d57..44c81ca 100644 --- a/remoting/protocol/named_message_pipe_handler.cc +++ b/remoting/protocol/named_message_pipe_handler.cc
@@ -34,11 +34,11 @@ delete this; } -void NamedMessagePipeHandler::Send(google::protobuf::MessageLite* message, - const base::Closure& done) { +void NamedMessagePipeHandler::Send(const google::protobuf::MessageLite& message, + const base::Closure& done) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(connected()); - pipe_->Send(message, done); + pipe_->Send(const_cast<google::protobuf::MessageLite*>(&message), done); } void NamedMessagePipeHandler::OnIncomingMessage(
diff --git a/remoting/protocol/named_message_pipe_handler.h b/remoting/protocol/named_message_pipe_handler.h index 877b033..32845531 100644 --- a/remoting/protocol/named_message_pipe_handler.h +++ b/remoting/protocol/named_message_pipe_handler.h
@@ -47,8 +47,10 @@ bool connected() const { return is_connected_; } // Sends the message through the pipe. This function should only be called - // once connected() returns true. - void Send(google::protobuf::MessageLite* message, const base::Closure& done); + // once connected() returns true. See comments of + // remoting::protocol::MessagePipe::Send() for details. + void Send(const google::protobuf::MessageLite& message, + const base::Closure& done); // Derived classes can override these functions to receive data from the // connection or observe the connection state. These functions will not be
diff --git a/sandbox/win/tests/integration_tests/cfi_unittest.cc b/sandbox/win/tests/integration_tests/cfi_unittest.cc index 8b7baca..909a2c9e 100644 --- a/sandbox/win/tests/integration_tests/cfi_unittest.cc +++ b/sandbox/win/tests/integration_tests/cfi_unittest.cc
@@ -19,7 +19,7 @@ // a hook and throw an exception. // - If this test fails, the expected CFG exception did NOT happen. This // indicates a build system change that has disabled Chrome process-wide CFG. -TEST(CFGSupportTests, MsIndirectFailure) { +TEST(CFGSupportTests, DISABLED_MsIndirectFailure) { // CFG is only supported on >= Win8.1 Update 3. // Not checking for update, since test infra is updated and it would add // a lot of complexity.
diff --git a/services/resource_coordinator/BUILD.gn b/services/resource_coordinator/BUILD.gn index 757fb90..6e363bd 100644 --- a/services/resource_coordinator/BUILD.gn +++ b/services/resource_coordinator/BUILD.gn
@@ -12,6 +12,7 @@ source_set("lib") { sources = [ + "coordination_unit/background_metrics_reporter.h", "coordination_unit/coordination_unit_graph_observer.cc", "coordination_unit/coordination_unit_graph_observer.h", "coordination_unit/coordination_unit_impl.cc",
diff --git a/services/resource_coordinator/coordination_unit/background_metrics_reporter.h b/services/resource_coordinator/coordination_unit/background_metrics_reporter.h new file mode 100644 index 0000000..a2692a6 --- /dev/null +++ b/services/resource_coordinator/coordination_unit/background_metrics_reporter.h
@@ -0,0 +1,136 @@ +// 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 SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_BACKGROUND_METRICS_REPORTER_H_ +#define SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_BACKGROUND_METRICS_REPORTER_H_ + +#include "base/macros.h" +#include "base/metrics/histogram_macros.h" +#include "base/time/time.h" +#include "services/metrics/public/cpp/ukm_builders.h" + +// Tabs can be kept in the background for a long time, metrics show 75th +// percentile of time spent in background is 2.5 hours, and the 95th is 24 hour. +// In order to guide the selection of an appropriate observation window we are +// proposing using a CUSTOM_TIMES histogram from 1s to 48h, with 100 buckets. +#define HEURISTICS_HISTOGRAM(name, sample) \ + UMA_HISTOGRAM_CUSTOM_TIMES(name, sample, base::TimeDelta::FromSeconds(1), \ + base::TimeDelta::FromHours(48), 100) + +namespace ukm { +class MojoUkmRecorder; +} // namespace ukm + +namespace resource_coordinator { + +namespace internal { + +enum UKMFrameReportType : uint8_t { + kMainFrameOnly = 0, + kMainFrameAndChildFrame +}; + +template <class UKMBuilderClass, + internal::UKMFrameReportType kShouldReportChildFrameUkm> +class UKMReportDelegate {}; + +template <class UKMBuilderClass> +class UKMReportDelegate<UKMBuilderClass, internal::kMainFrameOnly> { + public: + void ReportUKM(int64_t ukm_source_id, + bool is_main_frame, + int64_t duration_in_ms, + ukm::MojoUkmRecorder* ukm_recorder) { + UKMBuilderClass ukm_builder(ukm_source_id); + ukm_builder.SetTimeFromBackgrounded(duration_in_ms).Record(ukm_recorder); + } +}; + +template <class UKMBuilderClass> +class UKMReportDelegate<UKMBuilderClass, internal::kMainFrameAndChildFrame> { + public: + void ReportUKM(int64_t ukm_source_id, + bool is_main_frame, + int64_t duration_in_ms, + ukm::MojoUkmRecorder* ukm_recorder) { + UKMBuilderClass ukm_builder(ukm_source_id); + ukm_builder.SetIsMainFrame(is_main_frame) + .SetTimeFromBackgrounded(duration_in_ms) + .Record(ukm_recorder); + } +}; + +} // namespace internal + +template <class UKMBuilderClass, + const char* kMetricName, + internal::UKMFrameReportType kShouldReportChildFrameUkm> +class BackgroundMetricsReporter { + public: + BackgroundMetricsReporter() + : ukm_source_id_(-1), + uma_reported_(false), + ukm_reported_(false), + child_frame_ukm_reported_(false) {} + + void Reset() { + uma_reported_ = false; + ukm_reported_ = false; + child_frame_ukm_reported_ = false; + } + + void SetUKMSourceID(int64_t ukm_source_id) { ukm_source_id_ = ukm_source_id; } + + void OnSignalReceived(bool is_main_frame, + base::TimeDelta duration, + ukm::MojoUkmRecorder* ukm_recorder) { + if (!uma_reported_) { + uma_reported_ = true; + HEURISTICS_HISTOGRAM(kMetricName, duration); + } + + ReportUKMIfNeeded(is_main_frame, duration, ukm_recorder); + } + + private: + void ReportUKMIfNeeded(bool is_main_frame, + base::TimeDelta duration, + ukm::MojoUkmRecorder* ukm_recorder) { + if (ukm_source_id_ == -1 || + (!kShouldReportChildFrameUkm && ukm_reported_) || + (kShouldReportChildFrameUkm && + !ShouldReportMainFrameUKM(is_main_frame) && + !ShouldReportChildFrameUKM(is_main_frame))) { + return; + } + + ukm_reporter_.ReportUKM(ukm_source_id_, is_main_frame, + duration.InMilliseconds(), ukm_recorder); + + if (is_main_frame) { + ukm_reported_ = true; + } else { + child_frame_ukm_reported_ = true; + } + } + + bool ShouldReportMainFrameUKM(bool is_main_frame) const { + return is_main_frame && !ukm_reported_; + } + + bool ShouldReportChildFrameUKM(bool is_main_frame) const { + return !is_main_frame && !child_frame_ukm_reported_; + } + + int64_t ukm_source_id_; + bool uma_reported_; + bool ukm_reported_; + bool child_frame_ukm_reported_; + internal::UKMReportDelegate<UKMBuilderClass, kShouldReportChildFrameUkm> + ukm_reporter_; +}; + +} // namespace resource_coordinator + +#endif // SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_BACKGROUND_METRICS_REPORTER_H_
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_impl.cc b/services/resource_coordinator/coordination_unit/coordination_unit_impl.cc index 69c2385..f1a61a1d 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_impl.cc +++ b/services/resource_coordinator/coordination_unit/coordination_unit_impl.cc
@@ -44,6 +44,14 @@ } // static +const WebContentsCoordinationUnitImpl* +CoordinationUnitImpl::ToWebContentsCoordinationUnit( + const CoordinationUnitImpl* cu) { + DCHECK(cu->id().type == CoordinationUnitType::kWebContents); + return static_cast<const WebContentsCoordinationUnitImpl*>(cu); +} + +// static std::vector<CoordinationUnitImpl*> CoordinationUnitImpl::GetCoordinationUnitsOfType(CoordinationUnitType type) { std::vector<CoordinationUnitImpl*> results;
diff --git a/services/resource_coordinator/coordination_unit/coordination_unit_impl.h b/services/resource_coordinator/coordination_unit/coordination_unit_impl.h index b12959c..4bac3b5 100644 --- a/services/resource_coordinator/coordination_unit/coordination_unit_impl.h +++ b/services/resource_coordinator/coordination_unit/coordination_unit_impl.h
@@ -38,6 +38,8 @@ const CoordinationUnitImpl* coordination_unit); static WebContentsCoordinationUnitImpl* ToWebContentsCoordinationUnit( CoordinationUnitImpl* coordination_unit); + static const WebContentsCoordinationUnitImpl* ToWebContentsCoordinationUnit( + const CoordinationUnitImpl* coordination_unit); static std::vector<CoordinationUnitImpl*> GetCoordinationUnitsOfType( CoordinationUnitType type);
diff --git a/services/resource_coordinator/coordination_unit/metrics_collector.cc b/services/resource_coordinator/coordination_unit/metrics_collector.cc index 155d436..d0ec87e5 100644 --- a/services/resource_coordinator/coordination_unit/metrics_collector.cc +++ b/services/resource_coordinator/coordination_unit/metrics_collector.cc
@@ -5,7 +5,6 @@ #include "services/resource_coordinator/coordination_unit/metrics_collector.h" #include "base/metrics/histogram_macros.h" -#include "base/strings/string_number_conversions.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" #include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h" @@ -25,7 +24,13 @@ const size_t kDefaultMaxCPUUsageMeasurements = 30u; -constexpr base::TimeDelta kMaxAudioSlientTime = base::TimeDelta::FromMinutes(1); +// Audio is considered to have started playing if the tab has never +// previously played audio, or has been silent for at least one minute. +const base::TimeDelta kMaxAudioSlientTimeout = base::TimeDelta::FromMinutes(1); +// Delay the metrics report from GRC to UMA/UKM for 5 minutes from when the main +// frame navigation is committed. +const base::TimeDelta kMetricsReportDelayTimeout = + base::TimeDelta::FromMinutes(5); const char kTabFromBackgroundedToFirstAlertFiredUMA[] = "TabManager.Heuristics.FromBackgroundedToFirstAlertFired"; @@ -71,6 +76,14 @@ coordination_unit->id().type == CoordinationUnitType::kWebContents; } +void MetricsCollector::OnCoordinationUnitCreated( + const CoordinationUnitImpl* coordination_unit) { + if (coordination_unit->id().type == CoordinationUnitType::kWebContents) { + metrics_report_record_map_.emplace(coordination_unit->id(), + MetricsReportRecord()); + } +} + void MetricsCollector::OnBeforeCoordinationUnitDestroyed( const CoordinationUnitImpl* coordination_unit) { if (coordination_unit->id().type == CoordinationUnitType::kFrame) { @@ -96,31 +109,22 @@ } auto* web_contents_cu = frame_cu->GetWebContentsCoordinationUnit(); // Only record metrics while it is backgrounded. - if (!web_contents_cu || web_contents_cu->IsVisible()) + if (!web_contents_cu || web_contents_cu->IsVisible() || + !ShouldReportMetrics(web_contents_cu)) { return; + } // Audio is considered to have started playing if the tab has never // previously played audio, or has been silent for at least one minute. auto now = clock_->NowTicks(); - if (frame_data.last_audible_time + kMaxAudioSlientTime < now) { + if (frame_data.last_audible_time + kMaxAudioSlientTimeout < now) { MetricsReportRecord& record = - metrics_report_record_map_[web_contents_cu->id()]; + metrics_report_record_map_.find(web_contents_cu->id())->second; auto duration = now - web_contents_data_map_[web_contents_cu->id()].last_invisible_time; - - if (!record.first_audible_after_backgrounded_reported) { - HEURISTICS_HISTOGRAM(kTabFromBackgroundedToFirstAudioStartsUMA, - duration); - record.first_audible_after_backgrounded_reported = true; - } - - bool is_main_frame = frame_cu->IsMainFrame(); - ReportAudibilityUKMIfNeeded( - web_contents_cu, - is_main_frame - ? &record.main_frame_first_audible_after_backgrounded_reported - : &record.child_frame_first_audible_after_backgrounded_reported, - is_main_frame, duration); + record.first_audible.OnSignalReceived( + frame_cu->IsMainFrame(), duration, + coordination_unit_manager().ukm_recorder()); } } } @@ -147,8 +151,10 @@ } } else if (property_type == mojom::PropertyType::kUKMSourceId) { ukm::SourceId ukm_source_id = value; - UpdateUkmSourceIdForWebContents(web_contents_cu_id, ukm_source_id); + MetricsReportRecord& record = + metrics_report_record_map_.find(web_contents_cu_id)->second; + record.UpdateUKMSourceID(ukm_source_id); } } @@ -158,37 +164,33 @@ if (event == mojom::Event::kAlertFired) { auto* web_contents_cu = frame_cu->GetWebContentsCoordinationUnit(); // Only record metrics while it is backgrounded. - if (!web_contents_cu || web_contents_cu->IsVisible()) + if (!web_contents_cu || web_contents_cu->IsVisible() || + !ShouldReportMetrics(web_contents_cu)) { return; - auto now = clock_->NowTicks(); - MetricsReportRecord& record = - metrics_report_record_map_[web_contents_cu->id()]; - if (!record.first_alert_fired_after_backgrounded_reported) { - const WebContentsData& web_contents_data = - web_contents_data_map_[web_contents_cu->id()]; - HEURISTICS_HISTOGRAM(kTabFromBackgroundedToFirstAlertFiredUMA, - now - web_contents_data.last_invisible_time); - record.first_alert_fired_after_backgrounded_reported = true; } + auto duration = + clock_->NowTicks() - + web_contents_data_map_[web_contents_cu->id()].last_invisible_time; + MetricsReportRecord& record = + metrics_report_record_map_.find(web_contents_cu->id())->second; + record.first_alert_fired.OnSignalReceived( + frame_cu->IsMainFrame(), duration, + coordination_unit_manager().ukm_recorder()); } else if (event == mojom::Event::kNonPersistentNotificationCreated) { auto* web_contents_cu = frame_cu->GetWebContentsCoordinationUnit(); // Only record metrics while it is backgrounded. - if (!web_contents_cu || web_contents_cu->IsVisible()) + if (!web_contents_cu || web_contents_cu->IsVisible() || + !ShouldReportMetrics(web_contents_cu)) { return; - auto now = clock_->NowTicks(); - MetricsReportRecord& record = - metrics_report_record_map_[web_contents_cu->id()]; - if (!record - .first_non_persistent_notification_created_after_backgrounded_reported) { - const WebContentsData web_contents_data = - web_contents_data_map_[web_contents_cu->id()]; - HEURISTICS_HISTOGRAM( - kTabFromBackgroundedToFirstNonPersistentNotificationCreatedUMA, - now - web_contents_data.last_invisible_time); - record - .first_non_persistent_notification_created_after_backgrounded_reported = - true; } + auto duration = + clock_->NowTicks() - + web_contents_data_map_[web_contents_cu->id()].last_invisible_time; + MetricsReportRecord& record = + metrics_report_record_map_.find(web_contents_cu->id())->second; + record.first_non_persistent_notification_created.OnSignalReceived( + frame_cu->IsMainFrame(), duration, + coordination_unit_manager().ukm_recorder()); } } @@ -197,35 +199,39 @@ const mojom::Event event) { if (event == mojom::Event::kTitleUpdated) { // Only record metrics while it is backgrounded. - if (web_contents_cu->IsVisible()) + if (web_contents_cu->IsVisible() || !ShouldReportMetrics(web_contents_cu)) return; - auto now = clock_->NowTicks(); + auto duration = + clock_->NowTicks() - + web_contents_data_map_[web_contents_cu->id()].last_invisible_time; MetricsReportRecord& record = - metrics_report_record_map_[web_contents_cu->id()]; - if (!record.first_title_updated_after_backgrounded_reported) { - const WebContentsData& web_contents_data = - web_contents_data_map_[web_contents_cu->id()]; - HEURISTICS_HISTOGRAM(kTabFromBackgroundedToFirstTitleUpdatedUMA, - now - web_contents_data.last_invisible_time); - record.first_title_updated_after_backgrounded_reported = true; - } + metrics_report_record_map_.find(web_contents_cu->id())->second; + record.first_title_updated.OnSignalReceived( + true, duration, coordination_unit_manager().ukm_recorder()); } else if (event == mojom::Event::kFaviconUpdated) { // Only record metrics while it is backgrounded. - if (web_contents_cu->IsVisible()) + if (web_contents_cu->IsVisible() || !ShouldReportMetrics(web_contents_cu)) return; - auto now = clock_->NowTicks(); + auto duration = + clock_->NowTicks() - + web_contents_data_map_[web_contents_cu->id()].last_invisible_time; MetricsReportRecord& record = - metrics_report_record_map_[web_contents_cu->id()]; - if (!record.first_favicon_updated_after_backgrounded_reported) { - const WebContentsData& web_contents_data = - web_contents_data_map_[web_contents_cu->id()]; - HEURISTICS_HISTOGRAM(kTabFromBackgroundedToFirstFaviconUpdatedUMA, - now - web_contents_data.last_invisible_time); - record.first_favicon_updated_after_backgrounded_reported = true; - } + metrics_report_record_map_.find(web_contents_cu->id())->second; + record.first_favicon_updated.OnSignalReceived( + true, duration, coordination_unit_manager().ukm_recorder()); + } else if (event == mojom::Event::kNavigationCommitted) { + web_contents_data_map_[web_contents_cu->id()].navigation_finished_time = + clock_->NowTicks(); } } +bool MetricsCollector::ShouldReportMetrics( + const WebContentsCoordinationUnitImpl* web_contents_cu) { + return clock_->NowTicks() - web_contents_data_map_[web_contents_cu->id()] + .navigation_finished_time > + kMetricsReportDelayTimeout; +} + bool MetricsCollector::IsCollectingCPUUsageForUkm( const CoordinationUnitID& web_contents_cu_id) { UkmCPUUsageCollectionState& state = @@ -249,25 +255,6 @@ .Record(coordination_unit_manager().ukm_recorder()); } -void MetricsCollector::ReportAudibilityUKMIfNeeded( - const WebContentsCoordinationUnitImpl* web_contents_cu, - bool* reported, - bool is_main_frame, - base::TimeDelta duration) { - if (*reported) - return; - int64_t ukm_source_id = -1; - if (!web_contents_cu->GetProperty(mojom::PropertyType::kUKMSourceId, - &ukm_source_id)) { - return; - } - ukm::builders::TabManager_Background_FirstAudioStarts(ukm_source_id) - .SetIsMainFrame(is_main_frame) - .SetTimeFromBackgrounded(duration.InMilliseconds()) - .Record(coordination_unit_manager().ukm_recorder()); - *reported = true; -} - void MetricsCollector::UpdateUkmSourceIdForWebContents( const CoordinationUnitID& web_contents_cu_id, ukm::SourceId ukm_source_id) { @@ -290,30 +277,31 @@ } void MetricsCollector::ResetMetricsReportRecord(CoordinationUnitID cu_id) { - auto metrics_report_record_iter = metrics_report_record_map_.find(cu_id); - if (metrics_report_record_iter == metrics_report_record_map_.end()) - return; - metrics_report_record_iter->second.Reset(); + DCHECK(metrics_report_record_map_.find(cu_id) != + metrics_report_record_map_.end()); + metrics_report_record_map_.find(cu_id)->second.Reset(); } -MetricsCollector::MetricsReportRecord::MetricsReportRecord() - : first_alert_fired_after_backgrounded_reported(false), - first_audible_after_backgrounded_reported(false), - first_favicon_updated_after_backgrounded_reported(false), - first_non_persistent_notification_created_after_backgrounded_reported( - false), - first_title_updated_after_backgrounded_reported(false), - main_frame_first_audible_after_backgrounded_reported(false), - child_frame_first_audible_after_backgrounded_reported(false) {} +MetricsCollector::MetricsReportRecord::MetricsReportRecord() = default; + +MetricsCollector::MetricsReportRecord::MetricsReportRecord( + const MetricsReportRecord& other) = default; + +void MetricsCollector::MetricsReportRecord::UpdateUKMSourceID( + int64_t ukm_source_id) { + first_alert_fired.SetUKMSourceID(ukm_source_id); + first_audible.SetUKMSourceID(ukm_source_id); + first_favicon_updated.SetUKMSourceID(ukm_source_id); + first_non_persistent_notification_created.SetUKMSourceID(ukm_source_id); + first_title_updated.SetUKMSourceID(ukm_source_id); +} void MetricsCollector::MetricsReportRecord::Reset() { - first_alert_fired_after_backgrounded_reported = false; - first_audible_after_backgrounded_reported = false; - first_favicon_updated_after_backgrounded_reported = false; - first_non_persistent_notification_created_after_backgrounded_reported = false; - first_title_updated_after_backgrounded_reported = false; - main_frame_first_audible_after_backgrounded_reported = false; - child_frame_first_audible_after_backgrounded_reported = false; + first_alert_fired.Reset(); + first_audible.Reset(); + first_favicon_updated.Reset(); + first_non_persistent_notification_created.Reset(); + first_title_updated.Reset(); } } // namespace resource_coordinator
diff --git a/services/resource_coordinator/coordination_unit/metrics_collector.h b/services/resource_coordinator/coordination_unit/metrics_collector.h index d9a11a5..16c6eed 100644 --- a/services/resource_coordinator/coordination_unit/metrics_collector.h +++ b/services/resource_coordinator/coordination_unit/metrics_collector.h
@@ -6,9 +6,11 @@ #define SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_METRICS_COLLECTOR_H_ #include "base/macros.h" +#include "base/metrics/histogram_macros.h" #include "base/time/default_tick_clock.h" #include "base/time/time.h" #include "services/metrics/public/cpp/ukm_builders.h" +#include "services/resource_coordinator/coordination_unit/background_metrics_reporter.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_graph_observer.h" namespace resource_coordinator { @@ -23,6 +25,8 @@ extern const char kTabFromBackgroundedToFirstTitleUpdatedUMA[]; extern const char kTabFromBackgroundedToFirstNonPersistentNotificationCreatedUMA[]; +extern const base::TimeDelta kMaxAudioSlientTimeout; +extern const base::TimeDelta kMetricsReportDelayTimeout; // A MetricsCollector observes changes happened inside CoordinationUnit Graph, // and reports UMA/UKM. @@ -33,6 +37,8 @@ // CoordinationUnitGraphObserver implementation. bool ShouldObserve(const CoordinationUnitImpl* coordination_unit) override; + void OnCoordinationUnitCreated( + const CoordinationUnitImpl* coordination_unit) override; void OnBeforeCoordinationUnitDestroyed( const CoordinationUnitImpl* coordination_unit) override; void OnFramePropertyChanged(const FrameCoordinationUnitImpl* frame_cu, @@ -53,17 +59,35 @@ struct MetricsReportRecord { MetricsReportRecord(); + MetricsReportRecord(const MetricsReportRecord& other); + void UpdateUKMSourceID(int64_t ukm_source_id); void Reset(); - // UMA histograms report. - bool first_alert_fired_after_backgrounded_reported; - bool first_audible_after_backgrounded_reported; - bool first_favicon_updated_after_backgrounded_reported; - bool first_non_persistent_notification_created_after_backgrounded_reported; - bool first_title_updated_after_backgrounded_reported; - - // UKM collection report. - bool main_frame_first_audible_after_backgrounded_reported; - bool child_frame_first_audible_after_backgrounded_reported; + BackgroundMetricsReporter< + ukm::builders::TabManager_Background_FirstAlertFired, + kTabFromBackgroundedToFirstAlertFiredUMA, + internal::UKMFrameReportType::kMainFrameAndChildFrame> + first_alert_fired; + BackgroundMetricsReporter< + ukm::builders::TabManager_Background_FirstAudioStarts, + kTabFromBackgroundedToFirstAudioStartsUMA, + internal::UKMFrameReportType::kMainFrameAndChildFrame> + first_audible; + BackgroundMetricsReporter< + ukm::builders::TabManager_Background_FirstFaviconUpdated, + kTabFromBackgroundedToFirstFaviconUpdatedUMA, + internal::UKMFrameReportType::kMainFrameOnly> + first_favicon_updated; + BackgroundMetricsReporter< + ukm::builders:: + TabManager_Background_FirstNonPersistentNotificationCreated, + kTabFromBackgroundedToFirstNonPersistentNotificationCreatedUMA, + internal::UKMFrameReportType::kMainFrameAndChildFrame> + first_non_persistent_notification_created; + BackgroundMetricsReporter< + ukm::builders::TabManager_Background_FirstTitleUpdated, + kTabFromBackgroundedToFirstTitleUpdatedUMA, + internal::UKMFrameReportType::kMainFrameOnly> + first_title_updated; }; struct FrameData { @@ -72,6 +96,7 @@ struct WebContentsData { base::TimeTicks last_invisible_time; + base::TimeTicks navigation_finished_time; }; struct UkmCPUUsageCollectionState { @@ -81,15 +106,12 @@ ukm::SourceId ukm_source_id = -1; }; + bool ShouldReportMetrics( + const WebContentsCoordinationUnitImpl* web_contents_cu); bool IsCollectingCPUUsageForUkm(const CoordinationUnitID& web_contents_cu_id); void RecordCPUUsageForUkm(const CoordinationUnitID& web_contents_cu_id, double cpu_usage, size_t num_coresident_tabs); - void ReportAudibilityUKMIfNeeded( - const WebContentsCoordinationUnitImpl* web_contents_cu, - bool* reported, - bool is_main_frame, - base::TimeDelta duration); void UpdateUkmSourceIdForWebContents( const CoordinationUnitID& web_contents_cu_id, ukm::SourceId ukm_source_id);
diff --git a/services/resource_coordinator/coordination_unit/metrics_collector_unittest.cc b/services/resource_coordinator/coordination_unit/metrics_collector_unittest.cc index 1dca002..9c6a70f 100644 --- a/services/resource_coordinator/coordination_unit/metrics_collector_unittest.cc +++ b/services/resource_coordinator/coordination_unit/metrics_collector_unittest.cc
@@ -4,16 +4,22 @@ #include "services/resource_coordinator/coordination_unit/metrics_collector.h" -#include <string> - #include "base/test/histogram_tester.h" #include "base/test/simple_test_tick_clock.h" +#include "build/build_config.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_impl_unittest_util.h" namespace resource_coordinator { +const base::TimeDelta kTestMetricsReportDelayTimeout = + kMetricsReportDelayTimeout + base::TimeDelta::FromSeconds(1); +const base::TimeDelta kTestMaxAudioSlientTimeout = + kMaxAudioSlientTimeout + base::TimeDelta::FromSeconds(1); + class MetricsCollectorTest : public CoordinationUnitImplTestBase { public: + MetricsCollectorTest() : CoordinationUnitImplTestBase() {} + void SetUp() override { MetricsCollector* metrics_collector = new MetricsCollector(); const_cast<base::TickClock*&>(metrics_collector->clock_) = &clock_; @@ -26,20 +32,31 @@ base::HistogramTester histogram_tester_; base::SimpleTestTickClock clock_; + + private: + DISALLOW_COPY_AND_ASSIGN(MetricsCollectorTest); }; -TEST_F(MetricsCollectorTest, FromBackgroundedToFirstAudioStartsUMA) { - CoordinationUnitID tab_cu_id(CoordinationUnitType::kWebContents, - std::string()); - CoordinationUnitID frame_cu_id(CoordinationUnitType::kFrame, std::string()); - - auto web_contents_cu = CreateCoordinationUnit(tab_cu_id); - auto frame_cu = CreateCoordinationUnit(frame_cu_id); +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstAudioStartsUMA \ + DISABLED_FromBackgroundedToFirstAudioStartsUMA +#else +#define MAYBE_FromBackgroundedToFirstAudioStartsUMA \ + FromBackgroundedToFirstAudioStartsUMA +#endif +TEST_F(MetricsCollectorTest, MAYBE_FromBackgroundedToFirstAudioStartsUMA) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + auto frame_cu = CreateCoordinationUnit(CoordinationUnitType::kFrame); coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); web_contents_cu->AddChild(frame_cu->id()); + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + AdvanceClock(kTestMetricsReportDelayTimeout); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); frame_cu->SetProperty(mojom::PropertyType::kAudible, true); // The tab is not backgrounded, thus no metrics recorded. @@ -54,7 +71,7 @@ 0); frame_cu->SetProperty(mojom::PropertyType::kAudible, false); - AdvanceClock(base::TimeDelta::FromMinutes(1)); + AdvanceClock(kTestMaxAudioSlientTimeout); web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); frame_cu->SetProperty(mojom::PropertyType::kAudible, true); // The tab was not recently audible but it is not backgrounded, thus no @@ -64,133 +81,217 @@ frame_cu->SetProperty(mojom::PropertyType::kAudible, false); web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); - AdvanceClock(base::TimeDelta::FromSeconds(61)); + AdvanceClock(kTestMaxAudioSlientTimeout); frame_cu->SetProperty(mojom::PropertyType::kAudible, true); // The tab was not recently audible and it is backgrounded, thus metrics // recorded. histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAudioStartsUMA, 1); -} - -TEST_F(MetricsCollectorTest, ReportMetricsOneTimeOnlyPerBackgrounded) { - CoordinationUnitID tab_cu_id(CoordinationUnitType::kWebContents, - std::string()); - CoordinationUnitID frame_cu_id(CoordinationUnitType::kFrame, std::string()); - - auto web_contents_cu = CreateCoordinationUnit(tab_cu_id); - auto frame_cu = CreateCoordinationUnit(frame_cu_id); - coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); - - web_contents_cu->AddChild(frame_cu->id()); - - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); - frame_cu->SetProperty(mojom::PropertyType::kAudible, false); - AdvanceClock(base::TimeDelta::FromSeconds(61)); - frame_cu->SetProperty(mojom::PropertyType::kAudible, true); - // The tab was not recently audible and it is backgrounded, thus metrics - // recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAudioStartsUMA, - 1); - - frame_cu->SetProperty(mojom::PropertyType::kAudible, false); - AdvanceClock(base::TimeDelta::FromSeconds(61)); - frame_cu->SetProperty(mojom::PropertyType::kAudible, true); - // Only record the metrics once. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAudioStartsUMA, - 1); web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); - frame_cu->SetProperty(mojom::PropertyType::kAudible, false); - AdvanceClock(base::TimeDelta::FromSeconds(61)); + AdvanceClock(kTestMaxAudioSlientTimeout); frame_cu->SetProperty(mojom::PropertyType::kAudible, true); // The tab becomes visible and then invisible again, thus metrics recorded. histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAudioStartsUMA, 2); } -TEST_F(MetricsCollectorTest, FromBackgroundedToFirstTitleUpdatedUMA) { - CoordinationUnitID tab_cu_id(CoordinationUnitType::kWebContents, - std::string()); - - auto web_contents_cu = CreateCoordinationUnit(tab_cu_id); - coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); - - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); - web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); - // The tab is not backgrounded, thus no metrics recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, - 0); - - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); - web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); - // The tab is backgrounded, thus metrics recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, - 1); - web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); - // Metrics should only be recorded once per background period, thus metrics - // not recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, - 1); - - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); - web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); - // The tab is backgrounded from foregrounded, thus metrics recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, - 2); -} - -TEST_F(MetricsCollectorTest, FromBackgroundedToFirstAlertFiredUMA) { - CoordinationUnitID tab_cu_id(CoordinationUnitType::kWebContents, - std::string()); - CoordinationUnitID frame_cu_id(CoordinationUnitType::kFrame, std::string()); - - auto web_contents_cu = CreateCoordinationUnit(tab_cu_id); - auto frame_cu = CreateCoordinationUnit(frame_cu_id); - coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); - coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); - web_contents_cu->AddChild(frame_cu->id()); - - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); - frame_cu->SendEvent(mojom::Event::kAlertFired); - // The tab is not backgrounded, thus no metrics recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, - 0); - - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); - frame_cu->SendEvent(mojom::Event::kAlertFired); - // The tab is backgrounded, thus metrics recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, - 1); - frame_cu->SendEvent(mojom::Event::kAlertFired); - // Metrics should only be recorded once per background period, thus metrics - // not recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, - 1); - - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); - web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); - frame_cu->SendEvent(mojom::Event::kAlertFired); - // The tab is backgrounded from foregrounded, thus metrics recorded. - histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, - 2); -} - +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstAudioStartsUMA5MinutesTimeout \ + DISABLED_FromBackgroundedToFirstAudioStartsUMA5MinutesTimeout +#else +#define MAYBE_FromBackgroundedToFirstAudioStartsUMA5MinutesTimeout \ + FromBackgroundedToFirstAudioStartsUMA5MinutesTimeout +#endif TEST_F(MetricsCollectorTest, - FromBackgroundedToFirstNonPersistentNotificationCreatedUMA) { - CoordinationUnitID tab_cu_id(CoordinationUnitType::kWebContents, - std::string()); - CoordinationUnitID frame_cu_id(CoordinationUnitType::kFrame, std::string()); + MAYBE_FromBackgroundedToFirstAudioStartsUMA5MinutesTimeout) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + auto frame_cu = CreateCoordinationUnit(CoordinationUnitType::kFrame); + coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); - auto web_contents_cu = CreateCoordinationUnit(tab_cu_id); - auto frame_cu = CreateCoordinationUnit(frame_cu_id); + web_contents_cu->AddChild(frame_cu->id()); + + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + frame_cu->SetProperty(mojom::PropertyType::kAudible, true); + // The tab is within 5 minutes after main frame navigation was committed, thus + // no metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAudioStartsUMA, + 0); + frame_cu->SetProperty(mojom::PropertyType::kAudible, false); + AdvanceClock(kTestMetricsReportDelayTimeout); + frame_cu->SetProperty(mojom::PropertyType::kAudible, true); + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAudioStartsUMA, + 1); +} + +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstTitleUpdatedUMA \ + DISABLED_FromBackgroundedToFirstTitleUpdatedUMA +#else +#define MAYBE_FromBackgroundedToFirstTitleUpdatedUMA \ + FromBackgroundedToFirstTitleUpdatedUMA +#endif +TEST_F(MetricsCollectorTest, MAYBE_FromBackgroundedToFirstTitleUpdatedUMA) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + AdvanceClock(kTestMetricsReportDelayTimeout); + + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); + web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); + // The tab is not backgrounded, thus no metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, + 0); + + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); + // The tab is backgrounded, thus metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, + 1); + web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); + // Metrics should only be recorded once per background period, thus metrics + // not recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, + 1); + + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); + // The tab is backgrounded from foregrounded, thus metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, + 2); +} + +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstTitleUpdatedUMA5MinutesTimeout \ + DISABLED_FromBackgroundedToFirstTitleUpdatedUMA5MinutesTimeout +#else +#define MAYBE_FromBackgroundedToFirstTitleUpdatedUMA5MinutesTimeout \ + FromBackgroundedToFirstTitleUpdatedUMA5MinutesTimeout +#endif +TEST_F(MetricsCollectorTest, + MAYBE_FromBackgroundedToFirstTitleUpdatedUMA5MinutesTimeout) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); + // The tab is within 5 minutes after main frame navigation was committed, thus + // no metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, + 0); + AdvanceClock(kTestMetricsReportDelayTimeout); + web_contents_cu->SendEvent(mojom::Event::kTitleUpdated); + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstTitleUpdatedUMA, + 1); +} + +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstAlertFiredUMA \ + DISABLED_FromBackgroundedToFirstAlertFiredUMA +#else +#define MAYBE_FromBackgroundedToFirstAlertFiredUMA \ + FromBackgroundedToFirstAlertFiredUMA +#endif +TEST_F(MetricsCollectorTest, MAYBE_FromBackgroundedToFirstAlertFiredUMA) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + auto frame_cu = CreateCoordinationUnit(CoordinationUnitType::kFrame); coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); web_contents_cu->AddChild(frame_cu->id()); + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + AdvanceClock(kTestMetricsReportDelayTimeout); + + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); + frame_cu->SendEvent(mojom::Event::kAlertFired); + // The tab is not backgrounded, thus no metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, + 0); + + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + frame_cu->SendEvent(mojom::Event::kAlertFired); + // The tab is backgrounded, thus metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, + 1); + frame_cu->SendEvent(mojom::Event::kAlertFired); + // Metrics should only be recorded once per background period, thus metrics + // not recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, + 1); + + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + frame_cu->SendEvent(mojom::Event::kAlertFired); + // The tab is backgrounded from foregrounded, thus metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, + 2); +} + +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstAlertFiredUMA5MinutesTimeout \ + DISABLED_FromBackgroundedToFirstAlertFiredUMA5MinutesTimeout +#else +#define MAYBE_FromBackgroundedToFirstAlertFiredUMA5MinutesTimeout \ + FromBackgroundedToFirstAlertFiredUMA5MinutesTimeout +#endif +TEST_F(MetricsCollectorTest, + MAYBE_FromBackgroundedToFirstAlertFiredUMA5MinutesTimeout) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + auto frame_cu = CreateCoordinationUnit(CoordinationUnitType::kFrame); + coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + web_contents_cu->AddChild(frame_cu->id()); + + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + frame_cu->SendEvent(mojom::Event::kAlertFired); + // The tab is within 5 minutes after main frame navigation was committed, thus + // no metrics recorded. + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, + 0); + AdvanceClock(kTestMetricsReportDelayTimeout); + frame_cu->SendEvent(mojom::Event::kAlertFired); + histogram_tester_.ExpectTotalCount(kTabFromBackgroundedToFirstAlertFiredUMA, + 1); +} + +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA \ + DISABLED_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA +#else +#define MAYBE_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA \ + FromBackgroundedToFirstNonPersistentNotificationCreatedUMA +#endif +TEST_F(MetricsCollectorTest, + MAYBE_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + auto frame_cu = CreateCoordinationUnit(CoordinationUnitType::kFrame); + coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + web_contents_cu->AddChild(frame_cu->id()); + + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + AdvanceClock(kTestMetricsReportDelayTimeout); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); frame_cu->SendEvent(mojom::Event::kNonPersistentNotificationCreated); // The tab is not backgrounded, thus no metrics recorded. @@ -216,12 +317,52 @@ kTabFromBackgroundedToFirstNonPersistentNotificationCreatedUMA, 2); } -TEST_F(MetricsCollectorTest, FromBackgroundedToFirstFaviconUpdatedUMA) { - CoordinationUnitID tab_cu_id(CoordinationUnitType::kWebContents, - std::string()); - - auto web_contents_cu = CreateCoordinationUnit(tab_cu_id); +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA5MinutesTimeout \ + DISABLED_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA5MinutesTimeout +#else +#define MAYBE_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA5MinutesTimeout \ + FromBackgroundedToFirstNonPersistentNotificationCreatedUMA5MinutesTimeout +#endif +TEST_F( + MetricsCollectorTest, + MAYBE_FromBackgroundedToFirstNonPersistentNotificationCreatedUMA5MinutesTimeout) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + auto frame_cu = CreateCoordinationUnit(CoordinationUnitType::kFrame); coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + coordination_unit_manager().OnCoordinationUnitCreated(frame_cu.get()); + web_contents_cu->AddChild(frame_cu->id()); + + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + frame_cu->SendEvent(mojom::Event::kNonPersistentNotificationCreated); + // The tab is within 5 minutes after main frame navigation was committed, thus + // no metrics recorded. + histogram_tester_.ExpectTotalCount( + kTabFromBackgroundedToFirstNonPersistentNotificationCreatedUMA, 0); + AdvanceClock(kTestMetricsReportDelayTimeout); + frame_cu->SendEvent(mojom::Event::kNonPersistentNotificationCreated); + histogram_tester_.ExpectTotalCount( + kTabFromBackgroundedToFirstNonPersistentNotificationCreatedUMA, 1); +} + +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstFaviconUpdatedUMA \ + DISABLED_FromBackgroundedToFirstFaviconUpdatedUMA +#else +#define MAYBE_FromBackgroundedToFirstFaviconUpdatedUMA \ + FromBackgroundedToFirstFaviconUpdatedUMA +#endif +TEST_F(MetricsCollectorTest, MAYBE_FromBackgroundedToFirstFaviconUpdatedUMA) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + AdvanceClock(kTestMetricsReportDelayTimeout); web_contents_cu->SetProperty(mojom::PropertyType::kVisible, true); web_contents_cu->SendEvent(mojom::Event::kFaviconUpdated); @@ -248,4 +389,31 @@ kTabFromBackgroundedToFirstFaviconUpdatedUMA, 2); } +// TODO(crbug.com/759905) Enable on Windows once this bug is fixed. +#if defined(OS_WIN) +#define MAYBE_FromBackgroundedToFirstFaviconUpdatedUMA5MinutesTimeout \ + DISABLED_FromBackgroundedToFirstFaviconUpdatedUMA5MinutesTimeout +#else +#define MAYBE_FromBackgroundedToFirstFaviconUpdatedUMA5MinutesTimeout \ + FromBackgroundedToFirstFaviconUpdatedUMA5MinutesTimeout +#endif +TEST_F(MetricsCollectorTest, + MAYBE_FromBackgroundedToFirstFaviconUpdatedUMA5MinutesTimeout) { + auto web_contents_cu = + CreateCoordinationUnit(CoordinationUnitType::kWebContents); + coordination_unit_manager().OnCoordinationUnitCreated(web_contents_cu.get()); + + web_contents_cu->SendEvent(mojom::Event::kNavigationCommitted); + web_contents_cu->SetProperty(mojom::PropertyType::kVisible, false); + web_contents_cu->SendEvent(mojom::Event::kFaviconUpdated); + // The tab is within 5 minutes after main frame navigation was committed, thus + // no metrics recorded. + histogram_tester_.ExpectTotalCount( + kTabFromBackgroundedToFirstFaviconUpdatedUMA, 0); + AdvanceClock(kTestMetricsReportDelayTimeout); + web_contents_cu->SendEvent(mojom::Event::kFaviconUpdated); + histogram_tester_.ExpectTotalCount( + kTabFromBackgroundedToFirstFaviconUpdatedUMA, 1); +} + } // namespace resource_coordinator
diff --git a/services/resource_coordinator/public/interfaces/signals.mojom b/services/resource_coordinator/public/interfaces/signals.mojom index 295d4b6..bf8aec8 100644 --- a/services/resource_coordinator/public/interfaces/signals.mojom +++ b/services/resource_coordinator/public/interfaces/signals.mojom
@@ -8,6 +8,8 @@ kTestEvent, kAlertFired, kFaviconUpdated, + // This event signal is received when main frame navigation is committed. + kNavigationCommitted, // Only care about non-persistent notifications, notifications launched from // ServiceWorker are persistent and compatible with LifeCycle. kNonPersistentNotificationCreated,
diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java index 3f8af4c6..8198154 100644 --- a/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java +++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java
@@ -38,13 +38,6 @@ @Override public void detect(org.chromium.skia.mojom.Bitmap bitmapData, DetectResponse callback) { - if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable( - ContextUtils.getApplicationContext()) - != ConnectionResult.SUCCESS) { - Log.e(TAG, "Google Play Services not available"); - callback.call(new BarcodeDetectionResult[0]); - return; - } // The vision library will be downloaded the first time the API is used // on the device; this happens "fast", but it might have not completed, // bail in this case. Also, the API was disabled between and v.9.0 and @@ -104,6 +97,12 @@ @Override public BarcodeDetection createImpl() { + if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable( + ContextUtils.getApplicationContext()) + != ConnectionResult.SUCCESS) { + Log.e(TAG, "Google Play Services not available"); + return null; + } return new BarcodeDetectionImpl(); } }
diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java index 5f1498c..208c8a4 100644 --- a/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java +++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java
@@ -36,13 +36,6 @@ @Override public void detect(org.chromium.skia.mojom.Bitmap bitmapData, DetectResponse callback) { - if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable( - ContextUtils.getApplicationContext()) - != ConnectionResult.SUCCESS) { - Log.e(TAG, "Google Play Services not available"); - callback.call(new TextDetectionResult[0]); - return; - } // The vision library will be downloaded the first time the API is used // on the device; this happens "fast", but it might have not completed, // bail in this case. Also, the API was disabled between and v.9.0 and @@ -94,6 +87,12 @@ @Override public TextDetection createImpl() { + if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable( + ContextUtils.getApplicationContext()) + != ConnectionResult.SUCCESS) { + Log.e(TAG, "Google Play Services not available"); + return null; + } return new TextDetectionImpl(); } }
diff --git a/services/ui/gpu/gpu_main.cc b/services/ui/gpu/gpu_main.cc index 4af3ff6..0916374 100644 --- a/services/ui/gpu/gpu_main.cc +++ b/services/ui/gpu/gpu_main.cc
@@ -156,7 +156,7 @@ gpu_init_.reset(new gpu::GpuInit()); gpu_init_->set_sandbox_helper(this); bool success = gpu_init_->InitializeAndStartSandbox( - *base::CommandLine::ForCurrentProcess(), kInProcessGpu); + base::CommandLine::ForCurrentProcess(), kInProcessGpu); if (!success) return;
diff --git a/services/ui/ws/display.cc b/services/ui/ws/display.cc index 125853af..b55ad82 100644 --- a/services/ui/ws/display.cc +++ b/services/ui/ws/display.cc
@@ -393,8 +393,10 @@ } } - UpdateTextInputState(new_focused_window, - new_focused_window->text_input_state()); + if (new_focused_window) { + UpdateTextInputState(new_focused_window, + new_focused_window->text_input_state()); + } } void Display::OnUserIdRemoved(const UserId& id) {
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 81c998d..e3b5554 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -224,6 +224,10 @@ #define SK_JUMPER_LEGACY_X86_8BIT #endif +#ifndef SK_LEGACY_SUPPORT_INTEGER_SMALL_RADII +#define SK_LEGACY_SUPPORT_INTEGER_SMALL_RADII +#endif + ///////////////////////// Imported from BUILD.gn and skia_common.gypi /* In some places Skia can use static initializers for global initialization,
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index a2abefd..e42e10f 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -2296,7 +2296,7 @@ { "args": [ "--enable-xml-result-parsing", - "--shard-timeout=300" + "--shard-timeout=500" ], "name": "angle_deqp_gles2_gles_tests", "swarming": { @@ -2333,7 +2333,7 @@ { "args": [ "--enable-xml-result-parsing", - "--shard-timeout=300" + "--shard-timeout=500" ], "name": "angle_deqp_gles3_gles_tests", "swarming": {
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 39b6a02..b1612be0 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -68,7 +68,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -98,7 +98,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -130,7 +130,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -160,7 +160,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -192,7 +192,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -222,7 +222,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -254,7 +254,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -284,7 +284,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -316,7 +316,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -346,7 +346,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -378,7 +378,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -408,7 +408,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -440,7 +440,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -470,7 +470,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -502,7 +502,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -532,7 +532,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -564,7 +564,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -594,7 +594,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -626,7 +626,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -656,7 +656,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -688,7 +688,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -718,7 +718,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -750,7 +750,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -780,7 +780,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -812,7 +812,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -833,7 +833,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -863,7 +863,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -895,7 +895,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -925,7 +925,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -957,7 +957,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -987,7 +987,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1019,7 +1019,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1049,7 +1049,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1081,7 +1081,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1111,7 +1111,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1143,7 +1143,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1173,7 +1173,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1205,7 +1205,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1226,7 +1226,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1235,68 +1235,6 @@ }, { "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:22b1", - "id": "build144-b1", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:22b1", - "id": "build144-b1", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ "jetstream", "-v", "--upload-results", @@ -1318,7 +1256,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -1350,7 +1288,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -1380,7 +1318,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1412,7 +1350,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1433,7 +1371,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1463,7 +1401,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -1495,7 +1433,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -1525,7 +1463,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1557,7 +1495,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1587,7 +1525,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1619,7 +1557,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1649,7 +1587,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1681,7 +1619,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1711,7 +1649,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1743,7 +1681,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1773,7 +1711,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1805,7 +1743,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1835,7 +1773,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1867,7 +1805,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1897,7 +1835,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1929,7 +1867,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1959,7 +1897,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1991,7 +1929,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2021,7 +1959,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2053,7 +1991,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2074,7 +2012,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2104,7 +2042,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2134,7 +2072,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2166,7 +2104,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2196,7 +2134,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2228,7 +2166,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2258,7 +2196,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2290,7 +2228,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2320,7 +2258,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2352,7 +2290,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2382,7 +2320,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2414,7 +2352,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2444,7 +2382,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2476,7 +2414,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2506,7 +2444,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2538,7 +2476,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2568,7 +2506,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2600,7 +2538,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2630,7 +2568,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2662,7 +2600,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2692,7 +2630,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2724,7 +2662,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2754,7 +2692,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2786,7 +2724,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2816,7 +2754,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2848,7 +2786,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2878,7 +2816,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2910,7 +2848,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2940,7 +2878,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2972,7 +2910,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3002,7 +2940,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3034,7 +2972,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3064,7 +3002,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3096,7 +3034,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3126,7 +3064,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3158,7 +3096,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3188,7 +3126,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3220,7 +3158,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3250,7 +3188,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3282,7 +3220,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3312,7 +3250,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3344,7 +3282,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3374,7 +3312,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3406,7 +3344,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3436,7 +3374,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3468,7 +3406,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3498,7 +3436,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3530,7 +3468,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3560,7 +3498,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3592,7 +3530,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3622,7 +3560,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3654,7 +3592,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3684,7 +3622,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3716,7 +3654,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3746,7 +3684,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3778,7 +3716,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3808,7 +3746,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3840,7 +3778,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3870,7 +3808,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3902,7 +3840,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3932,7 +3870,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3964,7 +3902,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3994,7 +3932,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4026,7 +3964,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4056,7 +3994,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4088,7 +4026,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4118,7 +4056,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4150,7 +4088,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4180,7 +4118,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4212,7 +4150,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4233,7 +4171,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4263,7 +4201,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4295,7 +4233,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4325,7 +4263,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4357,7 +4295,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4387,7 +4325,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4419,7 +4357,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4449,7 +4387,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4481,7 +4419,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4515,7 +4453,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4547,7 +4485,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4577,7 +4515,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4609,7 +4547,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4639,7 +4577,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4671,7 +4609,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4701,7 +4639,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4733,7 +4671,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4763,7 +4701,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4795,7 +4733,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4825,7 +4763,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4857,7 +4795,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4887,7 +4825,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4919,7 +4857,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4949,7 +4887,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4981,7 +4919,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5011,7 +4949,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5043,7 +4981,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5073,7 +5011,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5105,7 +5043,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5135,7 +5073,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5167,7 +5105,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5197,7 +5135,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5229,7 +5167,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5259,7 +5197,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5291,7 +5229,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5321,7 +5259,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5353,7 +5291,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5383,7 +5321,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5415,7 +5353,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5445,7 +5383,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5477,7 +5415,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5507,7 +5445,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5539,7 +5477,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5569,7 +5507,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5601,69 +5539,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:9874", - "id": "build208-b4", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:9874", - "id": "build208-b4", - "os": "Windows-10-10586", - "pool": "Chrome-perf-fyi" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5693,7 +5569,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -5725,7 +5601,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -5755,7 +5631,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5787,7 +5663,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5817,7 +5693,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -5849,7 +5725,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -5879,7 +5755,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5911,7 +5787,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5941,7 +5817,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5973,7 +5849,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6003,7 +5879,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6035,7 +5911,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6065,7 +5941,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6097,7 +5973,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6127,7 +6003,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6159,7 +6035,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6189,7 +6065,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6221,7 +6097,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6251,7 +6127,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6283,7 +6159,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6313,7 +6189,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6345,7 +6221,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6375,7 +6251,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6407,7 +6283,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6437,7 +6313,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6467,7 +6343,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6499,7 +6375,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6529,7 +6405,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6561,7 +6437,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6591,7 +6467,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6623,7 +6499,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6653,7 +6529,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6685,7 +6561,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6715,7 +6591,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6747,7 +6623,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6777,7 +6653,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6809,7 +6685,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6839,7 +6715,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6871,7 +6747,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6901,7 +6777,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6933,7 +6809,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6963,7 +6839,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6995,7 +6871,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7025,7 +6901,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7057,7 +6933,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7087,7 +6963,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7119,7 +6995,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7149,7 +7025,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7181,7 +7057,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7211,7 +7087,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7243,7 +7119,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7273,7 +7149,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7305,7 +7181,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7335,7 +7211,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7367,7 +7243,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7397,7 +7273,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7429,7 +7305,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7459,7 +7335,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7491,7 +7367,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7521,7 +7397,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7553,7 +7429,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7583,7 +7459,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7615,7 +7491,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7645,7 +7521,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7677,7 +7553,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7707,7 +7583,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7739,7 +7615,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7769,7 +7645,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7801,7 +7677,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7831,7 +7707,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7863,7 +7739,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7893,7 +7769,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7925,7 +7801,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7955,7 +7831,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7987,7 +7863,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8017,7 +7893,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8049,7 +7925,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8079,7 +7955,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8111,7 +7987,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8141,7 +8017,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8173,7 +8049,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8203,7 +8079,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8235,7 +8111,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8265,7 +8141,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8297,7 +8173,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8327,7 +8203,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8359,7 +8235,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8389,7 +8265,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8421,7 +8297,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8451,7 +8327,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8483,7 +8359,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8513,7 +8389,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8545,7 +8421,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8575,7 +8451,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8607,7 +8483,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8637,7 +8513,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8669,7 +8545,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8699,7 +8575,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8731,7 +8607,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8761,7 +8637,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8793,7 +8669,7 @@ "pool": "Chrome-perf-fyi" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600,
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 888ef13..8c5356f 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -31,7 +31,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63,7 +63,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93,7 +93,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -125,7 +125,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -155,7 +155,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -187,7 +187,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -217,7 +217,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -249,7 +249,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -279,7 +279,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -311,7 +311,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -341,7 +341,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -373,7 +373,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -403,7 +403,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -435,7 +435,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -465,7 +465,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -497,7 +497,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -527,7 +527,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -559,7 +559,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -589,7 +589,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -621,7 +621,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -651,7 +651,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -683,7 +683,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -713,7 +713,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -745,7 +745,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -766,7 +766,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -796,7 +796,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -828,7 +828,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -858,7 +858,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -890,7 +890,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -920,7 +920,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -952,7 +952,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -982,7 +982,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1014,7 +1014,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1044,7 +1044,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1076,7 +1076,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1106,7 +1106,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1138,7 +1138,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1159,7 +1159,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1168,68 +1168,6 @@ }, { "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=android-chromium", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build14-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build14-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ "jetstream", "-v", "--upload-results", @@ -1251,7 +1189,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -1283,7 +1221,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -1313,7 +1251,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1345,7 +1283,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1375,7 +1313,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": false, "io_timeout": 600, @@ -1407,7 +1345,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": true, "io_timeout": 600, @@ -1437,7 +1375,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1469,7 +1407,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1499,7 +1437,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1531,7 +1469,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1561,7 +1499,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1593,7 +1531,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1623,7 +1561,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1655,7 +1593,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1685,7 +1623,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1717,7 +1655,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1747,7 +1685,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1779,7 +1717,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1809,7 +1747,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1841,7 +1779,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1871,7 +1809,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1903,7 +1841,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -1933,7 +1871,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1963,7 +1901,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -1995,7 +1933,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2025,7 +1963,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2057,7 +1995,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2087,7 +2025,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2119,7 +2057,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2149,7 +2087,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2181,7 +2119,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2211,7 +2149,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2243,7 +2181,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2273,7 +2211,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2305,7 +2243,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2335,7 +2273,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2367,7 +2305,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2397,7 +2335,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2429,7 +2367,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2459,7 +2397,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2491,7 +2429,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2521,7 +2459,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2553,7 +2491,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2583,7 +2521,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2615,7 +2553,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2645,7 +2583,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2677,7 +2615,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2707,7 +2645,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2739,7 +2677,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2769,7 +2707,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2801,7 +2739,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2831,7 +2769,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2863,7 +2801,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2893,7 +2831,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2925,7 +2863,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -2955,7 +2893,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -2987,7 +2925,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3017,7 +2955,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3049,7 +2987,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3079,7 +3017,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3111,7 +3049,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3141,7 +3079,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3173,7 +3111,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3203,7 +3141,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3235,7 +3173,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3265,7 +3203,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3297,7 +3235,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3327,7 +3265,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3359,7 +3297,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3389,7 +3327,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3421,7 +3359,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3451,7 +3389,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3483,7 +3421,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3513,7 +3451,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3545,7 +3483,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3575,7 +3513,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3607,7 +3545,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3637,7 +3575,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3669,7 +3607,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3699,7 +3637,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3731,7 +3669,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3761,7 +3699,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3793,7 +3731,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3823,7 +3761,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3855,7 +3793,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3885,7 +3823,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3917,7 +3855,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -3947,7 +3885,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -3979,7 +3917,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4009,7 +3947,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4041,7 +3979,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4071,7 +4009,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4103,7 +4041,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4133,7 +4071,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4165,7 +4103,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4195,7 +4133,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4227,7 +4165,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4257,7 +4195,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4289,7 +4227,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4319,7 +4257,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4351,7 +4289,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4381,7 +4319,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4413,7 +4351,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4443,7 +4381,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4475,7 +4413,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4505,7 +4443,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4537,7 +4475,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4567,7 +4505,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4599,7 +4537,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4629,7 +4567,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4661,7 +4599,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4691,7 +4629,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4723,7 +4661,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4753,7 +4691,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4785,7 +4723,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4815,7 +4753,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4847,7 +4785,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4868,7 +4806,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4898,7 +4836,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4930,7 +4868,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -4960,7 +4898,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -4992,7 +4930,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5022,7 +4960,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5054,7 +4992,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5084,7 +5022,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5116,7 +5054,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5150,7 +5088,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5182,7 +5120,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5212,7 +5150,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5244,7 +5182,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5274,7 +5212,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5306,7 +5244,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5336,7 +5274,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5368,7 +5306,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5398,7 +5336,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5430,7 +5368,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5460,7 +5398,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5492,7 +5430,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5522,7 +5460,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5554,7 +5492,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5584,7 +5522,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5616,7 +5554,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5646,7 +5584,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5678,7 +5616,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5708,7 +5646,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5740,7 +5678,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5770,7 +5708,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5802,7 +5740,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5832,7 +5770,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5864,7 +5802,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5894,7 +5832,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5926,7 +5864,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -5956,7 +5894,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -5988,7 +5926,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6018,7 +5956,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6050,7 +5988,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6080,7 +6018,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6112,7 +6050,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6142,7 +6080,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6174,7 +6112,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6195,7 +6133,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6204,68 +6142,6 @@ }, { "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=android-chromium", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build74-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build74-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ "jetstream", "-v", "--upload-results", @@ -6287,7 +6163,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -6319,7 +6195,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -6349,7 +6225,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6381,7 +6257,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6411,7 +6287,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": false, "io_timeout": 600, @@ -6443,7 +6319,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": true, "io_timeout": 600, @@ -6473,7 +6349,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6505,7 +6381,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6535,7 +6411,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6567,7 +6443,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6597,7 +6473,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6629,7 +6505,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6659,7 +6535,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6691,7 +6567,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6721,7 +6597,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6753,7 +6629,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6783,7 +6659,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6815,7 +6691,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6845,7 +6721,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6877,7 +6753,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6907,7 +6783,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6939,7 +6815,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -6969,7 +6845,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -6999,7 +6875,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7031,7 +6907,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7061,7 +6937,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7093,7 +6969,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7123,7 +6999,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7155,7 +7031,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7185,7 +7061,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7217,7 +7093,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7247,7 +7123,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7279,7 +7155,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7309,7 +7185,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7341,7 +7217,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7371,7 +7247,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7403,7 +7279,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7433,7 +7309,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7465,7 +7341,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7495,7 +7371,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7527,7 +7403,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7557,7 +7433,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7589,7 +7465,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7619,7 +7495,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7651,7 +7527,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7681,7 +7557,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7713,7 +7589,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7743,7 +7619,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7775,7 +7651,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7805,7 +7681,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7837,7 +7713,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7867,7 +7743,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7899,7 +7775,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7929,7 +7805,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -7961,7 +7837,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -7991,7 +7867,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8023,7 +7899,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8053,7 +7929,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8085,7 +7961,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8115,7 +7991,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8147,7 +8023,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8177,7 +8053,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8209,7 +8085,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8239,7 +8115,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8271,7 +8147,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8301,7 +8177,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8333,7 +8209,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8363,7 +8239,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8395,7 +8271,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8425,7 +8301,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8457,7 +8333,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8487,7 +8363,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8519,7 +8395,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8549,7 +8425,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8581,7 +8457,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8611,7 +8487,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8643,7 +8519,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8673,7 +8549,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8705,7 +8581,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8735,7 +8611,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8767,7 +8643,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8797,7 +8673,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8829,7 +8705,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8859,7 +8735,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8891,7 +8767,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8921,7 +8797,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -8953,7 +8829,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -8983,7 +8859,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9015,7 +8891,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9045,7 +8921,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9077,7 +8953,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9107,7 +8983,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9139,7 +9015,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9169,7 +9045,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9201,7 +9077,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9231,7 +9107,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9263,7 +9139,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9293,7 +9169,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9325,7 +9201,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9355,7 +9231,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9387,7 +9263,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9417,7 +9293,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9449,7 +9325,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9479,7 +9355,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9511,7 +9387,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9541,7 +9417,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9573,7 +9449,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9603,7 +9479,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9635,7 +9511,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9665,7 +9541,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9697,7 +9573,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9727,7 +9603,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9759,7 +9635,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9789,7 +9665,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9821,7 +9697,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9851,7 +9727,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9883,7 +9759,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9904,7 +9780,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9934,7 +9810,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -9966,7 +9842,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -9996,7 +9872,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10028,7 +9904,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -10058,7 +9934,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10090,7 +9966,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -10120,7 +9996,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10152,7 +10028,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -10187,7 +10063,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10218,7 +10094,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10249,7 +10125,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10280,7 +10156,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10311,7 +10187,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10342,7 +10218,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10373,7 +10249,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10404,7 +10280,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10435,7 +10311,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10466,7 +10342,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10497,7 +10373,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10528,7 +10404,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10559,7 +10435,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10590,7 +10466,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10621,7 +10497,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10652,7 +10528,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10683,38 +10559,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=android-webview", - "--output-format=chartjson", - "--webview-embedder-apk=../../out/Release/apks/SystemWebViewShell.apk" - ], - "isolate_name": "telemetry_perf_webview_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_webview_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build166-b1--device1", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10745,7 +10590,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -10776,7 +10621,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10807,7 +10652,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": false, "io_timeout": 600, @@ -10838,7 +10683,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10869,7 +10714,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10900,7 +10745,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10931,7 +10776,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10962,7 +10807,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -10993,7 +10838,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11024,7 +10869,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11055,7 +10900,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11086,7 +10931,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11117,7 +10962,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11148,7 +10993,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11179,7 +11024,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11210,7 +11055,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11241,7 +11086,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11272,7 +11117,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11303,7 +11148,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11334,7 +11179,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11365,7 +11210,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11396,7 +11241,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11427,7 +11272,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11458,7 +11303,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11489,7 +11334,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11520,7 +11365,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11551,7 +11396,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11582,7 +11427,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11613,7 +11458,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11644,7 +11489,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11675,7 +11520,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11706,7 +11551,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11737,7 +11582,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11768,7 +11613,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11799,7 +11644,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11830,7 +11675,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11861,7 +11706,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11892,7 +11737,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11923,7 +11768,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11954,7 +11799,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -11985,7 +11830,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12016,7 +11861,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12047,7 +11892,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12078,7 +11923,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12109,7 +11954,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12140,7 +11985,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12171,7 +12016,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12202,7 +12047,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12233,7 +12078,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12264,7 +12109,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12295,7 +12140,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12326,7 +12171,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12357,7 +12202,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12388,7 +12233,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12419,7 +12264,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12450,7 +12295,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12481,7 +12326,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12512,7 +12357,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12543,7 +12388,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12577,7 +12422,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12609,7 +12454,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -12639,7 +12484,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12671,7 +12516,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -12701,7 +12546,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12733,7 +12578,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -12763,7 +12608,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12795,7 +12640,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -12825,7 +12670,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12857,7 +12702,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -12887,7 +12732,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12919,7 +12764,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -12949,7 +12794,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -12981,7 +12826,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13011,7 +12856,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13043,7 +12888,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13073,7 +12918,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13105,7 +12950,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13135,7 +12980,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13167,7 +13012,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13197,7 +13042,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13229,7 +13074,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13259,7 +13104,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13291,7 +13136,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13312,7 +13157,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13342,7 +13187,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13374,7 +13219,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13404,7 +13249,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13436,7 +13281,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13466,7 +13311,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13498,7 +13343,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13528,7 +13373,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13560,7 +13405,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13590,7 +13435,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13622,7 +13467,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13652,7 +13497,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13684,7 +13529,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13705,7 +13550,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13714,68 +13559,6 @@ }, { "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=android-chromium", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build16-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build16-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ "jetstream", "-v", "--upload-results", @@ -13797,7 +13580,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -13829,7 +13612,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -13859,7 +13642,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -13891,7 +13674,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -13921,7 +13704,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": false, "io_timeout": 600, @@ -13953,7 +13736,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": true, "io_timeout": 600, @@ -13983,7 +13766,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14015,7 +13798,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14045,7 +13828,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14077,7 +13860,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14107,7 +13890,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14139,7 +13922,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14169,7 +13952,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14201,7 +13984,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14231,7 +14014,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14263,7 +14046,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14293,7 +14076,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14325,7 +14108,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14355,7 +14138,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14387,7 +14170,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14417,7 +14200,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14449,7 +14232,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14479,7 +14262,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14509,7 +14292,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14541,7 +14324,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14571,7 +14354,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14603,7 +14386,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14633,7 +14416,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14665,7 +14448,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14695,7 +14478,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14727,7 +14510,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14757,7 +14540,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14789,7 +14572,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14819,7 +14602,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14851,7 +14634,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14881,7 +14664,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14913,7 +14696,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -14943,7 +14726,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -14975,7 +14758,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15005,7 +14788,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15037,7 +14820,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15067,7 +14850,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15099,7 +14882,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15129,7 +14912,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15161,7 +14944,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15191,7 +14974,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15223,7 +15006,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15253,7 +15036,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15285,7 +15068,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15315,7 +15098,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15347,7 +15130,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15377,7 +15160,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15409,7 +15192,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15439,7 +15222,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15471,7 +15254,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15501,7 +15284,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15533,7 +15316,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15563,7 +15346,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15595,7 +15378,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15625,7 +15408,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15657,7 +15440,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15687,7 +15470,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15719,7 +15502,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15749,7 +15532,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15781,7 +15564,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15811,7 +15594,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15843,7 +15626,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15873,7 +15656,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15905,7 +15688,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15935,7 +15718,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -15967,7 +15750,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -15997,7 +15780,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16029,7 +15812,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16059,7 +15842,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16091,7 +15874,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16121,7 +15904,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16153,7 +15936,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16183,7 +15966,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16215,7 +15998,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16245,7 +16028,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16277,7 +16060,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16307,7 +16090,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16339,7 +16122,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16369,7 +16152,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16401,7 +16184,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16431,7 +16214,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16463,7 +16246,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16493,7 +16276,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16525,7 +16308,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16555,7 +16338,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16587,7 +16370,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16617,7 +16400,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16649,7 +16432,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16679,7 +16462,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16711,7 +16494,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16741,7 +16524,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16773,7 +16556,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16803,7 +16586,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16835,7 +16618,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16865,7 +16648,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16897,7 +16680,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16927,7 +16710,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -16959,7 +16742,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -16989,7 +16772,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17021,7 +16804,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17051,7 +16834,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17083,7 +16866,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17113,7 +16896,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17145,7 +16928,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17175,7 +16958,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17207,7 +16990,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17237,7 +17020,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17269,7 +17052,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17299,7 +17082,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17331,7 +17114,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17361,7 +17144,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17393,7 +17176,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17414,7 +17197,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17444,7 +17227,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17476,7 +17259,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17506,7 +17289,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17538,7 +17321,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17568,7 +17351,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17600,7 +17383,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17630,7 +17413,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17662,7 +17445,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -17697,7 +17480,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17728,7 +17511,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17759,7 +17542,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17790,7 +17573,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17821,7 +17604,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17852,7 +17635,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17883,7 +17666,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17914,7 +17697,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17945,7 +17728,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -17976,7 +17759,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18007,7 +17790,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18038,7 +17821,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18069,7 +17852,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18100,7 +17883,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18131,7 +17914,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18162,7 +17945,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18193,7 +17976,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18224,38 +18007,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=android-webview", - "--output-format=chartjson", - "--webview-embedder-apk=../../out/Release/apks/SystemWebViewShell.apk" - ], - "isolate_name": "telemetry_perf_webview_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_webview_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build114-b1--device1", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18286,7 +18038,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -18317,7 +18069,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18348,7 +18100,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": false, "io_timeout": 600, @@ -18379,7 +18131,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18410,7 +18162,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18441,7 +18193,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18472,7 +18224,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18503,7 +18255,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18534,7 +18286,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18565,7 +18317,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18596,7 +18348,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18627,7 +18379,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18658,7 +18410,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18689,7 +18441,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18720,7 +18472,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18751,7 +18503,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18782,7 +18534,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18813,7 +18565,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18844,7 +18596,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18875,7 +18627,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18906,7 +18658,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18937,7 +18689,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18968,7 +18720,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -18999,7 +18751,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19030,7 +18782,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19061,7 +18813,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19092,7 +18844,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19123,7 +18875,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19154,7 +18906,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19185,7 +18937,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19216,7 +18968,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19247,7 +18999,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19278,7 +19030,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19309,7 +19061,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19340,7 +19092,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19371,7 +19123,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19402,7 +19154,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19433,7 +19185,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19464,7 +19216,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19495,7 +19247,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19526,7 +19278,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19557,7 +19309,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19588,7 +19340,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19619,7 +19371,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19650,7 +19402,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19681,7 +19433,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19712,7 +19464,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19743,7 +19495,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19774,7 +19526,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19805,7 +19557,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19836,7 +19588,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19867,7 +19619,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19898,7 +19650,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19929,7 +19681,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19960,7 +19712,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -19991,7 +19743,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20022,7 +19774,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20053,7 +19805,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20084,7 +19836,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20118,7 +19870,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20150,7 +19902,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20180,7 +19932,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20212,7 +19964,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20242,7 +19994,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20274,7 +20026,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20304,7 +20056,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20336,7 +20088,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20366,7 +20118,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20398,7 +20150,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20428,7 +20180,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20460,7 +20212,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20490,7 +20242,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20522,7 +20274,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20552,7 +20304,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20584,7 +20336,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20614,7 +20366,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20646,7 +20398,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20676,7 +20428,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20708,7 +20460,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20738,7 +20490,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20770,7 +20522,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20800,7 +20552,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20832,7 +20584,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20853,7 +20605,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20883,7 +20635,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20915,7 +20667,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -20945,7 +20697,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -20977,7 +20729,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21007,7 +20759,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21039,7 +20791,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21069,7 +20821,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21101,7 +20853,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21131,7 +20883,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21163,7 +20915,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21193,7 +20945,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21225,7 +20977,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21246,7 +20998,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21255,68 +21007,6 @@ }, { "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=android-chromium", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build10-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build10-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ "jetstream", "-v", "--upload-results", @@ -21338,7 +21028,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -21370,7 +21060,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -21400,7 +21090,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21432,7 +21122,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21462,7 +21152,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": false, "io_timeout": 600, @@ -21494,7 +21184,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": true, "io_timeout": 600, @@ -21524,7 +21214,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21556,7 +21246,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21586,7 +21276,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21618,7 +21308,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21648,7 +21338,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21680,7 +21370,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21710,7 +21400,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21742,7 +21432,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21772,7 +21462,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21804,7 +21494,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21834,7 +21524,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21866,7 +21556,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21896,7 +21586,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21928,7 +21618,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -21958,7 +21648,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -21990,7 +21680,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22020,7 +21710,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22050,7 +21740,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22082,7 +21772,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22112,7 +21802,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22144,7 +21834,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22174,7 +21864,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22206,7 +21896,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22236,7 +21926,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22268,7 +21958,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22298,7 +21988,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22330,7 +22020,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22360,7 +22050,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22392,7 +22082,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22422,7 +22112,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22454,7 +22144,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22484,7 +22174,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22516,7 +22206,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22546,7 +22236,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22578,7 +22268,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22608,7 +22298,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22640,7 +22330,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22670,7 +22360,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22702,7 +22392,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22732,7 +22422,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22764,7 +22454,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22794,7 +22484,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22826,7 +22516,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22856,7 +22546,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22888,7 +22578,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22918,7 +22608,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -22950,7 +22640,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -22980,7 +22670,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23012,7 +22702,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23042,7 +22732,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23074,7 +22764,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23104,7 +22794,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23136,7 +22826,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23166,7 +22856,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23198,7 +22888,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23228,7 +22918,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23260,7 +22950,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23290,7 +22980,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23322,7 +23012,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23352,7 +23042,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23384,7 +23074,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23414,7 +23104,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23446,7 +23136,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23476,7 +23166,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23508,7 +23198,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23538,7 +23228,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23570,7 +23260,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23600,7 +23290,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23632,7 +23322,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23662,7 +23352,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23694,7 +23384,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23724,7 +23414,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23756,7 +23446,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23786,7 +23476,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23818,7 +23508,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23848,7 +23538,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23880,7 +23570,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23910,7 +23600,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -23942,7 +23632,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -23972,7 +23662,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24004,7 +23694,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24034,7 +23724,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24066,7 +23756,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24096,7 +23786,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24128,7 +23818,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24158,7 +23848,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24190,7 +23880,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24220,7 +23910,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24252,7 +23942,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24282,7 +23972,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24314,7 +24004,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24344,7 +24034,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24376,7 +24066,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24406,7 +24096,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24438,7 +24128,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24468,7 +24158,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24500,7 +24190,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24530,7 +24220,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24562,7 +24252,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24592,7 +24282,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24624,7 +24314,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24654,7 +24344,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24686,7 +24376,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24716,7 +24406,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24748,7 +24438,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24778,7 +24468,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24810,7 +24500,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24840,7 +24530,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24872,7 +24562,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24902,7 +24592,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24934,7 +24624,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -24955,7 +24645,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -24985,7 +24675,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25017,7 +24707,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25047,7 +24737,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25079,7 +24769,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25109,7 +24799,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25141,7 +24831,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25171,7 +24861,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25203,7 +24893,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25237,7 +24927,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25269,7 +24959,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25299,7 +24989,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25331,7 +25021,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25361,7 +25051,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25393,7 +25083,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25423,7 +25113,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25455,7 +25145,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25485,7 +25175,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25517,7 +25207,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25547,7 +25237,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25579,7 +25269,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25609,7 +25299,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25641,7 +25331,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25671,7 +25361,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25703,7 +25393,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25733,7 +25423,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25765,7 +25455,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25795,7 +25485,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25827,7 +25517,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25857,7 +25547,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25889,7 +25579,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25919,7 +25609,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -25951,7 +25641,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -25981,7 +25671,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26013,7 +25703,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26043,7 +25733,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26075,7 +25765,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26105,7 +25795,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26137,7 +25827,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26158,7 +25848,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26167,68 +25857,6 @@ }, { "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=android-chromium", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "android_devices": "1", - "id": "build47-b1--device7", - "os": "Android", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ "jetstream", "-v", "--upload-results", @@ -26250,7 +25878,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -26282,7 +25910,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -26312,7 +25940,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26344,7 +25972,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26374,7 +26002,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": false, "io_timeout": 600, @@ -26406,7 +26034,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 16200, "ignore_task_failure": true, "io_timeout": 600, @@ -26436,7 +26064,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26468,7 +26096,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26498,7 +26126,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26530,7 +26158,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26560,7 +26188,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26592,7 +26220,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26622,7 +26250,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26654,7 +26282,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26684,7 +26312,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26716,7 +26344,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26746,7 +26374,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26778,7 +26406,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26808,7 +26436,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26840,7 +26468,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26870,7 +26498,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26902,7 +26530,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -26932,7 +26560,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26962,7 +26590,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -26994,7 +26622,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27024,7 +26652,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27056,7 +26684,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27086,7 +26714,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27118,7 +26746,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27148,7 +26776,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27180,7 +26808,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27210,7 +26838,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27242,7 +26870,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27272,7 +26900,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27304,7 +26932,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27334,7 +26962,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27366,7 +26994,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27396,7 +27024,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27428,7 +27056,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27458,7 +27086,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27490,7 +27118,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27520,7 +27148,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27552,7 +27180,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27582,7 +27210,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27614,7 +27242,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27644,7 +27272,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27676,7 +27304,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27706,7 +27334,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27738,7 +27366,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27768,7 +27396,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27800,7 +27428,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27830,7 +27458,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27862,7 +27490,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27892,7 +27520,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27924,7 +27552,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -27954,7 +27582,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -27986,7 +27614,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28016,7 +27644,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28048,7 +27676,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28078,7 +27706,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28110,7 +27738,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28140,7 +27768,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28172,7 +27800,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28202,7 +27830,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28234,7 +27862,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28264,7 +27892,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28296,7 +27924,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28326,7 +27954,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28358,7 +27986,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28388,7 +28016,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28420,7 +28048,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28450,7 +28078,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28482,7 +28110,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28512,7 +28140,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28544,7 +28172,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28574,7 +28202,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28606,7 +28234,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28636,7 +28264,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28668,7 +28296,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28698,7 +28326,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28730,7 +28358,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28760,7 +28388,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28792,7 +28420,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28822,7 +28450,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28854,7 +28482,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28884,7 +28512,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28916,7 +28544,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -28946,7 +28574,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -28978,7 +28606,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29008,7 +28636,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29040,7 +28668,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29070,7 +28698,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29102,7 +28730,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29132,7 +28760,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29164,7 +28792,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29194,7 +28822,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29226,7 +28854,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29256,7 +28884,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29288,7 +28916,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29318,7 +28946,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29350,7 +28978,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29380,7 +29008,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29412,7 +29040,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29442,7 +29070,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29474,7 +29102,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29504,7 +29132,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29536,7 +29164,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29566,7 +29194,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29598,7 +29226,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29628,7 +29256,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29660,7 +29288,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29690,7 +29318,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29722,7 +29350,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29752,7 +29380,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29784,7 +29412,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29814,7 +29442,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29846,7 +29474,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29867,7 +29495,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29897,7 +29525,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29929,7 +29557,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -29959,7 +29587,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -29991,7 +29619,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30021,7 +29649,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30053,7 +29681,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30083,7 +29711,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30115,7 +29743,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30154,7 +29782,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30186,7 +29814,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30216,7 +29844,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30248,7 +29876,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30278,7 +29906,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30310,7 +29938,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30340,7 +29968,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30372,7 +30000,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30402,7 +30030,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30434,7 +30062,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30464,7 +30092,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30496,7 +30124,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30526,7 +30154,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30558,7 +30186,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30588,7 +30216,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30620,7 +30248,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30650,7 +30278,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30682,7 +30310,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30712,7 +30340,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30744,7 +30372,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30774,7 +30402,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30806,7 +30434,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30836,7 +30464,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30868,7 +30496,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30898,7 +30526,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30930,7 +30558,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -30960,7 +30588,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -30992,7 +30620,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31022,7 +30650,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31054,7 +30682,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31084,7 +30712,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31116,7 +30744,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31146,7 +30774,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31178,7 +30806,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31208,7 +30836,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31240,69 +30868,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0534", - "id": "build150-m1", - "os": "Ubuntu-14.04", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0534", - "id": "build150-m1", - "os": "Ubuntu-14.04", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31332,7 +30898,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -31364,7 +30930,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -31394,7 +30960,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31426,7 +30992,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31447,7 +31013,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31477,7 +31043,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -31509,7 +31075,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -31539,7 +31105,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31571,7 +31137,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31601,7 +31167,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31633,7 +31199,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31663,7 +31229,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31695,7 +31261,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31716,7 +31282,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31746,7 +31312,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31778,7 +31344,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31808,7 +31374,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31840,7 +31406,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31870,7 +31436,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31902,7 +31468,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -31923,7 +31489,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31953,7 +31519,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -31985,7 +31551,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32015,7 +31581,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32047,7 +31613,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32077,7 +31643,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32109,7 +31675,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32139,7 +31705,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32169,7 +31735,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32201,7 +31767,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32231,7 +31797,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32263,7 +31829,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32293,7 +31859,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32325,7 +31891,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32355,7 +31921,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32387,7 +31953,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32417,7 +31983,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32449,7 +32015,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32479,7 +32045,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32511,7 +32077,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32541,7 +32107,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32573,7 +32139,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32603,7 +32169,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32635,7 +32201,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32665,7 +32231,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32697,7 +32263,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32727,7 +32293,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32759,7 +32325,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32789,7 +32355,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32821,7 +32387,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32851,7 +32417,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32883,7 +32449,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32913,7 +32479,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -32945,7 +32511,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -32975,7 +32541,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33007,7 +32573,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33037,7 +32603,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33069,7 +32635,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33099,7 +32665,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33131,7 +32697,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33161,7 +32727,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33193,7 +32759,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33223,7 +32789,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33255,7 +32821,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33285,7 +32851,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33317,7 +32883,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33347,7 +32913,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33379,7 +32945,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33409,7 +32975,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33441,7 +33007,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33471,7 +33037,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33503,7 +33069,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33533,7 +33099,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33565,7 +33131,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33595,7 +33161,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33627,7 +33193,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33657,7 +33223,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33689,7 +33255,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33719,7 +33285,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33751,7 +33317,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33781,7 +33347,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33813,7 +33379,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33843,7 +33409,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33875,7 +33441,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33905,7 +33471,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33937,7 +33503,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -33967,7 +33533,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -33999,7 +33565,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34029,7 +33595,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34061,7 +33627,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34091,7 +33657,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34123,7 +33689,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34153,7 +33719,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34185,7 +33751,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34215,7 +33781,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34247,7 +33813,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34268,7 +33834,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34298,7 +33864,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34330,7 +33896,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34360,7 +33926,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34392,7 +33958,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34422,7 +33988,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34454,7 +34020,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34484,7 +34050,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34516,7 +34082,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34546,7 +34112,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34578,7 +34144,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34612,7 +34178,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34644,7 +34210,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34674,7 +34240,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34706,7 +34272,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34736,7 +34302,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34768,7 +34334,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34798,7 +34364,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34830,7 +34396,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34860,7 +34426,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34892,7 +34458,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34922,7 +34488,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -34954,7 +34520,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -34984,7 +34550,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35016,7 +34582,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35046,7 +34612,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35078,7 +34644,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35108,7 +34674,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35140,7 +34706,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35170,7 +34736,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35202,7 +34768,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35232,7 +34798,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35264,7 +34830,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35294,7 +34860,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35326,7 +34892,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35356,7 +34922,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35388,7 +34954,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35418,7 +34984,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35450,7 +35016,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35480,7 +35046,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35512,7 +35078,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35542,7 +35108,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35574,7 +35140,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35604,7 +35170,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35636,7 +35202,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35666,7 +35232,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35698,7 +35264,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35728,7 +35294,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35760,7 +35326,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35790,7 +35356,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -35822,69 +35388,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0166", - "id": "build104-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0166", - "id": "build104-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -35914,7 +35418,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -35946,7 +35450,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -35976,7 +35480,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36008,7 +35512,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36038,7 +35542,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -36070,7 +35574,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -36100,7 +35604,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36132,7 +35636,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36162,7 +35666,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36194,7 +35698,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36224,7 +35728,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36256,7 +35760,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36277,7 +35781,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36307,7 +35811,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36339,7 +35843,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36369,7 +35873,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36401,7 +35905,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36431,7 +35935,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36463,7 +35967,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36493,7 +35997,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36525,7 +36029,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36555,7 +36059,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36587,7 +36091,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36617,7 +36121,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36649,7 +36153,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36679,7 +36183,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36709,7 +36213,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36741,7 +36245,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36771,7 +36275,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36803,7 +36307,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36833,7 +36337,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36865,7 +36369,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36895,7 +36399,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36927,7 +36431,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -36957,7 +36461,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -36989,7 +36493,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37019,7 +36523,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37051,7 +36555,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37081,7 +36585,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37113,7 +36617,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37143,7 +36647,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37175,7 +36679,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37205,7 +36709,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37237,7 +36741,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37267,7 +36771,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37299,7 +36803,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37329,7 +36833,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37361,7 +36865,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37391,7 +36895,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37423,7 +36927,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37453,7 +36957,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37485,7 +36989,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37515,7 +37019,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37547,7 +37051,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37577,7 +37081,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37609,7 +37113,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37639,7 +37143,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37671,7 +37175,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37701,7 +37205,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37733,7 +37237,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37763,7 +37267,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37795,7 +37299,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37825,7 +37329,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37857,7 +37361,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37887,7 +37391,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37919,7 +37423,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -37949,7 +37453,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -37981,7 +37485,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38011,7 +37515,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38043,7 +37547,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38073,7 +37577,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38105,7 +37609,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38135,7 +37639,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38167,7 +37671,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38197,7 +37701,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38229,7 +37733,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38259,7 +37763,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38291,7 +37795,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38321,7 +37825,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38353,7 +37857,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38383,7 +37887,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38415,7 +37919,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38445,7 +37949,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38477,7 +37981,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38507,7 +38011,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38539,7 +38043,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38569,7 +38073,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38601,7 +38105,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38631,7 +38135,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38663,7 +38167,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38693,7 +38197,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38725,7 +38229,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38755,7 +38259,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38787,7 +38291,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38817,7 +38321,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38849,7 +38353,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38879,7 +38383,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38911,7 +38415,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -38941,7 +38445,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -38973,7 +38477,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39003,7 +38507,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39035,7 +38539,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39065,7 +38569,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39097,7 +38601,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39127,7 +38631,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39159,7 +38663,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39193,7 +38697,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39225,7 +38729,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39255,7 +38759,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39287,7 +38791,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39317,7 +38821,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39349,7 +38853,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39379,7 +38883,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39411,7 +38915,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39441,7 +38945,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39473,7 +38977,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39503,7 +39007,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39535,7 +39039,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39565,7 +39069,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39597,7 +39101,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39627,7 +39131,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39659,7 +39163,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39689,7 +39193,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39721,7 +39225,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39751,7 +39255,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39783,7 +39287,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39813,7 +39317,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39845,7 +39349,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39875,7 +39379,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39907,7 +39411,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39937,7 +39441,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -39969,7 +39473,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -39999,7 +39503,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40031,7 +39535,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40061,7 +39565,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40093,7 +39597,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40123,7 +39627,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40155,7 +39659,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40185,7 +39689,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40217,7 +39721,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40247,7 +39751,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40279,7 +39783,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40309,7 +39813,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40341,7 +39845,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40371,7 +39875,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40403,69 +39907,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "id": "build160-m1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "id": "build160-m1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40495,7 +39937,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -40527,7 +39969,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -40557,7 +39999,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40589,7 +40031,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40619,7 +40061,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -40651,7 +40093,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -40681,7 +40123,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40713,7 +40155,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40743,7 +40185,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40775,7 +40217,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40805,7 +40247,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40837,7 +40279,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40867,7 +40309,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40899,7 +40341,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40929,7 +40371,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -40961,7 +40403,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -40991,7 +40433,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41023,7 +40465,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41044,7 +40486,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41074,7 +40516,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41106,7 +40548,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41136,7 +40578,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41168,7 +40610,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41198,7 +40640,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41230,7 +40672,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41260,7 +40702,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41290,7 +40732,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41322,7 +40764,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41352,7 +40794,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41384,7 +40826,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41414,7 +40856,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41446,7 +40888,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41476,7 +40918,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41508,7 +40950,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41538,7 +40980,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41570,7 +41012,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41600,7 +41042,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41632,7 +41074,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41662,7 +41104,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41694,7 +41136,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41724,7 +41166,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41756,7 +41198,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41786,7 +41228,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41818,7 +41260,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41848,7 +41290,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41880,7 +41322,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41910,7 +41352,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -41942,7 +41384,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -41972,7 +41414,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42004,7 +41446,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42034,7 +41476,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42066,7 +41508,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42096,7 +41538,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42128,7 +41570,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42158,7 +41600,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42190,7 +41632,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42220,7 +41662,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42252,7 +41694,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42282,7 +41724,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42314,7 +41756,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42344,7 +41786,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42376,7 +41818,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42406,7 +41848,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42438,7 +41880,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42468,7 +41910,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42500,7 +41942,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42530,7 +41972,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42562,7 +42004,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42592,7 +42034,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42624,7 +42066,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42654,7 +42096,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42686,7 +42128,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42716,7 +42158,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42748,7 +42190,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42778,7 +42220,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42810,7 +42252,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42840,7 +42282,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42872,7 +42314,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42902,7 +42344,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42934,7 +42376,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -42964,7 +42406,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -42996,7 +42438,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43026,7 +42468,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43058,7 +42500,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43088,7 +42530,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43120,7 +42562,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43150,7 +42592,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43182,7 +42624,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43212,7 +42654,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43244,7 +42686,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43274,7 +42716,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43306,7 +42748,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43336,7 +42778,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43368,7 +42810,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43398,7 +42840,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43430,7 +42872,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43460,7 +42902,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43492,7 +42934,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43522,7 +42964,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43554,7 +42996,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43584,7 +43026,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43616,7 +43058,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43646,7 +43088,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43678,7 +43120,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43708,7 +43150,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43740,7 +43182,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43774,7 +43216,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43806,7 +43248,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43836,7 +43278,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43868,7 +43310,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43898,7 +43340,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43930,7 +43372,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -43960,7 +43402,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -43992,7 +43434,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44022,7 +43464,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44054,7 +43496,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44084,7 +43526,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44116,7 +43558,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44146,7 +43588,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44178,7 +43620,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44208,7 +43650,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44240,7 +43682,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44270,7 +43712,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44302,7 +43744,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44332,7 +43774,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44364,7 +43806,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44394,7 +43836,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44426,7 +43868,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44456,7 +43898,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44488,7 +43930,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44518,7 +43960,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44550,7 +43992,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44580,7 +44022,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44612,7 +44054,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44642,7 +44084,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44674,7 +44116,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44704,7 +44146,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44736,7 +44178,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44766,7 +44208,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44798,7 +44240,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44828,7 +44270,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44860,7 +44302,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44890,7 +44332,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44922,7 +44364,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -44952,7 +44394,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -44984,69 +44426,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1626", - "id": "build125-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1626", - "id": "build125-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45076,7 +44456,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -45108,7 +44488,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -45138,7 +44518,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45170,7 +44550,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45200,7 +44580,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -45232,7 +44612,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -45262,7 +44642,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45294,7 +44674,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45324,7 +44704,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45356,7 +44736,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45386,7 +44766,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45418,7 +44798,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45448,7 +44828,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45480,7 +44860,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45510,7 +44890,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45542,7 +44922,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45572,7 +44952,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45604,7 +44984,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45634,7 +45014,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45666,7 +45046,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45696,7 +45076,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45728,7 +45108,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45758,7 +45138,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45790,7 +45170,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45811,7 +45191,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45841,7 +45221,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45871,7 +45251,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45903,7 +45283,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45933,7 +45313,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -45965,7 +45345,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -45995,7 +45375,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46027,7 +45407,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46057,7 +45437,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46089,7 +45469,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46119,7 +45499,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46151,7 +45531,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46181,7 +45561,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46213,7 +45593,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46243,7 +45623,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46275,7 +45655,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46305,7 +45685,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46337,7 +45717,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46367,7 +45747,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46399,7 +45779,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46429,7 +45809,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46461,7 +45841,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46491,7 +45871,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46523,7 +45903,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46553,7 +45933,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46585,7 +45965,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46615,7 +45995,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46647,7 +46027,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46677,7 +46057,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46709,7 +46089,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46739,7 +46119,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46771,7 +46151,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46801,7 +46181,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46833,7 +46213,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46863,7 +46243,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46895,7 +46275,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46925,7 +46305,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -46957,7 +46337,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -46987,7 +46367,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47019,7 +46399,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47049,7 +46429,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47081,7 +46461,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47111,7 +46491,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47143,7 +46523,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47173,7 +46553,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47205,7 +46585,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47235,7 +46615,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47267,7 +46647,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47297,7 +46677,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47329,7 +46709,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47359,7 +46739,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47391,7 +46771,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47421,7 +46801,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47453,7 +46833,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47483,7 +46863,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47515,7 +46895,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47545,7 +46925,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47577,7 +46957,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47607,7 +46987,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47639,7 +47019,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47669,7 +47049,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47701,7 +47081,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47731,7 +47111,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47763,7 +47143,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47793,7 +47173,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47825,7 +47205,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47855,7 +47235,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47887,7 +47267,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47917,7 +47297,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -47949,7 +47329,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -47979,7 +47359,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48011,7 +47391,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48041,7 +47421,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48073,7 +47453,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48103,7 +47483,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48135,7 +47515,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48165,7 +47545,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48197,7 +47577,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48227,7 +47607,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48259,7 +47639,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48289,7 +47669,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48321,7 +47701,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48355,7 +47735,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48387,7 +47767,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48417,7 +47797,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48449,7 +47829,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48479,7 +47859,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48511,7 +47891,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48541,7 +47921,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48573,7 +47953,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48603,7 +47983,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48635,7 +48015,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48665,7 +48045,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48697,7 +48077,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48727,7 +48107,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48759,7 +48139,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48789,7 +48169,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48821,7 +48201,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48851,7 +48231,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48883,7 +48263,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48913,7 +48293,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -48945,7 +48325,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -48975,7 +48355,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49007,7 +48387,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49037,7 +48417,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49069,7 +48449,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49099,7 +48479,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49131,7 +48511,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49161,7 +48541,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49193,7 +48573,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49223,7 +48603,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49255,7 +48635,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49285,7 +48665,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49317,7 +48697,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49347,7 +48727,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49379,7 +48759,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49409,7 +48789,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49441,7 +48821,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49471,7 +48851,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49503,7 +48883,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49533,7 +48913,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49565,69 +48945,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a26", - "id": "build26-b1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a26", - "id": "build26-b1", - "os": "Mac-10.12", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49657,7 +48975,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -49689,7 +49007,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -49719,7 +49037,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49751,7 +49069,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49781,7 +49099,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -49813,7 +49131,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -49843,7 +49161,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49875,7 +49193,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49905,7 +49223,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49937,7 +49255,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -49967,7 +49285,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -49999,7 +49317,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50029,7 +49347,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50061,7 +49379,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50091,7 +49409,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50123,7 +49441,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50153,7 +49471,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50185,7 +49503,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50215,7 +49533,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50247,7 +49565,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50277,7 +49595,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50309,7 +49627,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50339,7 +49657,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50371,7 +49689,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50401,7 +49719,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50431,7 +49749,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50463,7 +49781,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50493,7 +49811,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50525,7 +49843,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50555,7 +49873,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50587,7 +49905,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50617,7 +49935,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50649,7 +49967,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50679,7 +49997,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50711,7 +50029,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50741,7 +50059,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50773,7 +50091,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50803,7 +50121,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50835,7 +50153,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50865,7 +50183,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50897,7 +50215,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50927,7 +50245,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -50959,7 +50277,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -50989,7 +50307,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51021,7 +50339,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51051,7 +50369,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51083,7 +50401,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51113,7 +50431,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51145,7 +50463,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51175,7 +50493,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51207,7 +50525,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51237,7 +50555,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51269,7 +50587,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51299,7 +50617,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51331,7 +50649,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51361,7 +50679,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51393,7 +50711,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51423,7 +50741,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51455,7 +50773,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51485,7 +50803,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51517,7 +50835,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51547,7 +50865,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51579,7 +50897,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51609,7 +50927,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51641,7 +50959,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51671,7 +50989,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51703,7 +51021,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51733,7 +51051,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51765,7 +51083,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51795,7 +51113,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51827,7 +51145,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51857,7 +51175,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51889,7 +51207,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51919,7 +51237,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -51951,7 +51269,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -51981,7 +51299,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52013,7 +51331,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52043,7 +51361,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52075,7 +51393,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52105,7 +51423,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52137,7 +51455,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52167,7 +51485,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52199,7 +51517,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52229,7 +51547,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52261,7 +51579,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52291,7 +51609,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52323,7 +51641,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52353,7 +51671,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52385,7 +51703,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52415,7 +51733,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52447,7 +51765,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52477,7 +51795,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52509,7 +51827,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52539,7 +51857,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52571,7 +51889,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52601,7 +51919,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52633,7 +51951,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52663,7 +51981,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52695,7 +52013,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52725,7 +52043,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52757,7 +52075,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52787,7 +52105,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52819,7 +52137,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52849,7 +52167,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52881,7 +52199,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52915,7 +52233,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -52947,7 +52265,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -52977,7 +52295,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53009,7 +52327,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53039,7 +52357,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53071,7 +52389,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53101,7 +52419,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53133,7 +52451,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53163,7 +52481,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53195,7 +52513,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53225,7 +52543,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53257,7 +52575,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53287,7 +52605,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53319,7 +52637,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53349,7 +52667,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53381,7 +52699,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53411,7 +52729,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53443,7 +52761,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53473,7 +52791,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53505,7 +52823,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53535,7 +52853,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53567,7 +52885,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53597,7 +52915,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53629,7 +52947,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53659,7 +52977,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53691,7 +53009,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53721,7 +53039,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53753,7 +53071,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53783,7 +53101,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53815,7 +53133,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53845,7 +53163,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53877,7 +53195,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53907,7 +53225,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -53939,7 +53257,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -53969,7 +53287,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54001,7 +53319,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54031,7 +53349,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54063,7 +53381,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54093,7 +53411,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54125,69 +53443,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "id": "build130-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "id": "build130-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54217,7 +53473,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -54249,7 +53505,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -54279,7 +53535,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54311,7 +53567,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54341,7 +53597,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -54373,7 +53629,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -54403,7 +53659,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54435,7 +53691,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54465,7 +53721,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54497,7 +53753,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54527,7 +53783,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54559,7 +53815,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54589,7 +53845,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54621,7 +53877,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54651,7 +53907,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54683,7 +53939,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54713,7 +53969,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54745,7 +54001,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54775,7 +54031,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54807,7 +54063,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54837,7 +54093,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54869,7 +54125,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54899,7 +54155,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54931,7 +54187,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -54952,7 +54208,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -54982,7 +54238,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55012,7 +54268,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55044,7 +54300,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55074,7 +54330,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55106,7 +54362,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55136,7 +54392,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55168,7 +54424,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55198,7 +54454,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55230,7 +54486,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55260,7 +54516,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55292,7 +54548,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55322,7 +54578,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55354,7 +54610,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55384,7 +54640,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55416,7 +54672,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55446,7 +54702,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55478,7 +54734,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55508,7 +54764,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55540,7 +54796,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55570,7 +54826,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55602,7 +54858,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55632,7 +54888,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55664,7 +54920,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55694,7 +54950,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55726,7 +54982,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55756,7 +55012,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55788,7 +55044,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55818,7 +55074,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55850,7 +55106,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55880,7 +55136,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55912,7 +55168,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -55942,7 +55198,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -55974,7 +55230,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56004,7 +55260,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56036,7 +55292,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56066,7 +55322,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56098,7 +55354,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56128,7 +55384,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56160,7 +55416,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56190,7 +55446,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56222,7 +55478,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56252,7 +55508,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56284,7 +55540,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56314,7 +55570,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56346,7 +55602,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56376,7 +55632,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56408,7 +55664,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56438,7 +55694,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56470,7 +55726,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56500,7 +55756,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56532,7 +55788,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56562,7 +55818,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56594,7 +55850,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56624,7 +55880,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56656,7 +55912,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56686,7 +55942,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56718,7 +55974,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56748,7 +56004,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56780,7 +56036,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56810,7 +56066,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56842,7 +56098,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56872,7 +56128,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56904,7 +56160,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56934,7 +56190,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -56966,7 +56222,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -56996,7 +56252,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57028,7 +56284,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57058,7 +56314,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57090,7 +56346,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57120,7 +56376,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57152,7 +56408,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57182,7 +56438,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57214,7 +56470,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57244,7 +56500,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57276,7 +56532,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57306,7 +56562,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57338,7 +56594,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57368,7 +56624,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57400,7 +56656,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57430,7 +56686,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57462,7 +56718,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57496,7 +56752,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57528,7 +56784,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57558,7 +56814,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57590,7 +56846,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57620,7 +56876,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57652,7 +56908,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57682,7 +56938,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57714,7 +56970,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57744,7 +57000,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57776,7 +57032,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57806,7 +57062,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57838,7 +57094,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57868,7 +57124,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57900,7 +57156,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57930,7 +57186,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -57962,7 +57218,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -57992,7 +57248,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58024,7 +57280,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58054,7 +57310,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58086,7 +57342,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58116,7 +57372,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58148,7 +57404,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58178,7 +57434,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58210,7 +57466,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58240,7 +57496,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58272,7 +57528,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58302,7 +57558,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58334,7 +57590,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58364,7 +57620,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58396,7 +57652,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58426,7 +57682,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58458,7 +57714,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58488,7 +57744,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58520,7 +57776,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58550,7 +57806,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58582,7 +57838,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58612,7 +57868,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58644,7 +57900,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58674,7 +57930,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58706,69 +57962,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0d26", - "id": "build6-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0d26", - "id": "build6-b1", - "os": "Mac-10.11", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58798,7 +57992,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -58830,7 +58024,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -58860,7 +58054,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -58892,7 +58086,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -58922,7 +58116,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -58954,7 +58148,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -58984,7 +58178,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59016,7 +58210,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59046,7 +58240,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59078,7 +58272,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59108,7 +58302,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59140,7 +58334,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59170,7 +58364,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59202,7 +58396,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59232,7 +58426,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59264,7 +58458,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59294,7 +58488,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59326,7 +58520,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59356,7 +58550,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59388,7 +58582,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59418,7 +58612,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59450,7 +58644,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59480,7 +58674,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59512,7 +58706,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59533,7 +58727,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59563,7 +58757,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59593,7 +58787,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59625,7 +58819,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59655,7 +58849,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59687,7 +58881,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59717,7 +58911,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59749,7 +58943,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59779,7 +58973,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59811,7 +59005,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59841,7 +59035,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59873,7 +59067,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59903,7 +59097,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59935,7 +59129,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -59965,7 +59159,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -59997,7 +59191,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60027,7 +59221,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60059,7 +59253,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60089,7 +59283,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60121,7 +59315,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60151,7 +59345,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60183,7 +59377,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60213,7 +59407,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60245,7 +59439,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60275,7 +59469,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60307,7 +59501,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60337,7 +59531,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60369,7 +59563,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60399,7 +59593,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60431,7 +59625,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60461,7 +59655,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60493,7 +59687,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60523,7 +59717,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60555,7 +59749,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60585,7 +59779,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60617,7 +59811,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60647,7 +59841,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60679,7 +59873,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60709,7 +59903,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60741,7 +59935,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60771,7 +59965,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60803,7 +59997,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60833,7 +60027,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60865,7 +60059,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60895,7 +60089,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60927,7 +60121,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -60957,7 +60151,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -60989,7 +60183,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61019,7 +60213,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61051,7 +60245,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61081,7 +60275,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61113,7 +60307,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61143,7 +60337,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61175,7 +60369,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61205,7 +60399,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61237,7 +60431,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61267,7 +60461,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61299,7 +60493,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61329,7 +60523,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61361,7 +60555,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61391,7 +60585,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61423,7 +60617,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61453,7 +60647,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61485,7 +60679,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61515,7 +60709,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61547,7 +60741,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61577,7 +60771,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61609,7 +60803,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61639,7 +60833,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61671,7 +60865,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61701,7 +60895,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61733,7 +60927,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61763,7 +60957,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61795,7 +60989,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61825,7 +61019,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61857,7 +61051,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61887,7 +61081,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61919,7 +61113,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -61949,7 +61143,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -61981,7 +61175,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62011,7 +61205,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62043,7 +61237,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62077,7 +61271,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62109,7 +61303,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62139,7 +61333,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62171,7 +61365,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62201,7 +61395,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62233,7 +61427,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62263,7 +61457,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62295,7 +61489,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62325,7 +61519,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62357,7 +61551,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62387,7 +61581,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62419,7 +61613,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62449,7 +61643,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62481,7 +61675,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62511,7 +61705,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62543,7 +61737,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62573,7 +61767,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62605,7 +61799,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62635,7 +61829,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62667,7 +61861,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62697,7 +61891,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62729,7 +61923,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62759,7 +61953,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62791,7 +61985,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62821,7 +62015,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62853,7 +62047,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62883,7 +62077,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62915,7 +62109,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -62945,7 +62139,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -62977,7 +62171,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63007,7 +62201,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63039,7 +62233,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63069,7 +62263,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63101,7 +62295,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63131,7 +62325,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63163,69 +62357,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1616", - "id": "build119-b1", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:1616", - "id": "build119-b1", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63255,7 +62387,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -63287,7 +62419,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -63317,7 +62449,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63349,7 +62481,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63379,7 +62511,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -63411,7 +62543,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -63441,7 +62573,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63473,7 +62605,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63503,7 +62635,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63535,7 +62667,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63565,7 +62697,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63597,7 +62729,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63627,7 +62759,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63659,7 +62791,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63689,7 +62821,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63721,7 +62853,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63751,7 +62883,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63783,7 +62915,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63813,7 +62945,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63845,7 +62977,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63875,7 +63007,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63907,7 +63039,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63937,7 +63069,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -63969,7 +63101,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -63999,7 +63131,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64029,7 +63161,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64061,7 +63193,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64091,7 +63223,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64123,7 +63255,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64153,7 +63285,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64185,7 +63317,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64215,7 +63347,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64247,7 +63379,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64277,7 +63409,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64309,7 +63441,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64339,7 +63471,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64371,7 +63503,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64401,7 +63533,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64433,7 +63565,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64463,7 +63595,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64495,7 +63627,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64525,7 +63657,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64557,7 +63689,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64587,7 +63719,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64619,7 +63751,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64649,7 +63781,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64681,7 +63813,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64711,7 +63843,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64743,7 +63875,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64773,7 +63905,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64805,7 +63937,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64835,7 +63967,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64867,7 +63999,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64897,7 +64029,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64929,7 +64061,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -64959,7 +64091,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -64991,7 +64123,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65021,7 +64153,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65053,7 +64185,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65083,7 +64215,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65115,7 +64247,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65145,7 +64277,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65177,7 +64309,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65207,7 +64339,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65239,7 +64371,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65269,7 +64401,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65301,7 +64433,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65331,7 +64463,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65363,7 +64495,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65393,7 +64525,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65425,7 +64557,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65455,7 +64587,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65487,7 +64619,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65517,7 +64649,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65549,7 +64681,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65579,7 +64711,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65611,7 +64743,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65641,7 +64773,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65673,7 +64805,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65703,7 +64835,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65735,7 +64867,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65765,7 +64897,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65797,7 +64929,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65827,7 +64959,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65859,7 +64991,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65889,7 +65021,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65921,7 +65053,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -65951,7 +65083,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -65983,7 +65115,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66013,7 +65145,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66045,7 +65177,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66075,7 +65207,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66107,7 +65239,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66137,7 +65269,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66169,7 +65301,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66199,7 +65331,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66231,7 +65363,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66261,7 +65393,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66293,7 +65425,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66323,7 +65455,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66355,7 +65487,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66389,7 +65521,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66421,7 +65553,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66451,7 +65583,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66483,7 +65615,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66513,7 +65645,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66545,7 +65677,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66575,7 +65707,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66607,7 +65739,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66637,7 +65769,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66669,7 +65801,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66699,7 +65831,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66731,7 +65863,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66761,7 +65893,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66793,7 +65925,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66823,7 +65955,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66855,7 +65987,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66885,7 +66017,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66917,7 +66049,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -66947,7 +66079,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -66979,7 +66111,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67009,7 +66141,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67041,7 +66173,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67071,7 +66203,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67103,7 +66235,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67133,7 +66265,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67165,7 +66297,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67195,7 +66327,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67227,7 +66359,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67257,7 +66389,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67289,7 +66421,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67319,7 +66451,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67351,7 +66483,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67381,7 +66513,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67413,7 +66545,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67443,7 +66575,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67475,69 +66607,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0534", - "id": "build134-m1", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0534", - "id": "build134-m1", - "os": "Windows-10-10240", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67567,7 +66637,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -67599,7 +66669,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -67629,7 +66699,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67661,7 +66731,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67691,7 +66761,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -67723,7 +66793,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -67753,7 +66823,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67785,7 +66855,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67815,7 +66885,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67847,7 +66917,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67877,7 +66947,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67909,7 +66979,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -67930,7 +67000,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67960,7 +67030,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -67992,7 +67062,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68022,7 +67092,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68054,7 +67124,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68084,7 +67154,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68116,7 +67186,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68146,7 +67216,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68178,7 +67248,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68208,7 +67278,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68240,7 +67310,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68270,7 +67340,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68302,7 +67372,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68332,7 +67402,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68362,7 +67432,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68394,7 +67464,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68424,7 +67494,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68456,7 +67526,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68486,7 +67556,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68518,7 +67588,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68548,7 +67618,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68580,7 +67650,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68610,7 +67680,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68642,7 +67712,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68672,7 +67742,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68704,7 +67774,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68734,7 +67804,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68766,7 +67836,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68796,7 +67866,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68828,7 +67898,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68858,7 +67928,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68890,7 +67960,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68920,7 +67990,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -68952,7 +68022,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -68982,7 +68052,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69014,7 +68084,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69044,7 +68114,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69076,7 +68146,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69106,7 +68176,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69138,7 +68208,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69168,7 +68238,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69200,7 +68270,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69230,7 +68300,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69262,7 +68332,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69292,7 +68362,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69324,7 +68394,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69354,7 +68424,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69386,7 +68456,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69416,7 +68486,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69448,7 +68518,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69478,7 +68548,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69510,7 +68580,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69540,7 +68610,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69572,7 +68642,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69602,7 +68672,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69634,7 +68704,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69664,7 +68734,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69696,7 +68766,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69726,7 +68796,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69758,7 +68828,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69788,7 +68858,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69820,7 +68890,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69850,7 +68920,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69882,7 +68952,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69912,7 +68982,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -69944,7 +69014,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -69974,7 +69044,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70006,7 +69076,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70036,7 +69106,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70068,7 +69138,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70098,7 +69168,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70130,7 +69200,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70160,7 +69230,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70192,7 +69262,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70222,7 +69292,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70254,7 +69324,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70284,7 +69354,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70316,7 +69386,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70346,7 +69416,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70378,7 +69448,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70408,7 +69478,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70440,7 +69510,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70470,7 +69540,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70502,7 +69572,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70532,7 +69602,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70564,7 +69634,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70594,7 +69664,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70626,7 +69696,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70656,7 +69726,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70688,7 +69758,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70713,7 +69783,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70743,7 +69813,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70775,7 +69845,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70805,7 +69875,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70837,7 +69907,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70867,7 +69937,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70899,7 +69969,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70929,7 +69999,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -70961,7 +70031,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -70991,7 +70061,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71023,7 +70093,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71053,7 +70123,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71085,7 +70155,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71115,7 +70185,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71147,7 +70217,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71177,7 +70247,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71209,7 +70279,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71239,7 +70309,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71271,7 +70341,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71301,7 +70371,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71333,7 +70403,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71363,7 +70433,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71395,7 +70465,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71425,7 +70495,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71457,7 +70527,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71487,7 +70557,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71519,7 +70589,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71549,7 +70619,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71581,7 +70651,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71611,7 +70681,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71643,7 +70713,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71673,7 +70743,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71705,7 +70775,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71735,7 +70805,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71767,7 +70837,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71797,7 +70867,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -71829,69 +70899,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6613", - "id": "build103-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6613", - "id": "build103-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -71921,7 +70929,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -71953,7 +70961,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -71983,7 +70991,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72015,7 +71023,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72036,7 +71044,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72066,7 +71074,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -72098,7 +71106,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -72128,7 +71136,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72160,7 +71168,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72190,7 +71198,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72222,7 +71230,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72252,7 +71260,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72284,7 +71292,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72305,7 +71313,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72335,7 +71343,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72367,7 +71375,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72397,7 +71405,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72429,7 +71437,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72459,7 +71467,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72491,7 +71499,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72521,7 +71529,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72553,7 +71561,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72583,7 +71591,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72615,7 +71623,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72645,7 +71653,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72677,7 +71685,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72698,7 +71706,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72728,7 +71736,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72758,7 +71766,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72790,7 +71798,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72820,7 +71828,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72852,7 +71860,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72882,7 +71890,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72914,7 +71922,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -72944,7 +71952,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -72976,7 +71984,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73006,7 +72014,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73038,7 +72046,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73068,7 +72076,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73100,7 +72108,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73130,7 +72138,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73162,7 +72170,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73192,7 +72200,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73224,7 +72232,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73254,7 +72262,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73286,7 +72294,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73316,7 +72324,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73348,7 +72356,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73378,7 +72386,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73410,7 +72418,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73440,7 +72448,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73472,7 +72480,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73502,7 +72510,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73534,7 +72542,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73564,7 +72572,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73596,7 +72604,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73626,7 +72634,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73658,7 +72666,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73688,7 +72696,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73720,7 +72728,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73750,7 +72758,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73782,7 +72790,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73812,7 +72820,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73844,7 +72852,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73874,7 +72882,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73906,7 +72914,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73936,7 +72944,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -73968,7 +72976,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -73998,7 +73006,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74030,7 +73038,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74060,7 +73068,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74092,7 +73100,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74122,7 +73130,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74154,7 +73162,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74184,7 +73192,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74216,7 +73224,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74246,7 +73254,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74278,7 +73286,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74308,7 +73316,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74340,7 +73348,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74370,7 +73378,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74402,7 +73410,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74432,7 +73440,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74464,7 +73472,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74494,7 +73502,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74526,7 +73534,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74556,7 +73564,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74588,7 +73596,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74618,7 +73626,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74650,7 +73658,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74680,7 +73688,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74712,7 +73720,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74742,7 +73750,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74774,7 +73782,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74804,7 +73812,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74836,7 +73844,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74866,7 +73874,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74898,7 +73906,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74928,7 +73936,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -74960,7 +73968,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -74990,7 +73998,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75022,7 +74030,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75052,7 +74060,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75084,7 +74092,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75109,7 +74117,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75139,7 +74147,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75171,7 +74179,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75201,7 +74209,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75233,7 +74241,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75263,7 +74271,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75295,7 +74303,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75325,7 +74333,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75357,7 +74365,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75387,7 +74395,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75419,7 +74427,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75449,7 +74457,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75481,7 +74489,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75511,7 +74519,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75543,7 +74551,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75573,7 +74581,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75605,7 +74613,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75635,7 +74643,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75667,7 +74675,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75697,7 +74705,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75729,7 +74737,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75759,7 +74767,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75791,7 +74799,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75821,7 +74829,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75853,7 +74861,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75883,7 +74891,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75915,7 +74923,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -75945,7 +74953,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -75977,7 +74985,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76007,7 +75015,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76039,7 +75047,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76069,7 +75077,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76101,7 +75109,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76131,7 +75139,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76163,7 +75171,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76193,7 +75201,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76225,69 +75233,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:041a", - "id": "build166-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:041a", - "id": "build166-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76317,7 +75263,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -76349,7 +75295,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -76379,7 +75325,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76411,7 +75357,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76432,7 +75378,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76462,7 +75408,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -76494,7 +75440,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -76524,7 +75470,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76556,7 +75502,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76586,7 +75532,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76618,7 +75564,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76648,7 +75594,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76680,7 +75626,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76710,7 +75656,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76742,7 +75688,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76772,7 +75718,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76804,7 +75750,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76834,7 +75780,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76866,7 +75812,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76896,7 +75842,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76928,7 +75874,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -76958,7 +75904,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -76990,7 +75936,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77020,7 +75966,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77052,7 +75998,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77073,7 +76019,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77103,7 +76049,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77133,7 +76079,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77165,7 +76111,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77195,7 +76141,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77227,7 +76173,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77257,7 +76203,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77289,7 +76235,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77319,7 +76265,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77351,7 +76297,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77381,7 +76327,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77413,7 +76359,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77443,7 +76389,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77475,7 +76421,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77505,7 +76451,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77537,7 +76483,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77567,7 +76513,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77599,7 +76545,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77629,7 +76575,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77661,7 +76607,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77691,7 +76637,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77723,7 +76669,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77753,7 +76699,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77785,7 +76731,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77815,7 +76761,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77847,7 +76793,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77877,7 +76823,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77909,7 +76855,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -77939,7 +76885,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -77971,7 +76917,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78001,7 +76947,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78033,7 +76979,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78063,7 +77009,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78095,7 +77041,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78125,7 +77071,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78157,7 +77103,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78187,7 +77133,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78219,7 +77165,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78249,7 +77195,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78281,7 +77227,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78311,7 +77257,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78343,7 +77289,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78373,7 +77319,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78405,7 +77351,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78435,7 +77381,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78467,7 +77413,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78497,7 +77443,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78529,7 +77475,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78559,7 +77505,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78591,7 +77537,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78621,7 +77567,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78653,7 +77599,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78683,7 +77629,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78715,7 +77661,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78745,7 +77691,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78777,7 +77723,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78807,7 +77753,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78839,7 +77785,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78869,7 +77815,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78901,7 +77847,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78931,7 +77877,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -78963,7 +77909,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -78993,7 +77939,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79025,7 +77971,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79055,7 +78001,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79087,7 +78033,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79117,7 +78063,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79149,7 +78095,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79179,7 +78125,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79211,7 +78157,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79241,7 +78187,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79273,7 +78219,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79303,7 +78249,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79335,7 +78281,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79365,7 +78311,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79397,7 +78343,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79427,7 +78373,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79459,7 +78405,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79484,7 +78430,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79514,7 +78460,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79546,7 +78492,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79576,7 +78522,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79608,7 +78554,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79638,7 +78584,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79670,7 +78616,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79700,7 +78646,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79732,7 +78678,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79762,7 +78708,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79794,7 +78740,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79824,7 +78770,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79856,7 +78802,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79886,7 +78832,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79918,7 +78864,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -79948,7 +78894,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -79980,7 +78926,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80010,7 +78956,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80042,7 +78988,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80072,7 +79018,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80104,7 +79050,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80134,7 +79080,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80166,7 +79112,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80196,7 +79142,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80228,7 +79174,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80258,7 +79204,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80290,7 +79236,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80320,7 +79266,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80352,7 +79298,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80382,7 +79328,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80414,7 +79360,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80444,7 +79390,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80476,7 +79422,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80506,7 +79452,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80538,7 +79484,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80568,7 +79514,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80600,69 +79546,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:104a", - "id": "build94-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:104a", - "id": "build94-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80692,7 +79576,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -80724,7 +79608,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -80754,7 +79638,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80786,7 +79670,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80807,7 +79691,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80837,7 +79721,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -80869,7 +79753,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -80899,7 +79783,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80931,7 +79815,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -80961,7 +79845,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -80993,7 +79877,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81023,7 +79907,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81055,7 +79939,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81076,7 +79960,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81106,7 +79990,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81138,7 +80022,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81168,7 +80052,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81200,7 +80084,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81230,7 +80114,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81262,7 +80146,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81292,7 +80176,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81324,7 +80208,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81354,7 +80238,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81386,7 +80270,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81416,7 +80300,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81448,7 +80332,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81478,7 +80362,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81508,7 +80392,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81540,7 +80424,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81570,7 +80454,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81602,7 +80486,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81632,7 +80516,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81664,7 +80548,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81694,7 +80578,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81726,7 +80610,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81756,7 +80640,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81788,7 +80672,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81818,7 +80702,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81850,7 +80734,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81880,7 +80764,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81912,7 +80796,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -81942,7 +80826,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -81974,7 +80858,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82004,7 +80888,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82036,7 +80920,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82066,7 +80950,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82098,7 +80982,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82128,7 +81012,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82160,7 +81044,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82190,7 +81074,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82222,7 +81106,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82252,7 +81136,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82284,7 +81168,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82314,7 +81198,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82346,7 +81230,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82376,7 +81260,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82408,7 +81292,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82438,7 +81322,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82470,7 +81354,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82500,7 +81384,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82532,7 +81416,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82562,7 +81446,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82594,7 +81478,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82624,7 +81508,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82656,7 +81540,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82686,7 +81570,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82718,7 +81602,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82748,7 +81632,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82780,7 +81664,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82810,7 +81694,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82842,7 +81726,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82872,7 +81756,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82904,7 +81788,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82934,7 +81818,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -82966,7 +81850,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -82996,7 +81880,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83028,7 +81912,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83058,7 +81942,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83090,7 +81974,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83120,7 +82004,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83152,7 +82036,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83182,7 +82066,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83214,7 +82098,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83244,7 +82128,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83276,7 +82160,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83306,7 +82190,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83338,7 +82222,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83368,7 +82252,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83400,7 +82284,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83430,7 +82314,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83462,7 +82346,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83492,7 +82376,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83524,7 +82408,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83554,7 +82438,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83586,7 +82470,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83616,7 +82500,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83648,7 +82532,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83678,7 +82562,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83710,7 +82594,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83740,7 +82624,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83772,7 +82656,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83802,7 +82686,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83834,7 +82718,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83868,7 +82752,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83900,7 +82784,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83930,7 +82814,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -83962,7 +82846,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -83992,7 +82876,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84024,7 +82908,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84054,7 +82938,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84086,7 +82970,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84116,7 +83000,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84148,7 +83032,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84178,7 +83062,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84210,7 +83094,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84240,7 +83124,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84272,7 +83156,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84302,7 +83186,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84334,7 +83218,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84364,7 +83248,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84396,7 +83280,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84426,7 +83310,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84458,7 +83342,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84488,7 +83372,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84520,7 +83404,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84550,7 +83434,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84582,7 +83466,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84612,7 +83496,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84644,7 +83528,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84674,7 +83558,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84706,7 +83590,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84736,7 +83620,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84768,7 +83652,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84798,7 +83682,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84830,7 +83714,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84860,7 +83744,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84892,7 +83776,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -84922,7 +83806,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -84954,69 +83838,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build187-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build187-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85046,7 +83868,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -85078,7 +83900,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -85108,7 +83930,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85140,7 +83962,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85161,7 +83983,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85191,7 +84013,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -85223,7 +84045,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -85253,7 +84075,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85285,7 +84107,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85315,7 +84137,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85347,7 +84169,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85377,7 +84199,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85409,7 +84231,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85430,7 +84252,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85460,7 +84282,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85492,7 +84314,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85522,7 +84344,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85554,7 +84376,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85584,7 +84406,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85616,7 +84438,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85646,7 +84468,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85678,7 +84500,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85708,7 +84530,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85740,7 +84562,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85770,7 +84592,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85802,7 +84624,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85832,7 +84654,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85862,7 +84684,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85894,7 +84716,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85924,7 +84746,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -85956,7 +84778,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -85986,7 +84808,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86018,7 +84840,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86048,7 +84870,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86080,7 +84902,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86110,7 +84932,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86142,7 +84964,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86172,7 +84994,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86204,7 +85026,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86234,7 +85056,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86266,7 +85088,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86296,7 +85118,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86328,7 +85150,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86358,7 +85180,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86390,7 +85212,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86420,7 +85242,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86452,7 +85274,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86482,7 +85304,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86514,7 +85336,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86544,7 +85366,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86576,7 +85398,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86606,7 +85428,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86638,7 +85460,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86668,7 +85490,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86700,7 +85522,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86730,7 +85552,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86762,7 +85584,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86792,7 +85614,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86824,7 +85646,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86854,7 +85676,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86886,7 +85708,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86916,7 +85738,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -86948,7 +85770,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -86978,7 +85800,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87010,7 +85832,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87040,7 +85862,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87072,7 +85894,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87102,7 +85924,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87134,7 +85956,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87164,7 +85986,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87196,7 +86018,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87226,7 +86048,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87258,7 +86080,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87288,7 +86110,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87320,7 +86142,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87350,7 +86172,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87382,7 +86204,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87412,7 +86234,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87444,7 +86266,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87474,7 +86296,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87506,7 +86328,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87536,7 +86358,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87568,7 +86390,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87598,7 +86420,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87630,7 +86452,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87660,7 +86482,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87692,7 +86514,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87722,7 +86544,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87754,7 +86576,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87784,7 +86606,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87816,7 +86638,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87846,7 +86668,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87878,7 +86700,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87908,7 +86730,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -87940,7 +86762,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -87970,7 +86792,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88002,7 +86824,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88032,7 +86854,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88064,7 +86886,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88094,7 +86916,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88126,7 +86948,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88156,7 +86978,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88188,7 +87010,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88222,7 +87044,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88254,7 +87076,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88284,7 +87106,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88316,7 +87138,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88346,7 +87168,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88378,7 +87200,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88408,7 +87230,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88440,7 +87262,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88470,7 +87292,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88502,7 +87324,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88532,7 +87354,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88564,7 +87386,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88594,7 +87416,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88626,7 +87448,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88656,7 +87478,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88688,7 +87510,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88718,7 +87540,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88750,7 +87572,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88780,7 +87602,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88812,7 +87634,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88842,7 +87664,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88874,7 +87696,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88904,7 +87726,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88936,7 +87758,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -88966,7 +87788,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -88998,7 +87820,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89028,7 +87850,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89060,7 +87882,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89090,7 +87912,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89122,7 +87944,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89152,7 +87974,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89184,7 +88006,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89214,7 +88036,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89246,7 +88068,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89276,7 +88098,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89308,69 +88130,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build140-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build140-m1", - "os": "Windows-2008ServerR2-SP1", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89400,7 +88160,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -89432,7 +88192,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -89462,7 +88222,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89494,7 +88254,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89515,7 +88275,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89545,7 +88305,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -89577,7 +88337,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -89607,7 +88367,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89639,7 +88399,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89669,7 +88429,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89701,7 +88461,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89731,7 +88491,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89763,7 +88523,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89793,7 +88553,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89825,7 +88585,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89855,7 +88615,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89887,7 +88647,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89917,7 +88677,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -89949,7 +88709,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -89979,7 +88739,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90011,7 +88771,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90041,7 +88801,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90073,7 +88833,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90103,7 +88863,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90135,7 +88895,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90156,7 +88916,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90186,7 +88946,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90216,7 +88976,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90248,7 +89008,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90278,7 +89038,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90310,7 +89070,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90340,7 +89100,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90372,7 +89132,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90402,7 +89162,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90434,7 +89194,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90464,7 +89224,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90496,7 +89256,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90526,7 +89286,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90558,7 +89318,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90588,7 +89348,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90620,7 +89380,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90650,7 +89410,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90682,7 +89442,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90712,7 +89472,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90744,7 +89504,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90774,7 +89534,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90806,7 +89566,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90836,7 +89596,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90868,7 +89628,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90898,7 +89658,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90930,7 +89690,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -90960,7 +89720,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -90992,7 +89752,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91022,7 +89782,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91054,7 +89814,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91084,7 +89844,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91116,7 +89876,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91146,7 +89906,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91178,7 +89938,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91208,7 +89968,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91240,7 +90000,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91270,7 +90030,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91302,7 +90062,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91332,7 +90092,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91364,7 +90124,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91394,7 +90154,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91426,7 +90186,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91456,7 +90216,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91488,7 +90248,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91518,7 +90278,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91550,7 +90310,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91580,7 +90340,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91612,7 +90372,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91642,7 +90402,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91674,7 +90434,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91704,7 +90464,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91736,7 +90496,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91766,7 +90526,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91798,7 +90558,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91828,7 +90588,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91860,7 +90620,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91890,7 +90650,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91922,7 +90682,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -91952,7 +90712,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -91984,7 +90744,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92014,7 +90774,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92046,7 +90806,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92076,7 +90836,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92108,7 +90868,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92138,7 +90898,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92170,7 +90930,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92200,7 +90960,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92232,7 +90992,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92262,7 +91022,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92294,7 +91054,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92324,7 +91084,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92356,7 +91116,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92386,7 +91146,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92418,7 +91178,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92448,7 +91208,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92480,7 +91240,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92510,7 +91270,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92542,7 +91302,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92576,7 +91336,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92608,7 +91368,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92638,7 +91398,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92670,7 +91430,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92700,7 +91460,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92732,7 +91492,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92762,7 +91522,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92794,7 +91554,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92824,7 +91584,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92856,7 +91616,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92886,7 +91646,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92918,7 +91678,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -92948,7 +91708,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -92980,7 +91740,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93010,7 +91770,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93042,7 +91802,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93072,7 +91832,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93104,7 +91864,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93134,7 +91894,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93166,7 +91926,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93196,7 +91956,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93228,7 +91988,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93258,7 +92018,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93290,7 +92050,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93320,7 +92080,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93352,7 +92112,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93382,7 +92142,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93414,7 +92174,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93444,7 +92204,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93476,7 +92236,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93506,7 +92266,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93538,7 +92298,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93568,7 +92328,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93600,7 +92360,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93630,7 +92390,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93662,69 +92422,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": true, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=release_x64", - "--output-format=chartjson" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build145-m1", - "os": "Windows-2012ServerR2-SP0", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, - "hard_timeout": 10800, - "ignore_task_failure": false, - "io_timeout": 600, - "upload_test_results": false - } - }, - { - "args": [ - "image_decoding.image_decoding_measurement", - "-v", - "--upload-results", - "--browser=reference", - "--output-format=chartjson", - "--max-failures=5", - "--output-trace-tag=_ref" - ], - "isolate_name": "telemetry_perf_tests", - "name": "image_decoding.image_decoding_measurement.reference", - "override_compile_targets": [ - "telemetry_perf_tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "102b:0532", - "id": "build145-m1", - "os": "Windows-2012ServerR2-SP0", - "pool": "Chrome-perf" - } - ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93754,7 +92452,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 1200, @@ -93786,7 +92484,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 1200, @@ -93816,7 +92514,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93848,7 +92546,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -93869,7 +92567,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93899,7 +92597,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": false, "io_timeout": 600, @@ -93931,7 +92629,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 14400, "ignore_task_failure": true, "io_timeout": 600, @@ -93961,7 +92659,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -93993,7 +92691,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94023,7 +92721,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94055,7 +92753,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94085,7 +92783,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94117,7 +92815,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94138,7 +92836,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94168,7 +92866,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94200,7 +92898,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94230,7 +92928,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94262,7 +92960,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94292,7 +92990,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94324,7 +93022,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94354,7 +93052,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94386,7 +93084,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94416,7 +93114,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94448,7 +93146,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94478,7 +93176,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94510,7 +93208,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94531,7 +93229,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94561,7 +93259,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94591,7 +93289,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94623,7 +93321,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94653,7 +93351,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94685,7 +93383,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94715,7 +93413,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94747,7 +93445,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94777,7 +93475,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94809,7 +93507,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94839,7 +93537,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94871,7 +93569,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94901,7 +93599,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94933,7 +93631,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -94963,7 +93661,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -94995,7 +93693,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95025,7 +93723,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95057,7 +93755,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95087,7 +93785,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95119,7 +93817,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95149,7 +93847,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95181,7 +93879,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95211,7 +93909,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95243,7 +93941,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95273,7 +93971,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95305,7 +94003,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95335,7 +94033,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95367,7 +94065,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95397,7 +94095,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95429,7 +94127,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95459,7 +94157,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95491,7 +94189,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95521,7 +94219,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95553,7 +94251,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95583,7 +94281,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95615,7 +94313,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95645,7 +94343,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95677,7 +94375,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95707,7 +94405,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95739,7 +94437,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95769,7 +94467,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95801,7 +94499,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95831,7 +94529,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95863,7 +94561,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95893,7 +94591,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95925,7 +94623,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -95955,7 +94653,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -95987,7 +94685,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96017,7 +94715,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96049,7 +94747,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96079,7 +94777,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96111,7 +94809,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96141,7 +94839,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96173,7 +94871,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96203,7 +94901,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96235,7 +94933,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96265,7 +94963,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96297,7 +94995,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96327,7 +95025,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96359,7 +95057,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96389,7 +95087,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96421,7 +95119,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96451,7 +95149,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96483,7 +95181,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96513,7 +95211,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96545,7 +95243,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96575,7 +95273,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96607,7 +95305,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96637,7 +95335,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96669,7 +95367,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96699,7 +95397,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96731,7 +95429,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96761,7 +95459,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96793,7 +95491,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96823,7 +95521,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96855,7 +95553,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600, @@ -96885,7 +95583,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": false, "io_timeout": 600, @@ -96917,7 +95615,7 @@ "pool": "Chrome-perf" } ], - "expiration": 72000, + "expiration": 36000, "hard_timeout": 10800, "ignore_task_failure": true, "io_timeout": 600,
diff --git a/testing/buildbot/filters/fuchsia.base_unittests.filter b/testing/buildbot/filters/fuchsia.base_unittests.filter index 768ba29..16910e2 100644 --- a/testing/buildbot/filters/fuchsia.base_unittests.filter +++ b/testing/buildbot/filters/fuchsia.base_unittests.filter
@@ -52,3 +52,6 @@ # to, but that's easily a poor assumption when running on QEMU without hardware # virtualization. -*TaskSchedulerWorkerPoolImplTest.PostDelayedTask* + +# https://crbug.com/751894 +-ConditionVariableTest.LargeFastTaskTest
diff --git a/testing/buildbot/filters/fuchsia.content_unittests.filter b/testing/buildbot/filters/fuchsia.content_unittests.filter index 6aaaa8e..5a8b308 100644 --- a/testing/buildbot/filters/fuchsia.content_unittests.filter +++ b/testing/buildbot/filters/fuchsia.content_unittests.filter
@@ -1,8 +1,5 @@ # Being ported, https://crbug.com/754861. --AudioRendererSinkCacheTest.SmokeTest --BrowsingDataRemoverImplTest.MultipleTasks --CacheStorageManagerTest.GetAllOriginsUsageWithOldIndex -ChildMemoryCoordinatorImplTest.MultipleClients -LegacyInputRouterImplTest.AckedTouchEventState -MediaStreamManagerTest.MakeAndCancelMultipleRequests @@ -11,19 +8,11 @@ -RenderWidgetHostViewAuraCopyRequestTest.DedupeFrameSubscriberRequests -RenderWidgetHostViewAuraCopyRequestTest.DestroyedAfterCopyRequest -RenderWidgetHostViewAuraCopyRequestTest.PresentTime --RendererAudioOutputStreamFactoryIntegrationTest.StreamIntegrationTest -ServiceWorkerDatabaseTest.DatabaseVersion_CorruptedSchemaVersion -ServiceWorkerProviderHostTest.ActiveIsNotController --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.DownloadToFile/0 --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.DownloadToFile/1 --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.GetFailedResponse2/0 --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.GetFailedResponse2/1 --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.GetResponse/0 --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.GetResponse/1 --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.OnTransferSizeUpdated/0 --URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.OnTransferSizeUpdated/1 -URLLoaderImplTest.Basic -URLLoaderImplTest.BasicSSL +-URLLoaderImplTest.CantSniffEmptyHtml -URLLoaderImplTest.DoNotSniffHTMLFromImageGIF -URLLoaderImplTest.DoNotSniffHTMLFromTextPlain -URLLoaderImplTest.Empty @@ -58,6 +47,8 @@ -AppCacheStorageImplTest.Reinitialize2 -AppCacheStorageImplTest.Reinitialize3 -AppCacheUpdateJobTest.AlreadyChecking/1 +-AppCacheUpdateJobTest.AlreadyDownloading/1 +-BrowsingDataRemoverImplTest.MultipleTasks -ChromeAppCacheServiceTest.KeepOnDestruction -ChromeAppCacheServiceTest.SaveSessionState -DOMStorageAreaTest.DeleteOrigin
diff --git a/testing/buildbot/filters/fuchsia.net_unittests.filter b/testing/buildbot/filters/fuchsia.net_unittests.filter index cf21bd1d..cc4780f 100644 --- a/testing/buildbot/filters/fuchsia.net_unittests.filter +++ b/testing/buildbot/filters/fuchsia.net_unittests.filter
@@ -3,45 +3,24 @@ -*QuicEndToEndTest.Large* -*QuicEndToEndTest.TokenBinding* -*QuicEndToEndTest.Uber* --*QuicHttpStreamTest* --*RootCert* --BbrSenderTest.SimpleTransferAckDecimation2 --BidirectionalStreamTest.TestHonorAlternativeServiceHeader --CertNetFetcherImplTest* -CertVerifyProcInternalTest.* -CloseOnConnectHttpServerTest.ServerImmediatelyClosesConnection --DiskCache* --EffectiveConnectionTypeTest* --EmbeddedTestServer* --HostResolverImplDnsTest.DnsTask +-DiskCacheEntryTest*AsyncIO* # Flaky on the bots +-DiskCacheTest.BlockFiles_Grow # Flaky timeouts -HttpCache.RangeGET_ParallelValidationDifferentRanges # https://crbug.com/755552 -HttpCache.RangeGET_ParallelValidationOverlappingRanges # https://crbug.com/758221 -HttpNetworkTransactionTest.UploadUnreadableFile -HttpServerTest.* -NetworkInterfacesTest.GetNetworkList --NetworkQualitiesPrefManager* -NetworkQualityEstimatorTest* -Proxy* -PythonUtils* --QuicSimpleClientTest* -ReportingUploader* --SimpleIndexFileTest* -SpdyNetworkTransactionTest.UnreadableFilePost -SQLite* -SSL* --ThroughputAnalyzerTest* -TokenBindingURLRequest* --TransportClientSocketPoolTest.RequestTwice -UnixDomain*Socket* -URLFetcher* -URLRequest* -WebSocket* - -# TODO(fuchsia): These run too slowly at present. crbug.com/745094 --BbrSenderTest.* --CryptoServerTests/* --HttpNetworkTransactionTest.* --*Quic* --RangeOfTreeSizes/* --*Spdy* --*SendAlgorithmTests.*
diff --git a/testing/buildbot/trybot_analyze_config.json b/testing/buildbot/trybot_analyze_config.json index a0248f2..0e0578e 100644 --- a/testing/buildbot/trybot_analyze_config.json +++ b/testing/buildbot/trybot_analyze_config.json
@@ -70,6 +70,11 @@ "ui/webui/resources/.*(css|html|js)" ] }, + "fuchsia": { + "exclusions": [ + "build/fuchsia/.*py" + ] + }, "ios": { "exclusions": [ "ios/build/bots/.*"
diff --git a/testing/libfuzzer/fuzzers/feature_policy_corpus/15 b/testing/libfuzzer/fuzzers/feature_policy_corpus/15 new file mode 100644 index 0000000..3423647b --- /dev/null +++ b/testing/libfuzzer/fuzzers/feature_policy_corpus/15
@@ -0,0 +1 @@ +vibrate; fullscreen; payment
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 8682f5a..da228bc 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -1485,6 +1485,24 @@ ] } ], + "MojoInputMessages": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "win" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "MojoInputMessages" + ] + } + ] + } + ], "NTPArticleSuggestions": [ { "platforms": [ @@ -1677,17 +1695,41 @@ "NetDelayableH2AndQuicRequests": [ { "platforms": [ + "win" + ], + "experiments": [ + { + "name": "Enabled3", + "enable_features": [ + "PrioritySupportedRequestsDelayable" + ] + } + ] + }, + { + "platforms": [ + "mac" + ], + "experiments": [ + { + "name": "EnabledHead3", + "enable_features": [ + "HeadPriorityRequestsDelayable" + ] + } + ] + }, + { + "platforms": [ "chromeos", "linux", - "mac", - "win", "android" ], "experiments": [ { - "name": "Enabled", + "name": "Yielding3", "enable_features": [ - "PrioritySupportedRequestsDelayable" + "NetworkSchedulerYielding" ] } ] @@ -1712,25 +1754,6 @@ ] } ], - "NetworkSchedulerYielding": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "win", - "android" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "NetworkSchedulerYielding" - ] - } - ] - } - ], "NewProfileManagement": [ { "platforms": [
diff --git a/third_party/.gitignore b/third_party/.gitignore index dc3d418e..e28b33b1 100644 --- a/third_party/.gitignore +++ b/third_party/.gitignore
@@ -41,6 +41,7 @@ /cld_2/src /cld_3/src /colorama/src +/crc32c/src /cros /cros_system_api /custom_tabs_client/src @@ -214,4 +215,3 @@ /yasm/generate_files.xml /yasm/source/patched-yasm /yasm/yasm.xml -
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index ddf24a03..9fff8198 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -106,7 +106,6 @@ crbug.com/591099 accessibility/image-link.html [ Failure ] crbug.com/591099 accessibility/image-map-title-causes-crash.html [ Failure ] crbug.com/591099 accessibility/image-map-update-parent-crash.html [ Crash Failure ] -crbug.com/591099 accessibility/image-map-with-indirect-area-crash.html [ Failure Pass ] crbug.com/591099 accessibility/image-map1.html [ Failure ] crbug.com/591099 accessibility/img-alt-tag-only-whitespace.html [ Failure ] crbug.com/591099 accessibility/img-aria-button-alt-tag.html [ Failure ] @@ -363,7 +362,6 @@ crbug.com/591099 compositing/gestures/gesture-tapHighlight-2-iframe.html [ Failure ] crbug.com/591099 compositing/gestures/gesture-tapHighlight-img-and-text-2.html [ Failure ] crbug.com/591099 compositing/gestures/gesture-tapHighlight-img-transformed.html [ Failure ] -crbug.com/591099 compositing/gestures/gesture-tapHighlight-overflowing-text-crash.html [ Failure Pass ] crbug.com/591099 compositing/gestures/gesture-tapHighlight-with-box-shadow.html [ Failure ] crbug.com/591099 compositing/iframes/become-composited-nested-iframes.html [ Failure ] crbug.com/591099 compositing/iframes/become-overlapped-iframe.html [ Failure ] @@ -1510,8 +1508,6 @@ crbug.com/591099 css3/filters/filter-with-opacity-and-children.html [ Failure ] crbug.com/591099 css3/filters/filtered-compositing-descendant.html [ Failure ] crbug.com/591099 css3/filters/filtered-inline.html [ Failure ] -crbug.com/591099 css3/filters/huge-region-composited.html [ Failure Pass ] -crbug.com/591099 css3/filters/huge-region.html [ Failure Pass ] crbug.com/591099 css3/filters/nested-filter.html [ Crash Failure ] crbug.com/591099 css3/filters/offscreen-filters-memory-usage.html [ Failure ] crbug.com/591099 css3/filters/regions-expanding.html [ Crash Failure ] @@ -2545,7 +2541,6 @@ crbug.com/591099 editing/execCommand/clipboard-access-with-userGesture.html [ Failure ] crbug.com/591099 editing/execCommand/clipboard-access.html [ Failure ] crbug.com/591099 editing/execCommand/convert-style-elements-to-spans.html [ Failure ] -crbug.com/591099 editing/execCommand/crash-line-break-after-outdent.html [ Crash Failure Pass ] crbug.com/591099 editing/execCommand/default-paragraph-separator.html [ Failure ] crbug.com/591099 editing/execCommand/default-parameters.html [ Failure ] crbug.com/591099 editing/execCommand/delete-selection-has-style.html [ Failure ] @@ -2757,7 +2752,6 @@ crbug.com/591099 editing/pasteboard/copy-image-with-alt-text.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/copy-in-password-field.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/copy-null-characters.html [ Crash Failure ] -crbug.com/591099 editing/pasteboard/copy-paste-bidi.html [ Crash Failure Pass ] crbug.com/591099 editing/pasteboard/copy-paste-float.html [ Crash Failure ] crbug.com/591099 editing/pasteboard/copy-paste-pre-line-content.html [ Failure ] crbug.com/591099 editing/pasteboard/copy-paste-ruby-text-with-block.html [ Crash Failure ] @@ -2886,7 +2880,6 @@ crbug.com/591099 editing/selection/anchor-focus1.html [ Crash Failure ] crbug.com/591099 editing/selection/anchor-focus2.html [ Crash Failure ] crbug.com/591099 editing/selection/anchor-focus3.html [ Crash Failure ] -crbug.com/591099 editing/selection/applystyle-to-inline-in-block.html [ Failure Pass ] crbug.com/591099 editing/selection/block-cursor-overtype-mode-rtl.html [ Failure ] crbug.com/591099 editing/selection/block-cursor-overtype-mode.html [ Failure ] crbug.com/591099 editing/selection/caret-after-keypress.html [ Failure ] @@ -3040,7 +3033,6 @@ crbug.com/591099 editing/selection/move-past-trailing-space.html [ Failure ] crbug.com/591099 editing/selection/move-vertically-with-paddings-borders.html [ Failure ] crbug.com/591099 editing/selection/no-range-canonicalization.html [ Failure ] -crbug.com/591099 editing/selection/offset-from-point.html [ Crash Failure Pass ] crbug.com/591099 editing/selection/paint-hyphen.html [ Failure ] crbug.com/591099 editing/selection/paragraph-granularity.html [ Failure ] crbug.com/591099 editing/selection/paragraph-with-ruby.html [ Crash Failure ] @@ -3138,7 +3130,6 @@ crbug.com/591099 editing/spelling/mixed_paste.html [ Failure ] crbug.com/591099 editing/spelling/spellcheck-async-mutation.html [ Failure ] crbug.com/591099 editing/spelling/spellcheck-disable-enable.html [ Failure ] -crbug.com/591099 editing/spelling/spellcheck-input-search-crash.html [ Failure Pass ] crbug.com/591099 editing/spelling/spellcheck-paste-disabled.html [ Failure ] crbug.com/591099 editing/spelling/spellcheck-paste.html [ Failure ] crbug.com/591099 editing/spelling/spellcheck-queue.html [ Failure ] @@ -3197,7 +3188,6 @@ crbug.com/591099 editing/text-iterator/findString-shadow-roots.html [ Failure ] crbug.com/591099 editing/text-iterator/findString-start-search-after-selection.html [ Failure Pass ] crbug.com/591099 editing/text-iterator/findString.html [ Crash Timeout ] -crbug.com/591099 editing/text-iterator/first-letter-rtl-crash.html [ Failure Pass ] crbug.com/591099 editing/text-iterator/first-letter-word-boundary.html [ Crash Failure ] crbug.com/591099 editing/text-iterator/range-to-from-location-and-length.html [ Failure ] crbug.com/591099 editing/text-iterator/thai-cursor-movement.html [ Crash Failure ] @@ -3250,14 +3240,9 @@ crbug.com/591099 external/wpt/WebCryptoAPI/import_export/test_symmetric_importKey.https.html [ Pass Timeout ] crbug.com/591099 external/wpt/XMLHttpRequest/send-authentication-prompt-2-manual.htm [ Crash Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/float-replaced-width-002.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-009.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-143.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats-clear/floats-147.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/margin-collapse-157.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats-clear/margin-collapse-clear-008.xht [ Failure ] -crbug.com/591099 external/wpt/css/CSS2/floats/floats-placement-vertical-001a.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats/floats-placement-vertical-001b.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/CSS2/floats/floats-placement-vertical-001c.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-001-left-overflow.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-002-left-overflow.xht [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-wrap-bfc-003-left-overflow.xht [ Failure ] @@ -3522,7 +3507,6 @@ crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-filled-001.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-open-001.xht [ Crash Failure ] crbug.com/591099 external/wpt/css/css-text-decor-3/text-emphasis-style-shape-001.xht [ Crash Failure ] -crbug.com/591099 external/wpt/css/css-transforms-2/transform3d-preserve3d-005.html [ Failure Pass ] crbug.com/591099 external/wpt/css/css-ui-3/box-sizing-007.html [ Failure ] crbug.com/591099 external/wpt/css/css-ui-3/box-sizing-008.html [ Failure ] crbug.com/591099 external/wpt/css/css-ui-3/box-sizing-009.html [ Failure ] @@ -3824,7 +3808,6 @@ crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-horiz-004.xhtml [ Crash Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-003.xhtml [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-004.xhtml [ Failure ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-002.xhtml [ Failure Pass ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-003.xhtml [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-vert-rtl-004.xhtml [ Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-baseline-single-item-001a.html [ Crash Failure ] @@ -3847,7 +3830,6 @@ crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-003.html [ Crash Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-004.html [ Crash Failure ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-005.html [ Crash Failure Pass ] -crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-005a.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-006.html [ Crash Failure ] crbug.com/591099 external/wpt/cssom-view/cssom-getClientRects-002.html [ Failure ] crbug.com/591099 external/wpt/cssom-view/elementFromPoint.html [ Crash Failure ] @@ -4009,7 +3991,6 @@ crbug.com/591099 external/wpt/html/semantics/grouping-content/the-li-element/grouping-li-reftest-list-owner-skip-no-boxes.html [ Crash Failure ] crbug.com/591099 external/wpt/html/semantics/interactive-elements/the-dialog-element/centering.html [ Failure ] crbug.com/591099 external/wpt/html/semantics/text-level-semantics/the-br-element/br-bidi-in-inline-ancestors.html [ Failure ] -crbug.com/591099 external/wpt/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html [ Failure Pass ] crbug.com/591099 external/wpt/html/syntax/parsing/named-character-references.html [ Pass Timeout ] crbug.com/591099 external/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm [ Timeout ] crbug.com/591099 external/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-10.htm [ Crash Timeout ] @@ -4022,15 +4003,14 @@ crbug.com/591099 external/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm [ Crash Timeout ] crbug.com/591099 external/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm [ Timeout ] crbug.com/591099 external/wpt/http/basic-auth-cache-test.html [ Crash Timeout ] -crbug.com/591099 external/wpt/imagebitmap/createImageBitmap-invalid-args.html [ Failure ] crbug.com/591099 external/wpt/innerText/getter.html [ Crash Failure ] crbug.com/591099 external/wpt/intersection-observer/edge-inclusive-intersection.html [ Failure ] crbug.com/591099 external/wpt/intersection-observer/remove-element.html [ Failure ] crbug.com/591099 external/wpt/intersection-observer/same-document-root.html [ Crash Failure ] crbug.com/591099 external/wpt/media-source/mediasource-getvideoplaybackquality.html [ Crash Timeout ] crbug.com/591099 external/wpt/media-source/mediasource-remove.html [ Crash Failure Pass ] -crbug.com/591099 external/wpt/payment-request/payment-allowed-by-feature-policy.https.sub.html [ Crash Failure ] -crbug.com/591099 external/wpt/payment-request/payment-disabled-by-feature-policy.https.sub.html [ Crash Failure ] +crbug.com/591099 external/wpt/payment-request/payment-allowed-by-feature-policy.https.sub.html [ Crash Failure Pass ] +crbug.com/591099 external/wpt/payment-request/payment-disabled-by-feature-policy.https.sub.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html [ Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_attributes_hoverable_pointers-manual.html [ Crash Pass Timeout ] crbug.com/591099 external/wpt/pointerevents/pointerevent_attributes_nohover_pointers-manual.html [ Crash Pass Timeout ] @@ -4077,8 +4057,8 @@ crbug.com/591099 external/wpt/webmessaging/broadcastchannel/sandbox.html [ Crash Failure ] crbug.com/591099 external/wpt/webrtc/interfaces.html [ Pass Timeout ] crbug.com/591099 external/wpt/webstorage/storage_setitem.html [ Pass Timeout ] -crbug.com/591099 external/wpt/webusb/usb-allowed-by-feature-policy.https.sub.html [ Crash Failure ] -crbug.com/591099 external/wpt/webusb/usb-disabled-by-feature-policy.https.sub.html [ Crash Failure ] +crbug.com/591099 external/wpt/webusb/usb-allowed-by-feature-policy.https.sub.html [ Crash Failure Pass ] +crbug.com/591099 external/wpt/webusb/usb-disabled-by-feature-policy.https.sub.html [ Crash Failure Pass ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html [ Crash Failure ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_partially_move_up.html [ Crash Failure ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/bidi/bidi_ruby.html [ Crash Failure ] @@ -4201,7 +4181,7 @@ crbug.com/591099 fast/block/basic/quirk-height.html [ Failure ] crbug.com/591099 fast/block/basic/quirk-percent-height-grandchild.html [ Failure ] crbug.com/591099 fast/block/block-parent-with-zero-width-child.html [ Failure ] -crbug.com/757767 fast/block/block-remove-child-delete-line-box-crash.html [ Timeout ] +crbug.com/591099 fast/block/block-remove-child-delete-line-box-crash.html [ Failure Timeout ] crbug.com/591099 fast/block/block-width-recalc-with-relative-height.html [ Crash Failure ] crbug.com/591099 fast/block/block-with-inline-replaced-child-following-text.html [ Crash Failure ] crbug.com/591099 fast/block/borderbox-percent-padding.html [ Failure ] @@ -4249,15 +4229,13 @@ crbug.com/591099 fast/block/float/float-inserted-into-clean-line.html [ Failure ] crbug.com/635619 fast/block/float/float-not-removed-from-first-letter.html [ Crash Failure ] crbug.com/591099 fast/block/float/float-not-removed-from-next-sibling-crash.html [ Failure ] -crbug.com/757767 fast/block/float/float-not-removed-from-next-sibling4.html [ Pass Timeout ] crbug.com/591099 fast/block/float/float-not-removed-from-next-sibling5.html [ Crash Failure ] crbug.com/591099 fast/block/float/float-on-empty-line.html [ Failure ] -crbug.com/591099 fast/block/float/float-on-line-obeys-container-padding.html [ Failure Pass ] crbug.com/591099 fast/block/float/float-on-zero-height-line.html [ Failure ] crbug.com/591099 fast/block/float/float-overflow-hidden-containing-block-width.html [ Failure ] crbug.com/591099 fast/block/float/floats-and-text-indent-rl.html [ Failure ] crbug.com/591099 fast/block/float/floats-and-text-indent.html [ Failure ] -crbug.com/757767 fast/block/float/floats-do-not-overhang-from-block-formatting-context.html [ Crash Timeout Failure ] +crbug.com/757767 fast/block/float/floats-do-not-overhang-from-block-formatting-context.html [ Crash Failure ] crbug.com/591099 fast/block/float/floats-offset-image-quirk-line-height.html [ Failure ] crbug.com/591099 fast/block/float/floats-offset-image-quirk.html [ Failure ] crbug.com/591099 fast/block/float/floats-offset-image-strict-line-height.html [ Failure ] @@ -4269,10 +4247,9 @@ crbug.com/591099 fast/block/float/floats-wrap-inside-inline-002.htm [ Failure ] crbug.com/591099 fast/block/float/floats-wrap-inside-inline-003.htm [ Failure ] crbug.com/591099 fast/block/float/floats-wrap-inside-inline-004.htm [ Failure ] -crbug.com/591099 fast/block/float/floats-wrap-inside-inline-007.html [ Failure Pass ] crbug.com/591099 fast/block/float/formatting-context-changes.html [ Crash Failure ] crbug.com/591099 fast/block/float/independent-align-positioning.html [ Failure ] -crbug.com/757767 fast/block/float/line-break-after-white-space-crash.html [ Crash Timeout ] +crbug.com/757767 fast/block/float/line-break-after-white-space-crash.html [ Crash ] crbug.com/591099 fast/block/float/logical-bottom-exceeds-layoutunit-max.html [ Failure ] crbug.com/591099 fast/block/float/marquee-shrink-to-avoid-floats.html [ Failure ] crbug.com/591099 fast/block/float/negative-margin-on-element-avoiding-floats-with-margin-on-parent.html [ Failure ] @@ -4347,7 +4324,6 @@ crbug.com/591099 fast/block/positioning/absolute-in-inline-dynamic.html [ Failure ] crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl-2.html [ Failure ] crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl-3.html [ Failure ] -crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl-4.html [ Failure Pass ] crbug.com/591099 fast/block/positioning/absolute-in-inline-rtl.html [ Failure ] crbug.com/591099 fast/block/positioning/absolute-in-inline-short-rtl.html [ Failure ] crbug.com/591099 fast/block/positioning/absolute-with-html-border-quirks.html [ Failure ] @@ -4562,7 +4538,6 @@ crbug.com/591099 fast/canvas/canvas-render-layer.html [ Failure Pass ] crbug.com/591099 fast/canvas/canvas-scroll-path-into-view.html [ Failure Timeout ] crbug.com/591099 fast/canvas/canvas-shadow-source-in.html [ Failure Pass ] -crbug.com/591099 fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] crbug.com/591099 fast/canvas/canvas-textMetrics-width.html [ Failure ] crbug.com/591099 fast/canvas/canvas-transforms-during-path.html [ Failure ] crbug.com/591099 fast/canvas/currentTransform-null.html [ Failure ] @@ -4670,6 +4645,7 @@ crbug.com/591099 fast/css-grid-layout/auto-content-resolution-rows.html [ Failure ] crbug.com/591099 fast/css-grid-layout/breadth-size-resolution-grid.html [ Failure ] crbug.com/591099 fast/css-grid-layout/calc-resolution-grid-item.html [ Failure ] +crbug.com/591099 fast/css-grid-layout/changing-content-property-on-nested-grid-should-not-crash.html [ Failure ] crbug.com/591099 fast/css-grid-layout/compute-intrinsic-widths-scrollbar.html [ Failure ] crbug.com/591099 fast/css-grid-layout/display-grid-set-get.html [ Failure ] crbug.com/591099 fast/css-grid-layout/empty-grid.html [ Failure ] @@ -4707,7 +4683,6 @@ crbug.com/591099 fast/css-grid-layout/grid-auto-flow-sparse.html [ Failure ] crbug.com/591099 fast/css-grid-layout/grid-auto-flow-update.html [ Failure ] crbug.com/591099 fast/css-grid-layout/grid-auto-repeat-inherit-initial-crash.html [ Failure ] -crbug.com/591099 fast/css-grid-layout/grid-automatic-minimum-for-auto-rows.html [ Failure Pass ] crbug.com/591099 fast/css-grid-layout/grid-columns-rows-get-set-multiple.html [ Timeout ] crbug.com/591099 fast/css-grid-layout/grid-columns-rows-get-set.html [ Timeout ] crbug.com/591099 fast/css-grid-layout/grid-container-change-explicit-grid-recompute-child.html [ Failure ] @@ -5120,9 +5095,7 @@ crbug.com/591099 fast/css/first-letter-removed-added.html [ Failure ] crbug.com/591099 fast/css/first-letter-set-text.html [ Failure ] crbug.com/591099 fast/css/first-letter-visibility.html [ Failure ] -crbug.com/591099 fast/css/first-line-change-color-direct.html [ Crash Failure Pass ] crbug.com/591099 fast/css/first-line-parent-style-different.html [ Failure ] -crbug.com/591099 fast/css/first-line-style-for-before-after-content.html [ Failure Pass ] crbug.com/591099 fast/css/first-line-text-decoration-inherited-from-parent.html [ Failure ] crbug.com/591099 fast/css/first-line-text-decoration.html [ Failure ] crbug.com/591099 fast/css/first-of-type-pseudo-class.html [ Failure ] @@ -5499,7 +5472,6 @@ crbug.com/591099 fast/css/preferred-stylesheet-order.html [ Failure ] crbug.com/591099 fast/css/preferred-stylesheet-reversed-order.html [ Failure ] crbug.com/591099 fast/css/pseudo-any.html [ Crash Failure ] -crbug.com/591099 fast/css/pseudo-cache-stale.html [ Failure Pass ] crbug.com/591099 fast/css/pseudo-default-001.html [ Failure ] crbug.com/591099 fast/css/pseudo-default-002.html [ Failure ] crbug.com/591099 fast/css/pseudo-default-003.html [ Failure ] @@ -5619,7 +5591,6 @@ crbug.com/591099 fast/css/test-setting-canvas-color.html [ Failure ] crbug.com/591099 fast/css/text-align-webkit-match-parent.html [ Failure ] crbug.com/591099 fast/css/text-align.html [ Failure ] -crbug.com/591099 fast/css/text-decorations-on-first-line-and-containing-block.html [ Failure Pass ] crbug.com/734554 fast/css/text-indent-first-line-002.html [ Failure ] crbug.com/591099 fast/css/text-overflow-ellipsis-bidi.html [ Failure ] crbug.com/591099 fast/css/text-overflow-ellipsis-block-with-border-and-padding.html [ Failure ] @@ -5686,8 +5657,6 @@ crbug.com/591099 fast/css3-text/css3-text-decoration/stable/getComputedStyle-text-decoration.html [ Failure ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-decoration-skip.html [ Failure ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow.html [ Failure ] -crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-first-line-decoration-vertical.html [ Crash Failure Pass ] -crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-first-line-decoration.html [ Crash Failure Pass ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-auto.html [ Failure ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk.html [ Crash Failure ] crbug.com/591099 fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under.html [ Failure ] @@ -6484,7 +6453,6 @@ crbug.com/591099 fast/dom/replace-child-siblings.html [ Failure ] crbug.com/591099 fast/dom/replace-first-child.html [ Failure ] crbug.com/591099 fast/dom/replaced-image-map.html [ Failure ] -crbug.com/591099 fast/dom/right-overflow-in-rtl.html [ Crash Failure Pass ] crbug.com/591099 fast/dom/root-client-size-iframe.html [ Failure ] crbug.com/591099 fast/dom/root-client-size.html [ Failure ] crbug.com/591099 fast/dom/row-inner-text.html [ Failure ] @@ -6702,7 +6670,6 @@ crbug.com/591099 fast/dynamic/float-from-empty-line.html [ Failure ] crbug.com/591099 fast/dynamic/float-in-trailing-whitespace-after-last-line-break-2.html [ Failure ] crbug.com/591099 fast/dynamic/float-in-trailing-whitespace-after-last-line-break.html [ Failure ] -crbug.com/591099 fast/dynamic/float-moved-downwards-for-pagination.html [ Failure Pass ] crbug.com/591099 fast/dynamic/float-no-longer-overhanging.html [ Failure ] crbug.com/591099 fast/dynamic/float-remove-above-line-2.html [ Failure ] crbug.com/591099 fast/dynamic/float-remove-above-line.html [ Failure ] @@ -6734,7 +6701,7 @@ crbug.com/591099 fast/dynamic/positioned-movement-with-positioned-children.html [ Failure ] crbug.com/591099 fast/dynamic/recursive-layout.html [ Failure ] crbug.com/591099 fast/dynamic/selection-highlight-adjust.html [ Failure ] -crbug.com/757767 fast/dynamic/static-to-relative-with-absolute-child-in-multicol.html [ Timeout ] +crbug.com/757767 fast/dynamic/static-to-relative-with-absolute-child-in-multicol.html [ Pass Timeout ] crbug.com/591099 fast/dynamic/staticY-marking-parents-regression.html [ Failure ] crbug.com/591099 fast/dynamic/staticY.html [ Failure Pass ] crbug.com/591099 fast/dynamic/subtree-boundary-percent-height.html [ Failure ] @@ -7118,7 +7085,6 @@ crbug.com/591099 fast/events/mutation-during-replace-child.html [ Failure ] crbug.com/591099 fast/events/no-blur-on-enter-button.html [ Failure ] crbug.com/591099 fast/events/offsetX-offsetY.html [ Failure Timeout ] -crbug.com/591099 fast/events/onbeforeunload-focused-iframe.html [ Failure Pass ] crbug.com/591099 fast/events/onblur-remove.html [ Crash Failure ] crbug.com/591099 fast/events/onchange-passwordfield.html [ Failure ] crbug.com/591099 fast/events/onchange-range-slider.html [ Failure ] @@ -7362,8 +7328,6 @@ crbug.com/591099 fast/events/wheel/wheelevent-ctrl.html [ Failure ] crbug.com/591099 fast/events/wheel/wheelevent-document-createevent.html [ Failure ] crbug.com/591099 fast/events/wheel/wheelevent-handler-count.html [ Failure ] -crbug.com/591099 fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html [ Failure Pass ] -crbug.com/591099 fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html [ Failure Pass ] crbug.com/591099 fast/events/wheel/wheelevent-mousewheel-interaction.html [ Failure ] crbug.com/591099 fast/events/window-errorevent-01.html [ Failure ] crbug.com/591099 fast/events/window-errorevent-02.html [ Failure ] @@ -7388,9 +7352,6 @@ crbug.com/591099 fast/events/xsl-onload.xhtml [ Failure ] crbug.com/591099 fast/eventsource/eventsource-attribute-listeners.html [ Failure ] crbug.com/591099 fast/eventsource/eventsource-constructor.html [ Failure ] -crbug.com/591099 fast/files/blob-close-read.html [ Failure ] -crbug.com/591099 fast/files/blob-close-revoke.html [ Failure ] -crbug.com/591099 fast/files/blob-close.html [ Failure ] crbug.com/591099 fast/files/blob-constructor.html [ Crash Failure ] crbug.com/591099 fast/files/blob-parts-slice-test.html [ Failure ] crbug.com/591099 fast/files/blob-slice-test.html [ Crash Failure ] @@ -7507,7 +7468,6 @@ crbug.com/591099 fast/forms/button/button-baseline-and-collapsing.html [ Failure ] crbug.com/591099 fast/forms/button/button-cannot-be-nested.html [ Failure Pass ] crbug.com/591099 fast/forms/button/button-click-DOM.html [ Failure ] -crbug.com/591099 fast/forms/button/button-first-line-first-letter.html [ Failure Pass ] crbug.com/591099 fast/forms/button/button-in-forms-collection.html [ Failure ] crbug.com/591099 fast/forms/button/button-inner-block-reuse.html [ Failure ] crbug.com/591099 fast/forms/button/button-submit.html [ Failure Pass ] @@ -8003,7 +7963,6 @@ crbug.com/591099 fast/forms/range/slider-thumb-stylability.html [ Failure ] crbug.com/591099 fast/forms/range/slider-transformed.html [ Failure Pass ] crbug.com/591099 fast/forms/range/slider-zoomed.html [ Failure ] -crbug.com/591099 fast/forms/range/thumbslider-crash.html [ Failure Pass ] crbug.com/591099 fast/forms/range/thumbslider-no-parent-slider.html [ Failure ] crbug.com/591099 fast/forms/removed-image-as-property.html [ Crash Failure ] crbug.com/591099 fast/forms/render-text-crash.html [ Crash Failure ] @@ -8096,7 +8055,7 @@ crbug.com/591099 fast/forms/select/listbox-with-display-none-option.html [ Failure ] crbug.com/591099 fast/forms/select/menulist-appearance-basic.html [ Failure ] crbug.com/591099 fast/forms/select/menulist-appearance-none.html [ Failure ] -crbug.com/757767 fast/forms/select/menulist-appearance-rtl.html [ Timeout ] +crbug.com/591099 fast/forms/select/menulist-appearance-rtl.html [ Failure Timeout ] crbug.com/591099 fast/forms/select/menulist-clip.html [ Failure ] crbug.com/591099 fast/forms/select/menulist-deselect-update.html [ Failure ] crbug.com/591099 fast/forms/select/menulist-disabled-selected-option.html [ Failure ] @@ -8312,7 +8271,7 @@ crbug.com/591099 fast/forms/text/input-delete.html [ Crash Failure ] crbug.com/591099 fast/forms/text/input-disabled-color.html [ Crash Failure ] crbug.com/591099 fast/forms/text/input-double-click-selection-gap-bug.html [ Failure ] -crbug.com/591099 fast/forms/text/input-element-attach-crash.html [ Failure ] +crbug.com/591099 fast/forms/text/input-element-attach-crash.html [ Failure Pass ] crbug.com/591099 fast/forms/text/input-field-text-truncated.html [ Crash Failure ] crbug.com/591099 fast/forms/text/input-hit-test-border.html [ Failure ] crbug.com/591099 fast/forms/text/input-live-pseudo-selectors.html [ Crash Failure ] @@ -8624,8 +8583,6 @@ crbug.com/591099 fast/frames/sandboxed-iframe-storage.html [ Failure ] crbug.com/591099 fast/frames/sandboxed-iframe-workers.html [ Failure ] crbug.com/591099 fast/frames/set-iframe-src-in-pagehide-crash.html [ Failure ] -crbug.com/591099 fast/frames/set-parent-src-synchronously-html.html [ Failure Pass ] -crbug.com/591099 fast/frames/set-parent-src-synchronously-xhtml.xhtml [ Failure Pass ] crbug.com/591099 fast/frames/srcdoc/setting-src-does-nothing.html [ Failure ] crbug.com/591099 fast/frames/srcdoc/setting-srcdoc-reloads-document.html [ Failure ] crbug.com/591099 fast/frames/take-focus-from-iframe.html [ Crash Failure ] @@ -8660,16 +8617,13 @@ crbug.com/591099 fast/gradients/gradient-after-transparent-border.html [ Failure ] crbug.com/591099 fast/gradients/list-item-gradient.html [ Crash Failure ] crbug.com/591099 fast/gradients/radial-centered.html [ Failure ] -crbug.com/591099 fast/gradients/radial-clamping.html [ Failure Pass ] crbug.com/591099 fast/gradients/repeating-conic-gradient.html [ Failure ] crbug.com/591099 fast/gradients/simple-gradients.html [ Failure ] crbug.com/591099 fast/gradients/unprefixed-color-stops.html [ Failure ] crbug.com/591099 fast/gradients/unprefixed-gradient-parsing.html [ Failure ] crbug.com/591099 fast/gradients/unprefixed-linear-angle-gradients.html [ Failure ] -crbug.com/591099 fast/gradients/unprefixed-linear-gradients-color-hints.html [ Failure Pass ] crbug.com/591099 fast/gradients/unprefixed-linear-right-angle-gradients.html [ Crash Failure ] crbug.com/591099 fast/gradients/unprefixed-list-item-gradient.html [ Crash Failure ] -crbug.com/591099 fast/gradients/unprefixed-radial-gradients-color-hints.html [ Failure Pass ] crbug.com/591099 fast/gradients/unprefixed-radial-gradients.html [ Failure ] crbug.com/591099 fast/gradients/unprefixed-radial-gradients2.html [ Failure ] crbug.com/591099 fast/gradients/unprefixed-repeating-linear-gradient.html [ Failure ] @@ -8783,7 +8737,6 @@ crbug.com/591099 fast/inline/fixed-pos-with-transform-container-moves-with-abspos-parent.html [ Failure ] crbug.com/591099 fast/inline/inline-body-with-inline-child.html [ Failure ] crbug.com/591099 fast/inline/inline-borders-with-bidi-override.html [ Failure ] -crbug.com/591099 fast/inline/inline-box-adjust-position-crash.html [ Crash Failure Pass ] crbug.com/591099 fast/inline/inline-box-background-long-image.html [ Failure ] crbug.com/591099 fast/inline/inline-box-background-repeat-x.html [ Failure ] crbug.com/591099 fast/inline/inline-box-background-repeat-y.html [ Failure ] @@ -9311,8 +9264,6 @@ crbug.com/591099 fast/mediastream/MediaStream-stop.html [ Failure ] crbug.com/591099 fast/mediastream/MediaStreamConstructor.html [ Failure ] crbug.com/591099 fast/mediastream/MediaStreamTrack-gc-no-crash.html [ Failure ] -crbug.com/591099 fast/mediastream/MediaStreamTrack-observer-iterate-no-crash.html [ Failure Pass ] -crbug.com/591099 fast/mediastream/MediaStreamTrack.html [ Failure Pass ] crbug.com/591099 fast/mediastream/argument-types.html [ Failure ] crbug.com/591099 fast/mediastream/constructors.html [ Failure ] crbug.com/591099 fast/mediastream/enabled.html [ Failure ] @@ -9323,51 +9274,51 @@ crbug.com/591099 fast/multicol/abspos-in-overflow-hidden-in-2nd-column.html [ Failure ] crbug.com/591099 fast/multicol/abspos-new-width-rebalance.html [ Failure ] crbug.com/757767 fast/multicol/anonymous-block-split-crash.html [ Timeout ] -crbug.com/757767 fast/multicol/auto-height-forced-break-complex-margin-collapsing.html [ Timeout ] -crbug.com/757767 fast/multicol/balance-break-inside-avoid.html [ Timeout ] +crbug.com/591099 fast/multicol/auto-height-forced-break-complex-margin-collapsing.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/balance-break-inside-avoid.html [ Failure Timeout ] crbug.com/591099 fast/multicol/balance-breakafter-before-nested-block.html [ Failure ] crbug.com/591099 fast/multicol/balance-breakafter-before-table-section-crash.html [ Failure ] crbug.com/591099 fast/multicol/balance-empty-block-subpixel-column-height.html [ Failure ] crbug.com/591099 fast/multicol/balance-fixed-height-unused-space-after-strutless-break.html [ Failure ] crbug.com/591099 fast/multicol/balance-fixed-height-unused-space-nested-block.html [ Failure ] crbug.com/591099 fast/multicol/balance-fixed-height-unused-space.html [ Failure ] -crbug.com/757767 fast/multicol/balance-float-after-forced-break.html [ Timeout ] +crbug.com/591099 fast/multicol/balance-float-after-forced-break.html [ Failure Timeout ] crbug.com/757767 fast/multicol/balance-float-in-inline.html [ Timeout ] crbug.com/757767 fast/multicol/balance-float-with-margin-top-and-line-after-break-2.html [ Timeout ] crbug.com/757767 fast/multicol/balance-float-with-margin-top-and-line-after-break-3.html [ Timeout ] crbug.com/757767 fast/multicol/balance-float-with-margin-top-and-line-after-break.html [ Timeout ] crbug.com/757767 fast/multicol/balance-float-with-margin-top-and-line-before-break.html [ Timeout ] -crbug.com/757767 fast/multicol/balance-floats.html [ Timeout Failure ] -crbug.com/757767 fast/multicol/balance-inner-near-outer-boundary.html [ Timeout ] +crbug.com/591099 fast/multicol/balance-floats.html [ Failure ] +crbug.com/591099 fast/multicol/balance-inner-near-outer-boundary.html [ Failure Timeout ] crbug.com/757767 fast/multicol/balance-line-overflow.html [ Crash ] crbug.com/591099 fast/multicol/balance-line-underflow-1.html [ Failure ] crbug.com/591099 fast/multicol/balance-line-underflow-2.html [ Failure ] -crbug.com/757767 fast/multicol/balance-repeating-table-headers.html [ Timeout ] +crbug.com/591099 fast/multicol/balance-repeating-table-headers.html [ Failure Timeout ] crbug.com/591099 fast/multicol/balance-short-trailing-empty-block.html [ Failure ] crbug.com/591099 fast/multicol/balance-table-with-border-spacing.html [ Failure ] crbug.com/591099 fast/multicol/balance-trailing-border-after-break.html [ Failure ] crbug.com/591099 fast/multicol/balance-trailing-border.html [ Failure ] -crbug.com/757767 fast/multicol/balance-unbreakable.html [ Timeout ] +crbug.com/591099 fast/multicol/balance-unbreakable.html [ Failure Timeout ] crbug.com/757767 fast/multicol/basic-rtl.html [ Crash ] crbug.com/591099 fast/multicol/border-radius-clipped-layer-second-column.html [ Failure ] crbug.com/591099 fast/multicol/border-radius-clipped-layer.html [ Failure ] -crbug.com/757767 fast/multicol/break-after-always-bottom-margin.html [ Timeout ] +crbug.com/591099 fast/multicol/break-after-always-bottom-margin.html [ Failure Timeout ] crbug.com/591099 fast/multicol/break-before-first-line-in-first-child.html [ Failure ] -crbug.com/757767 fast/multicol/break-properties.html [ Timeout ] +crbug.com/591099 fast/multicol/break-properties.html [ Failure Timeout ] crbug.com/591099 fast/multicol/caret-range-anonymous-block-rtl.html [ Failure ] crbug.com/591099 fast/multicol/caret-range-anonymous-block.html [ Failure ] crbug.com/757767 fast/multicol/caret-range-outside-columns-rtl.html [ Crash ] crbug.com/757767 fast/multicol/caret-range-outside-columns.html [ Crash ] -crbug.com/757767 fast/multicol/change-block-child-height.html [ Timeout ] +crbug.com/757767 fast/multicol/change-block-child-height.html [ Crash Timeout ] crbug.com/757767 fast/multicol/change-column-rule.html [ Crash ] crbug.com/757767 fast/multicol/change-height.html [ Crash ] -crbug.com/591099 fast/multicol/client-rect-after-spanner.html [ Timeout ] -crbug.com/591099 fast/multicol/client-rect-nested.html [ Timeout ] +crbug.com/591099 fast/multicol/client-rect-after-spanner.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/client-rect-nested.html [ Failure Timeout ] crbug.com/591099 fast/multicol/client-rect-overflowing-multicol-2-columns.html [ Failure ] crbug.com/591099 fast/multicol/client-rect-overflowing-multicol.html [ Failure ] crbug.com/591099 fast/multicol/client-rect-trailing-column.html [ Failure ] crbug.com/757767 fast/multicol/client-rects-crossing-boundaries-nested.html [ Timeout ] -crbug.com/757767 fast/multicol/client-rects-crossing-boundaries.html [ Timeout ] +crbug.com/591099 fast/multicol/client-rects-crossing-boundaries.html [ Failure Timeout ] crbug.com/591099 fast/multicol/client-rects-empty-element-boundary.html [ Failure ] crbug.com/757767 fast/multicol/client-rects-rtl.html [ Crash ] crbug.com/591099 fast/multicol/client-rects-sole-empty-block.html [ Failure ] @@ -9401,14 +9352,14 @@ crbug.com/757767 fast/multicol/doubly-nested-with-insane-child-height-crash.html [ Timeout ] crbug.com/757767 fast/multicol/doubly-nested-with-top-padding-crossing-row-boundaries.html [ Timeout ] crbug.com/591099 fast/multicol/dynamic/abspos-becomes-spanner.html [ Failure ] -crbug.com/757767 fast/multicol/dynamic/abspos-multicol-with-spanner-becomes-spanner.html [ Timeout ] +crbug.com/591099 fast/multicol/dynamic/abspos-multicol-with-spanner-becomes-spanner.html [ Failure Timeout ] crbug.com/591099 fast/multicol/dynamic/add-will-change-transform.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/block-becomes-spanner.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/block-with-abspos-video-becomes-multicol-crash.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/block-with-spanner-and-inline-and-table-column.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/bottom-aligned-abspos-change-column-height.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/change-block-with-inline-to-multicol-assert.html [ Failure ] -crbug.com/757767 fast/multicol/dynamic/change-second-row-height.html [ Timeout ] +crbug.com/591099 fast/multicol/dynamic/change-second-row-height.html [ Failure Timeout ] crbug.com/591099 fast/multicol/dynamic/change-spanner-display.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/change-spanner-parent-display.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/float-becomes-spanner.html [ Failure ] @@ -9449,7 +9400,7 @@ crbug.com/591099 fast/multicol/dynamic/remove-block-from-content-after-spanner.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/remove-block-from-content-before-spanner.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/remove-block-from-content-between-spanners.html [ Failure ] -crbug.com/757767 fast/multicol/dynamic/remove-column-content-next-to-abspos-between-spanners.html [ Timeout ] +crbug.com/591099 fast/multicol/dynamic/remove-column-content-next-to-abspos-between-spanners.html [ Failure Timeout ] crbug.com/591099 fast/multicol/dynamic/remove-content-before-inner-multicol-with-spanner-crash.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/remove-content-from-scrollable.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/remove-inline-and-spanner-after-spanner-foreignObject.html [ Failure ] @@ -9458,16 +9409,16 @@ crbug.com/757767 fast/multicol/dynamic/remove-spanner-in-content.html [ Crash ] crbug.com/591099 fast/multicol/dynamic/sole-spanner-becomes-abspos-crash.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/spanner-after-content-becomes-regular-block.html [ Failure ] -crbug.com/757767 fast/multicol/dynamic/spanner-ancestor-becomes-spanner.html [ Timeout ] +crbug.com/591099 fast/multicol/dynamic/spanner-ancestor-becomes-spanner.html [ Failure Timeout ] crbug.com/591099 fast/multicol/dynamic/spanner-becomes-abspos-crash.html [ Failure ] -crbug.com/757767 fast/multicol/dynamic/spanner-becomes-float.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/dynamic/spanner-becomes-float.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/spanner-becomes-regular-block.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/spanner-before-content-becomes-regular-block.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/spanner-in-content-becomes-regular-block.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/static-becomes-relpos-has-abspos-crash.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/static-becomes-relpos-has-abspos.html [ Failure ] crbug.com/591099 fast/multicol/dynamic/untransformed-becomes-transformed-has-abspos-crash.html [ Failure ] -crbug.com/757767 fast/multicol/dynamic/valid-spanner-container-becomes-invalid.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/dynamic/valid-spanner-container-becomes-invalid.html [ Failure ] crbug.com/591099 fast/multicol/empty-list-item.html [ Failure ] crbug.com/591099 fast/multicol/event-offset-complex-tree.html [ Failure ] crbug.com/757767 fast/multicol/event-offset-in-nested.html [ Timeout ] @@ -9477,8 +9428,8 @@ crbug.com/591099 fast/multicol/first-line-in-block-below-next-column-top.html [ Failure ] crbug.com/591099 fast/multicol/first-line-in-block-with-padding-exact-fit.html [ Failure ] crbug.com/591099 fast/multicol/first-line-in-block-with-padding.html [ Failure ] -crbug.com/757767 fast/multicol/first-line-in-float-below-next-column-top.html [ Timeout Failure ] -crbug.com/757767 fast/multicol/first-line-in-float-with-margin.html [ Timeout Failure ] +crbug.com/591099 fast/multicol/first-line-in-float-below-next-column-top.html [ Failure ] +crbug.com/591099 fast/multicol/first-line-in-float-with-margin.html [ Failure ] crbug.com/591099 fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode.html [ Failure ] crbug.com/591099 fast/multicol/fixedpos-child-becomes-static.html [ Failure ] crbug.com/591099 fast/multicol/fixedpos-in-transform-at-column-boundary.html [ Failure ] @@ -9488,42 +9439,42 @@ crbug.com/591099 fast/multicol/flexbox.html [ Failure ] crbug.com/591099 fast/multicol/flipped-blocks-border-after.html [ Failure ] crbug.com/591099 fast/multicol/flipped-blocks-hit-test.html [ Failure ] -crbug.com/757767 fast/multicol/float-after-break-after.html [ Timeout Failure ] +crbug.com/591099 fast/multicol/float-after-break-after.html [ Failure ] crbug.com/757767 fast/multicol/float-avoidance.html [ Crash ] crbug.com/591099 fast/multicol/float-beside-bfc.html [ Failure ] crbug.com/591099 fast/multicol/float-big-line.html [ Failure ] -crbug.com/757767 fast/multicol/float-break.html [ Crash Timeout ] +crbug.com/757767 fast/multicol/float-break.html [ Crash ] crbug.com/757767 fast/multicol/float-content-break.html [ Timeout ] -crbug.com/757767 fast/multicol/float-edge.html [ Crash Timeout ] +crbug.com/757767 fast/multicol/float-edge.html [ Crash ] crbug.com/591099 fast/multicol/float-margin-at-row-boundary-fixed-multicol-height.html [ Failure ] -crbug.com/757767 fast/multicol/float-margin-at-row-boundary.html [ Timeout ] +crbug.com/591099 fast/multicol/float-margin-at-row-boundary.html [ Failure Timeout ] crbug.com/757767 fast/multicol/float-moved-by-child-line-and-unbreakable.html [ Timeout ] -crbug.com/757767 fast/multicol/float-not-removed-crash.html [ Timeout ] +crbug.com/757767 fast/multicol/float-not-removed-crash.html [ Pass Timeout ] crbug.com/757767 fast/multicol/float-paginate-empty-lines.html [ Timeout ] -crbug.com/757767 fast/multicol/float-paginate.html [ Crash Timeout ] -crbug.com/757767 fast/multicol/float-truncation.html [ Crash Timeout ] +crbug.com/757767 fast/multicol/float-paginate.html [ Crash ] +crbug.com/757767 fast/multicol/float-truncation.html [ Crash ] crbug.com/757767 fast/multicol/float-with-margin-moved-by-child-block-and-unbreakable.html [ Timeout ] crbug.com/757767 fast/multicol/float-with-margin-moved-by-child-block.html [ Timeout ] crbug.com/757767 fast/multicol/float-with-margin-moved-by-child-line-and-unbreakable.html [ Timeout ] crbug.com/757767 fast/multicol/float-with-margin-moved-by-child-line.html [ Timeout ] -crbug.com/757767 fast/multicol/float-with-margin-moved-unbreakable.html [ Timeout Failure ] -crbug.com/757767 fast/multicol/forced-break-after-block-with-spanner.html [ Timeout ] -crbug.com/757767 fast/multicol/forced-break-after-empty-block-after-spanner.html [ Timeout ] -crbug.com/757767 fast/multicol/forced-break-after-last-block-before-spanner.html [ Timeout ] +crbug.com/591099 fast/multicol/float-with-margin-moved-unbreakable.html [ Failure ] +crbug.com/591099 fast/multicol/forced-break-after-block-with-spanner.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/forced-break-after-empty-block-after-spanner.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/forced-break-after-last-block-before-spanner.html [ Failure Timeout ] crbug.com/591099 fast/multicol/forced-break-before-complex-margin-collapsing.html [ Failure ] -crbug.com/757767 fast/multicol/forced-break-in-nested-columns.html [ Timeout ] +crbug.com/591099 fast/multicol/forced-break-in-nested-columns.html [ Failure Timeout ] crbug.com/591099 fast/multicol/forced-break-too-short-column.html [ Failure ] crbug.com/591099 fast/multicol/foreignObject.html [ Failure ] crbug.com/591099 fast/multicol/gap-non-negative.html [ Failure ] crbug.com/591099 fast/multicol/grid-with-auto-scrollbar-crash.html [ Failure ] -crbug.com/757767 fast/multicol/hit-test-above-or-below.html [ Timeout ] +crbug.com/591099 fast/multicol/hit-test-above-or-below.html [ Failure Timeout ] crbug.com/757767 fast/multicol/hit-test-end-of-column-with-line-height.html [ Crash ] crbug.com/757767 fast/multicol/hit-test-end-of-column.html [ Crash ] crbug.com/591099 fast/multicol/hit-test-float.html [ Failure ] crbug.com/591099 fast/multicol/hit-test-gap-between-pages-flipped.html [ Failure ] crbug.com/591099 fast/multicol/hit-test-gap-between-pages.html [ Failure ] crbug.com/591099 fast/multicol/hit-test-translate-z.html [ Failure ] -crbug.com/757767 fast/multicol/huge-column-count.html [ Crash ] +crbug.com/757767 fast/multicol/huge-column-count.html [ Crash Timeout ] crbug.com/757767 fast/multicol/huge-column-gap-crash.html [ Crash ] crbug.com/591099 fast/multicol/image-inside-nested-blocks-with-border.html [ Failure ] crbug.com/757767 fast/multicol/image-loaded-before-layout-assert.html [ Crash ] @@ -9545,9 +9496,9 @@ crbug.com/757767 fast/multicol/many-lines-overflow-in-single-row-inner.html [ Crash ] crbug.com/591099 fast/multicol/margin-bottom-and-break-after.html [ Failure ] crbug.com/591099 fast/multicol/margin-collapse.html [ Failure ] -crbug.com/757767 fast/multicol/min-height-greater-than-content.html [ Timeout ] +crbug.com/591099 fast/multicol/min-height-greater-than-content.html [ Failure Timeout ] crbug.com/591099 fast/multicol/min-height-greater-than-height.html [ Failure ] -crbug.com/757767 fast/multicol/min-height-less-than-content.html [ Timeout ] +crbug.com/591099 fast/multicol/min-height-less-than-content.html [ Failure Timeout ] crbug.com/591099 fast/multicol/min-height-less-than-height.html [ Failure ] crbug.com/591099 fast/multicol/min-height-much-greater-than-content.html [ Failure ] crbug.com/591099 fast/multicol/mixed-opacity-fixed-test.html [ Failure ] @@ -9557,9 +9508,8 @@ crbug.com/757767 fast/multicol/multicol-becomes-paged-auto-height.html [ Crash ] crbug.com/757767 fast/multicol/multicol-becomes-paged-fixed-height.html [ Crash ] crbug.com/757767 fast/multicol/multicol-becomes-regular-block.html [ Crash ] -crbug.com/757767 fast/multicol/multicol-on-root-element-quirks.html [ Timeout ] +crbug.com/591099 fast/multicol/multicol-on-root-element-quirks.html [ Failure Timeout ] crbug.com/757767 fast/multicol/multicol-with-child-renderLayer-for-input.html [ Crash ] -crbug.com/757767 fast/multicol/multicol-with-spanner-becomes-paged.html [ Timeout ] crbug.com/591099 fast/multicol/negative-margins-crash.html [ Failure ] crbug.com/757767 fast/multicol/nested-3-multicols-fixed-height.html [ Crash ] crbug.com/757767 fast/multicol/nested-after-composited-layer-crash.html [ Crash ] @@ -9568,36 +9518,34 @@ crbug.com/757767 fast/multicol/nested-auto-height-short-first-row.html [ Crash ] crbug.com/757767 fast/multicol/nested-auto-height.html [ Crash ] crbug.com/591099 fast/multicol/nested-balanced-inner-column-count-1-with-forced-break-2.html [ Failure ] -crbug.com/757767 fast/multicol/nested-balanced-inner-column-count-1-with-forced-break.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-balanced-inner-with-many-breaks-2.html [ Timeout ] +crbug.com/591099 fast/multicol/nested-balanced-inner-column-count-1-with-forced-break.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/nested-balanced-inner-with-many-breaks-2.html [ Failure Timeout ] crbug.com/591099 fast/multicol/nested-balanced-inner-with-many-breaks.html [ Failure ] -crbug.com/757767 fast/multicol/nested-balanced-with-strut-before-first-line.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-balancing-with-block-start-in-early-row-crash.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-balancing-with-line-at-exact-top.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-balancing-with-lines-and-space-left-in-previous-row.html [ Timeout ] +crbug.com/591099 fast/multicol/nested-balanced-with-strut-before-first-line.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/nested-balancing-with-block-start-in-early-row-crash.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/nested-balancing-with-line-at-exact-top.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/nested-balancing-with-lines-and-space-left-in-previous-row.html [ Failure Timeout ] crbug.com/757767 fast/multicol/nested-columns.html [ Crash ] crbug.com/757767 fast/multicol/nested-fixed-height-with-struts.html [ Crash ] -crbug.com/757767 fast/multicol/nested-inner-auto-height-outer-extra-space.html [ Timeout ] +crbug.com/591099 fast/multicol/nested-inner-auto-height-outer-extra-space.html [ Failure Timeout ] crbug.com/757767 fast/multicol/nested-inside-unbreakable-crash.html [ Crash ] crbug.com/591099 fast/multicol/nested-multicol-two-spanners-dynamic.html [ Failure ] crbug.com/757767 fast/multicol/nested-one-line-in-inner.html [ Crash ] crbug.com/757767 fast/multicol/nested-outer-fixed-height.html [ Crash ] -crbug.com/757767 fast/multicol/nested-short-first-row-extra-tall-line.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-short-first-row-unsplittable-block.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-uneven-inner-column-height.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-very-tall-inside-short-crash.html [ Timeout ] +crbug.com/591099 fast/multicol/nested-short-first-row-extra-tall-line.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/nested-short-first-row-unsplittable-block.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/nested-uneven-inner-column-height.html [ Failure Timeout ] crbug.com/757767 fast/multicol/nested-with-clipped-first-column.html [ Crash ] -crbug.com/757767 fast/multicol/nested-with-composited-and-multicol-crash.html [ Timeout ] -crbug.com/757767 fast/multicol/nested-with-forced-breaks-in-eariler-rows.html [ Timeout ] +crbug.com/591099 fast/multicol/nested-with-composited-and-multicol-crash.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/nested-with-forced-breaks-in-eariler-rows.html [ Failure Timeout ] crbug.com/757767 fast/multicol/nested-with-line-taller-than-outer.html [ Crash ] crbug.com/757767 fast/multicol/nested-with-padding.html [ Crash ] -crbug.com/757767 fast/multicol/nested-with-single-empty-block.html [ Timeout ] +crbug.com/591099 fast/multicol/nested-with-single-empty-block.html [ Failure Timeout ] crbug.com/757767 fast/multicol/nested-with-single-tall-line.html [ Crash ] -crbug.com/757767 fast/multicol/nested-with-spanner-inside-margins-crash.html [ Timeout ] crbug.com/757767 fast/multicol/nested-with-tall-block.html [ Timeout ] crbug.com/757767 fast/multicol/nested-writing-mode-root-crash.html [ Crash ] crbug.com/591099 fast/multicol/newmulticol/avoid-column-break-inside.html [ Failure ] -crbug.com/757767 fast/multicol/newmulticol/balance-images.html [ Timeout ] +crbug.com/591099 fast/multicol/newmulticol/balance-images.html [ Failure Timeout ] crbug.com/757767 fast/multicol/newmulticol/balance-maxheight1.html [ Crash ] crbug.com/757767 fast/multicol/newmulticol/balance-maxheight2.html [ Crash ] crbug.com/757767 fast/multicol/newmulticol/balance1.html [ Crash ] @@ -9607,13 +9555,13 @@ crbug.com/757767 fast/multicol/newmulticol/balance4.html [ Crash ] crbug.com/757767 fast/multicol/newmulticol/balance5.html [ Crash ] crbug.com/591099 fast/multicol/newmulticol/balance6.html [ Failure ] -crbug.com/757767 fast/multicol/newmulticol/balance7.html [ Timeout ] -crbug.com/757767 fast/multicol/newmulticol/balance8.html [ Timeout ] -crbug.com/757767 fast/multicol/newmulticol/balance9.html [ Timeout ] +crbug.com/591099 fast/multicol/newmulticol/balance7.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/newmulticol/balance8.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/newmulticol/balance9.html [ Failure Timeout ] crbug.com/591099 fast/multicol/newmulticol/break-before.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/breaks-2-columns-3-no-balancing.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/breaks-2-columns-3.html [ Failure ] -crbug.com/757767 fast/multicol/newmulticol/breaks-3-columns-3.html [ Timeout ] +crbug.com/591099 fast/multicol/newmulticol/breaks-3-columns-3.html [ Failure Timeout ] crbug.com/591099 fast/multicol/newmulticol/clipping-overflow-hidden.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/clipping-top-overflow.html [ Failure ] crbug.com/591099 fast/multicol/newmulticol/clipping.html [ Failure ] @@ -9660,7 +9608,7 @@ crbug.com/591099 fast/multicol/positioned-split.html [ Failure ] crbug.com/757767 fast/multicol/positioned-with-constrained-height.html [ Crash ] crbug.com/757767 fast/multicol/positive-leading.html [ Crash ] -crbug.com/757767 fast/multicol/pushed-line-affected-by-float.html [ Crash Timeout ] +crbug.com/757767 fast/multicol/pushed-line-affected-by-float.html [ Crash ] crbug.com/757767 fast/multicol/regular-block-becomes-multicol.html [ Crash ] crbug.com/757767 fast/multicol/relayout-and-push-float.html [ Timeout ] crbug.com/591099 fast/multicol/relpos-inside-inline-block.html [ Failure ] @@ -9673,14 +9621,14 @@ crbug.com/757767 fast/multicol/scale-transform-text.html [ Crash ] crbug.com/591099 fast/multicol/scrollable-basic.html [ Failure ] crbug.com/591099 fast/multicol/scrolling-column-rules.html [ Failure ] -crbug.com/757767 fast/multicol/scrolling-overflow.html [ Timeout Failure ] +crbug.com/591099 fast/multicol/scrolling-overflow.html [ Failure ] crbug.com/757767 fast/multicol/shadow-breaking.html [ Crash ] crbug.com/591099 fast/multicol/short-columns-insane-unbreakable-content-height-crash.html [ Failure ] crbug.com/591099 fast/multicol/shrink-to-column-height-for-pagination.html [ Failure ] crbug.com/757767 fast/multicol/single-line.html [ Crash ] -crbug.com/757767 fast/multicol/span/abspos-containing-block-outside-spanner.html [ Timeout ] +crbug.com/591099 fast/multicol/span/abspos-containing-block-outside-spanner.html [ Failure Timeout ] crbug.com/591099 fast/multicol/span/adjacent-spanners-with-margin.html [ Failure ] -crbug.com/757767 fast/multicol/span/adjacent-spanners.html [ Timeout ] +crbug.com/591099 fast/multicol/span/adjacent-spanners.html [ Failure Timeout ] crbug.com/757767 fast/multicol/span/after-row-with-uneven-height-nested-multicol.html [ Timeout ] crbug.com/591099 fast/multicol/span/anonymous-before-child-parent-crash.html [ Failure ] crbug.com/591099 fast/multicol/span/anonymous-split-block-crash.html [ Failure ] @@ -9703,19 +9651,19 @@ crbug.com/591099 fast/multicol/span/clone-anonymous-block-non-inline-child-crash.html [ Failure ] crbug.com/757767 fast/multicol/span/empty-anonymous-block-split-crash.html [ Timeout ] crbug.com/591099 fast/multicol/span/empty-block-between-spanners-with-margins.html [ Failure ] -crbug.com/757767 fast/multicol/span/empty-spanner-between-spanners-with-margins.html [ Timeout ] +crbug.com/591099 fast/multicol/span/empty-spanner-between-spanners-with-margins.html [ Failure Timeout ] crbug.com/757767 fast/multicol/span/fill-after-spanner-exact-fit.html [ Crash ] crbug.com/757767 fast/multicol/span/fill-after-spanner-extra-height.html [ Crash ] crbug.com/591099 fast/multicol/span/float.html [ Failure ] crbug.com/757767 fast/multicol/span/foreignObject.html [ Crash ] crbug.com/591099 fast/multicol/span/height-decrease.html [ Failure ] crbug.com/591099 fast/multicol/span/height-increase.html [ Failure ] -crbug.com/757767 fast/multicol/span/in-nested-multicol-with-hard-breaks.html [ Timeout ] -crbug.com/757767 fast/multicol/span/in-nested-multicol-with-list-item.html [ Timeout ] +crbug.com/591099 fast/multicol/span/in-nested-multicol-with-hard-breaks.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/in-nested-multicol-with-list-item.html [ Failure Timeout ] crbug.com/757767 fast/multicol/span/in-nested-multicol-with-soft-breaks-inside.html [ Timeout ] crbug.com/591099 fast/multicol/span/inside-abspos-crash.html [ Failure ] crbug.com/591099 fast/multicol/span/inside-block-with-fixed-height-crash.html [ Failure ] -crbug.com/757767 fast/multicol/span/inside-block-with-fixed-height.html [ Timeout ] +crbug.com/591099 fast/multicol/span/inside-block-with-fixed-height.html [ Failure Timeout ] crbug.com/757767 fast/multicol/span/inside-float-crash.html [ Timeout ] crbug.com/591099 fast/multicol/span/inside-overflow-hidden-crash.html [ Failure ] crbug.com/591099 fast/multicol/span/invalid-span-1.html [ Failure ] @@ -9723,10 +9671,9 @@ crbug.com/591099 fast/multicol/span/invalid-spanner-in-transform.html [ Failure ] crbug.com/591099 fast/multicol/span/margin-on-multicol.html [ Failure ] crbug.com/591099 fast/multicol/span/multicol-with-padding.html [ Failure ] -crbug.com/757767 fast/multicol/span/multicol-with-spanner-becomes-regular-block.html [ Timeout ] crbug.com/757767 fast/multicol/span/nested-multicol.html [ Timeout ] -crbug.com/757767 fast/multicol/span/offset-properties-empty-content.html [ Timeout ] -crbug.com/757767 fast/multicol/span/offset-properties.html [ Timeout ] +crbug.com/591099 fast/multicol/span/offset-properties-empty-content.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/offset-properties.html [ Failure Timeout ] crbug.com/591099 fast/multicol/span/outer-column-break-after-inner-spanner-2.html [ Failure ] crbug.com/591099 fast/multicol/span/outer-column-break-after-inner-spanner-and-float.html [ Failure ] crbug.com/591099 fast/multicol/span/outer-column-break-after-inner-spanner.html [ Failure ] @@ -9737,14 +9684,14 @@ crbug.com/591099 fast/multicol/span/percent-margins.html [ Failure ] crbug.com/591099 fast/multicol/span/preferred-widths-with-column-content.html [ Failure ] crbug.com/591099 fast/multicol/span/preferred-widths.html [ Failure ] -crbug.com/757767 fast/multicol/span/pseudo-after-then-content.html [ Timeout ] +crbug.com/591099 fast/multicol/span/pseudo-after-then-content.html [ Failure Timeout ] crbug.com/591099 fast/multicol/span/pseudo-after.html [ Failure ] -crbug.com/757767 fast/multicol/span/pseudo-before-after-in-content.html [ Timeout ] -crbug.com/757767 fast/multicol/span/pseudo-before-after.html [ Timeout ] -crbug.com/757767 fast/multicol/span/pseudo-before-following-content.html [ Timeout ] +crbug.com/591099 fast/multicol/span/pseudo-before-after-in-content.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/pseudo-before-after.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/pseudo-before-following-content.html [ Failure Timeout ] crbug.com/591099 fast/multicol/span/pseudo-before.html [ Failure ] -crbug.com/757767 fast/multicol/span/relpos-in-block.html [ Timeout ] -crbug.com/757767 fast/multicol/span/relpos-spanner-with-abspos-child.html [ Timeout ] +crbug.com/591099 fast/multicol/span/relpos-in-block.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/relpos-spanner-with-abspos-child.html [ Failure Timeout ] crbug.com/591099 fast/multicol/span/remaining-space-in-last-column.html [ Failure ] crbug.com/591099 fast/multicol/span/simple-margins.html [ Failure ] crbug.com/591099 fast/multicol/span/sole-spanner-inside-div.html [ Failure ] @@ -9753,22 +9700,22 @@ crbug.com/591099 fast/multicol/span/span-between-text.html [ Failure ] crbug.com/591099 fast/multicol/span/spanner-first.html [ Failure ] crbug.com/757767 fast/multicol/span/spanner-img.html [ Crash ] -crbug.com/757767 fast/multicol/span/spanner-in-flexbox-in-multicol-in-flexbox-crash.html [ Timeout ] +crbug.com/591099 fast/multicol/span/spanner-in-flexbox-in-multicol-in-flexbox-crash.html [ Failure Timeout ] crbug.com/757767 fast/multicol/span/spanner-inline-block.html [ Crash ] crbug.com/757767 fast/multicol/span/spanner-last.html [ Crash ] -crbug.com/757767 fast/multicol/span/spanner-with-margin.html [ Timeout ] -crbug.com/757767 fast/multicol/span/spanner-with-margins-between-margins.html [ Timeout ] -crbug.com/757767 fast/multicol/span/spanner-with-relpos-child.html [ Timeout ] +crbug.com/757767 fast/multicol/span/spanner-with-margin.html [ Crash Timeout ] +crbug.com/591099 fast/multicol/span/spanner-with-margins-between-margins.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/spanner-with-relpos-child.html [ Failure Timeout ] crbug.com/591099 fast/multicol/span/summary-split.html [ Failure ] crbug.com/757767 fast/multicol/span/trailing-margin-around-spanner.html [ Crash ] crbug.com/591099 fast/multicol/span/trailing-margin-before-spanner.html [ Failure ] crbug.com/757767 fast/multicol/span/two-rows-then-spanner-then-two-rows.html [ Timeout ] crbug.com/591099 fast/multicol/span/underflow-after-spanner.html [ Failure ] crbug.com/757767 fast/multicol/span/update-after-content-before-child-crash.html [ Timeout ] -crbug.com/757767 fast/multicol/span/vertical-lr.html [ Timeout ] -crbug.com/757767 fast/multicol/span/vertical-rl.html [ Timeout ] -crbug.com/757767 fast/multicol/span/with-border.html [ Timeout ] -crbug.com/757767 fast/multicol/static-child-becomes-fixedpos.html [ Timeout ] +crbug.com/591099 fast/multicol/span/vertical-lr.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/vertical-rl.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/span/with-border.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/static-child-becomes-fixedpos.html [ Failure Timeout ] crbug.com/591099 fast/multicol/table-caption-and-cells-fixed-width.html [ Failure ] crbug.com/591099 fast/multicol/table-caption-and-cells.html [ Failure ] crbug.com/591099 fast/multicol/table-caption-with-block.html [ Failure ] @@ -9782,7 +9729,7 @@ crbug.com/757767 fast/multicol/tall-unbreakable-in-nested-crash.html [ Crash ] crbug.com/757767 fast/multicol/text-shadow-at-column-boundaries.html [ Crash ] crbug.com/591099 fast/multicol/textarea-with-placeholder-as-multicol-crash.html [ Failure ] -crbug.com/757767 fast/multicol/three-inner-rows.html [ Timeout ] +crbug.com/591099 fast/multicol/three-inner-rows.html [ Failure Timeout ] crbug.com/591099 fast/multicol/transform-inside-opacity.html [ Failure ] crbug.com/591099 fast/multicol/transform-with-fixedpos.html [ Failure ] crbug.com/757767 fast/multicol/triply-nested-with-padding-crash.html [ Crash ] @@ -9795,13 +9742,13 @@ crbug.com/591099 fast/multicol/vertical-lr/balancing/balance-short-trailing-empty-block.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/balancing/balance-trailing-border-after-break.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/balancing/balance-trailing-border.html [ Failure ] -crbug.com/757767 fast/multicol/vertical-lr/balancing/balance-unbreakable.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/break-properties.html [ Timeout ] +crbug.com/591099 fast/multicol/vertical-lr/balancing/balance-unbreakable.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/vertical-lr/break-properties.html [ Failure Timeout ] crbug.com/591099 fast/multicol/vertical-lr/caret-range-anonymous-block-rtl.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/caret-range-anonymous-block.html [ Failure ] -crbug.com/757767 fast/multicol/vertical-lr/caret-range-outside-columns-rtl.html [ Failure Crash Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/caret-range-outside-columns.html [ Failure Crash Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/client-rect-after-spanner.html [ Failure Timeout ] +crbug.com/757767 fast/multicol/vertical-lr/caret-range-outside-columns-rtl.html [ Failure Crash ] +crbug.com/757767 fast/multicol/vertical-lr/caret-range-outside-columns.html [ Failure Crash ] +crbug.com/591099 fast/multicol/vertical-lr/client-rect-after-spanner.html [ Failure Timeout ] crbug.com/757767 fast/multicol/vertical-lr/client-rects-crossing-boundaries-nested.html [ Timeout ] crbug.com/591099 fast/multicol/vertical-lr/column-break-with-balancing.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/column-count-with-rules.html [ Failure ] @@ -9809,30 +9756,30 @@ crbug.com/591099 fast/multicol/vertical-lr/composited-relpos-overlapping-will-change.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/float-avoidance.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/float-big-line.html [ Failure ] -crbug.com/757767 fast/multicol/vertical-lr/float-break.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/vertical-lr/float-break.html [ Failure ] crbug.com/757767 fast/multicol/vertical-lr/float-content-break.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/float-edge.html [ Failure Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/float-paginate.html [ Failure Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/float-truncation.html [ Crash Timeout ] +crbug.com/591099 fast/multicol/vertical-lr/float-edge.html [ Failure ] +crbug.com/591099 fast/multicol/vertical-lr/float-paginate.html [ Failure ] +crbug.com/757767 fast/multicol/vertical-lr/float-truncation.html [ Crash ] crbug.com/591099 fast/multicol/vertical-lr/gap-non-negative.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/image-inside-nested-blocks-with-border.html [ Failure ] crbug.com/757767 fast/multicol/vertical-lr/nested-columns.html [ Crash ] crbug.com/757767 fast/multicol/vertical-lr/offset-top-and-left-at-boundaries-nested.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/offset-top-and-left-at-boundaries.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-lr/offset-top-and-left-nested.html [ Timeout ] +crbug.com/591099 fast/multicol/vertical-lr/offset-top-and-left-at-boundaries.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/vertical-lr/offset-top-and-left-nested.html [ Failure Timeout ] crbug.com/591099 fast/multicol/vertical-lr/rules-with-border-before.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/unsplittable-inline-block.html [ Failure ] crbug.com/757767 fast/multicol/vertical-rl/abspos-auto-position-on-line.html [ Crash ] crbug.com/591099 fast/multicol/vertical-rl/balancing/balance-short-trailing-empty-block.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/balancing/balance-trailing-border-after-break.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/balancing/balance-trailing-border.html [ Failure ] -crbug.com/757767 fast/multicol/vertical-rl/balancing/balance-unbreakable.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-rl/break-properties.html [ Timeout ] +crbug.com/591099 fast/multicol/vertical-rl/balancing/balance-unbreakable.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/vertical-rl/break-properties.html [ Failure Timeout ] crbug.com/591099 fast/multicol/vertical-rl/caret-range-anonymous-block-rtl.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/caret-range-anonymous-block.html [ Failure ] crbug.com/757767 fast/multicol/vertical-rl/caret-range-outside-columns-rtl.html [ Crash ] crbug.com/757767 fast/multicol/vertical-rl/caret-range-outside-columns.html [ Crash ] -crbug.com/757767 fast/multicol/vertical-rl/client-rect-after-spanner.html [ Timeout ] +crbug.com/591099 fast/multicol/vertical-rl/client-rect-after-spanner.html [ Failure Timeout ] crbug.com/757767 fast/multicol/vertical-rl/client-rects-crossing-boundaries-nested.html [ Timeout ] crbug.com/591099 fast/multicol/vertical-rl/column-break-with-balancing.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/column-count-with-rules.html [ Failure ] @@ -9840,17 +9787,17 @@ crbug.com/591099 fast/multicol/vertical-rl/composited-relpos-overlapping-will-change.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/float-avoidance.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/float-big-line.html [ Failure ] -crbug.com/757767 fast/multicol/vertical-rl/float-break.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/vertical-rl/float-break.html [ Failure ] crbug.com/757767 fast/multicol/vertical-rl/float-content-break.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-rl/float-edge.html [ Failure Timeout ] -crbug.com/757767 fast/multicol/vertical-rl/float-paginate.html [ Failure Timeout ] -crbug.com/757767 fast/multicol/vertical-rl/float-truncation.html [ Crash Timeout ] +crbug.com/591099 fast/multicol/vertical-rl/float-edge.html [ Failure ] +crbug.com/591099 fast/multicol/vertical-rl/float-paginate.html [ Failure ] +crbug.com/757767 fast/multicol/vertical-rl/float-truncation.html [ Crash ] crbug.com/591099 fast/multicol/vertical-rl/gap-non-negative.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/image-inside-nested-blocks-with-border.html [ Failure ] crbug.com/757767 fast/multicol/vertical-rl/nested-columns.html [ Crash ] crbug.com/757767 fast/multicol/vertical-rl/offset-top-and-left-at-boundaries-nested.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-rl/offset-top-and-left-at-boundaries.html [ Timeout ] -crbug.com/757767 fast/multicol/vertical-rl/offset-top-and-left-nested.html [ Timeout ] +crbug.com/591099 fast/multicol/vertical-rl/offset-top-and-left-at-boundaries.html [ Failure Timeout ] +crbug.com/591099 fast/multicol/vertical-rl/offset-top-and-left-nested.html [ Failure Timeout ] crbug.com/591099 fast/multicol/vertical-rl/rules-with-border-before.html [ Failure ] crbug.com/591099 fast/multicol/vertical-rl/unsplittable-inline-block.html [ Failure ] crbug.com/757767 fast/multicol/very-tall-block-crash.html [ Timeout Failure ] @@ -9930,7 +9877,7 @@ crbug.com/591099 fast/pagination/div-y-vertical-rl-rtl.html [ Crash Failure ] crbug.com/591099 fast/pagination/first-letter-inherit-all-crash.html [ Crash Failure ] crbug.com/591099 fast/pagination/modal-dialog-crash.html [ Crash Failure ] -crbug.com/757767 fast/pagination/multicol.html [ Timeout ] +crbug.com/591099 fast/pagination/multicol.html [ Failure Timeout ] crbug.com/591099 fast/pagination/paged-x-column-gap.html [ Failure ] crbug.com/591099 fast/pagination/short-pages-tall-content.html [ Crash Failure ] crbug.com/591099 fast/pagination/very-tall-auto-height-crash.html [ Crash Failure ] @@ -10049,7 +9996,6 @@ crbug.com/591099 fast/performance/performance-mark-exceptions.html [ Failure ] crbug.com/591099 fast/performance/performance-measure-exceptions.html [ Failure ] crbug.com/591099 fast/performance/performance-observer.html [ Failure ] -crbug.com/591099 fast/preloader/iframe-srcdoc.html [ Failure Pass ] crbug.com/591099 fast/reflections/abs-position-in-reflection.html [ Failure ] crbug.com/591099 fast/reflections/inline-crash.html [ Failure ] crbug.com/591099 fast/reflections/opacity-reflection-transform.html [ Failure ] @@ -10476,7 +10422,6 @@ crbug.com/591099 fast/table/border-collapsing/dynamic-border-width-change.html [ Failure ] crbug.com/591099 fast/table/border-recalc.html [ Failure ] crbug.com/591099 fast/table/canvas-column-in-column-group.html [ Failure ] -crbug.com/591099 fast/table/caption-encloses-overhanging-float.html [ Failure Pass ] crbug.com/591099 fast/table/caption-in-inline.html [ Failure ] crbug.com/591099 fast/table/caption-orthogonal-writing-mode-sizing.html [ Failure ] crbug.com/591099 fast/table/cell-height-min-intrinsic.html [ Failure ] @@ -10689,10 +10634,8 @@ crbug.com/591099 fast/text/atsui-spacing-features.html [ Failure ] crbug.com/591099 fast/text/basic/002.html [ Failure ] crbug.com/591099 fast/text/basic/004.html [ Failure ] -crbug.com/591099 fast/text/basic/014.html [ Failure Pass ] crbug.com/591099 fast/text/basic/015.html [ Failure ] crbug.com/591099 fast/text/bidi-explicit-embedding-past-end.html [ Failure Pass ] -crbug.com/591099 fast/text/bidi-isolate-embedding-crash.html [ Failure Pass ] crbug.com/591099 fast/text/bidi-isolate-nextlinebreak-failure.html [ Failure Pass ] crbug.com/591099 fast/text/bidi-reverse-runs-crash.html [ Failure ] crbug.com/591099 fast/text/break-word-pre-wrap.html [ Failure ] @@ -10700,7 +10643,7 @@ crbug.com/591099 fast/text/chromium-linux-fallback-crash.html [ Failure ] crbug.com/591099 fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ] crbug.com/591099 fast/text/chromium-mac-duplicate-ime-composition.html [ Failure ] -crbug.com/591099 fast/text/color-emoji.html [ Failure ] +crbug.com/591099 fast/text/color-emoji.html [ Failure Pass ] crbug.com/591099 fast/text/combining-character-sequence-fallback-crash.html [ Failure ] crbug.com/591099 fast/text/complex-text-opacity.html [ Failure ] crbug.com/591099 fast/text/computed-line-height-and-font-size-with-font-size-adjust.html [ Failure ] @@ -10752,14 +10695,13 @@ crbug.com/591099 fast/text/glyph-overflow.html [ Failure ] crbug.com/591099 fast/text/glyph-reordering.html [ Failure ] crbug.com/591099 fast/text/hide-atomic-inlines-after-ellipsis.html [ Crash Failure ] -crbug.com/591099 fast/text/hyphens/hyphens-none.html [ Failure ] +crbug.com/591099 fast/text/hyphens/hyphens-none.html [ Failure Pass ] crbug.com/591099 fast/text/international/arabic-justify.html [ Failure ] crbug.com/591099 fast/text/international/bidi-AN-after-empty-run.html [ Failure ] crbug.com/591099 fast/text/international/bidi-LDB-2-CSS.html [ Failure ] crbug.com/591099 fast/text/international/bidi-LDB-2-HTML.html [ Failure ] crbug.com/591099 fast/text/international/bidi-LDB-2-formatting-characters.html [ Failure ] crbug.com/591099 fast/text/international/bidi-ignored-for-first-child-inline.html [ Failure ] -crbug.com/591099 fast/text/international/bidi-innertext.html [ Failure Pass ] crbug.com/591099 fast/text/international/bidi-linebreak-001.html [ Failure ] crbug.com/591099 fast/text/international/bidi-linebreak-002.html [ Failure ] crbug.com/591099 fast/text/international/bidi-linebreak-003.html [ Failure ] @@ -10839,7 +10781,6 @@ crbug.com/591099 fast/text/shaping/same-script-different-lang.html [ Failure ] crbug.com/591099 fast/text/shaping/shaping-width-initialized.html [ Failure ] crbug.com/591099 fast/text/soft-hyphen-overflow.html [ Failure ] -crbug.com/591099 fast/text/stale-TextLayout-from-first-line.html [ Failure Pass ] crbug.com/591099 fast/text/sub-pixel/text-scaling-pixel.html [ Failure Timeout ] crbug.com/591099 fast/text/tab-min-size.html [ Failure ] crbug.com/591099 fast/text/text-between-two-brs-in-nowrap-overflow.html [ Failure ] @@ -10852,7 +10793,6 @@ crbug.com/591099 fast/text/trailing-white-space-2.html [ Failure ] crbug.com/591099 fast/text/trailing-white-space.html [ Failure ] crbug.com/591099 fast/text/vertical-rl-rtl-linebreak.html [ Failure ] -crbug.com/591099 fast/text/wbr-in-pre-crash.html [ Failure Pass ] crbug.com/591099 fast/text/whitespace/018.html [ Failure ] crbug.com/591099 fast/text/whitespace/024.html [ Failure ] crbug.com/591099 fast/text/whitespace/028.html [ Failure ] @@ -11153,10 +11093,9 @@ crbug.com/591099 fragmentation/content-preceding-first-fragmentainer.html [ Failure ] crbug.com/591099 fragmentation/first-child-large-top-margin.html [ Failure ] crbug.com/591099 fragmentation/float-after-forced-break.html [ Failure ] -crbug.com/757767 fragmentation/float-margin-top.html [ Pass Timeout ] -crbug.com/757767 fragmentation/float-pushed-to-next-fragmentainer-by-floats.html [ Timeout Failure ] +crbug.com/591099 fragmentation/float-pushed-to-next-fragmentainer-by-floats.html [ Failure ] crbug.com/591099 fragmentation/forced-break-clearance-unsplittable-content.html [ Failure ] -crbug.com/757767 fragmentation/forced-break-inside-float.html [ Timeout Failure ] +crbug.com/591099 fragmentation/forced-break-inside-float.html [ Failure ] crbug.com/591099 fragmentation/fragmented-rowspan-alignment.html [ Failure ] crbug.com/591099 fragmentation/fragmented-rowspan.html [ Failure ] crbug.com/591099 fragmentation/fragmented-table-cell.html [ Failure ] @@ -11169,10 +11108,10 @@ crbug.com/591099 fragmentation/overflow-crossing-boundary.html [ Failure ] crbug.com/591099 fragmentation/overhanging-float-change-fragmentainer-height.html [ Failure ] crbug.com/591099 fragmentation/relayout-abspos.html [ Failure ] -crbug.com/757767 fragmentation/remove-unbreakable-block-in-line-float.html [ Crash Timeout ] +crbug.com/757767 fragmentation/remove-unbreakable-block-in-line-float.html [ Crash ] crbug.com/591099 fragmentation/repeating-thead-exceeds-page-size.html [ Failure ] crbug.com/591099 fragmentation/repeating-thead-multiple-tables-page-border.html [ Failure ] -crbug.com/757767 fragmentation/repeating-thead-multiple-tables.html [ Timeout ] +crbug.com/591099 fragmentation/repeating-thead-multiple-tables.html [ Failure Timeout ] crbug.com/591099 fragmentation/repeating-thead-no-room-for-content-row-on-first-page.html [ Failure ] crbug.com/591099 fragmentation/single-cell-repeating-thead-break-inside-avoid-content.html [ Failure ] crbug.com/591099 fragmentation/single-cell-repeating-thead-break-inside-content-first-line.html [ Failure ] @@ -11182,7 +11121,7 @@ crbug.com/591099 fragmentation/single-large-cell-with-header.html [ Failure ] crbug.com/591099 fragmentation/single-line-cells-in-multiple-table-sections.html [ Failure ] crbug.com/591099 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2.html [ Failure ] -crbug.com/757767 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html [ Timeout ] +crbug.com/591099 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html [ Failure Timeout ] crbug.com/591099 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4.html [ Failure ] crbug.com/591099 fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html [ Failure ] crbug.com/591099 fragmentation/single-line-cells-nested-repeating-thead-2.html [ Failure ] @@ -11293,18 +11232,14 @@ crbug.com/591099 geolocation-api/watchPosition-page-visibility.html [ Failure ] crbug.com/591099 geolocation-api/watchPosition-unique.html [ Failure ] crbug.com/591099 geolocation-api/window-close-crash.html [ Failure ] +crbug.com/591099 hdr/color-jpeg-with-color-profile.html [ Failure Pass ] +crbug.com/591099 hdr/video-canvas-alpha.html [ Failure Pass ] crbug.com/591099 hittesting/border-hittest-inlineFlowBox.html [ Failure ] -crbug.com/591099 hittesting/border-hittest-with-image-fallback.html [ Crash Failure Pass ] -crbug.com/591099 hittesting/border-hittest.html [ Failure Pass ] -crbug.com/591099 hittesting/border-radius-hittest.html [ Failure Pass ] crbug.com/591099 hittesting/culled-inline-crash.html [ Failure ] -crbug.com/591099 hittesting/culled-inline.html [ Failure Pass ] crbug.com/591099 hittesting/hittest-child-of-inlineblock.html [ Crash Failure ] crbug.com/591099 hittesting/image-with-border-radius.html [ Failure ] -crbug.com/591099 hittesting/image-with-clip-path.html [ Failure Pass ] crbug.com/591099 hittesting/inline-with-clip-path.html [ Failure ] crbug.com/591099 hittesting/inner-border-radius-hittest.html [ Failure ] -crbug.com/591099 hittesting/paint-containment-hittest.html [ Failure Pass ] crbug.com/591099 hittesting/text-overflow-inline-image.html [ Timeout ] crbug.com/591099 html/details_summary/details-add-child-1.html [ Crash Failure ] crbug.com/591099 html/details_summary/details-add-child-2.html [ Crash Failure ] @@ -11335,7 +11270,6 @@ crbug.com/591099 html/details_summary/details-clone.html [ Crash Failure ] crbug.com/591099 html/details_summary/details-keyboard-show-hide.html [ Crash Failure ] crbug.com/591099 html/details_summary/details-marker-style.html [ Crash Failure ] -crbug.com/591099 html/details_summary/details-mouse-click.html [ Crash Failure Pass ] crbug.com/591099 html/details_summary/details-nested-1.html [ Crash Failure ] crbug.com/591099 html/details_summary/details-nested-2.html [ Crash Failure ] crbug.com/591099 html/details_summary/details-no-summary1.html [ Crash Failure ] @@ -11524,7 +11458,6 @@ crbug.com/591099 http/tests/cache/subresource-fragment-identifier.html [ Crash Failure ] crbug.com/591099 http/tests/cache/subresource-multiple-instances.html [ Crash Failure ] crbug.com/591099 http/tests/cache/subresource-revalidation-referrer.html [ Failure ] -crbug.com/591099 http/tests/cache/x-frame-options-304.html [ Failure Pass ] crbug.com/591099 http/tests/cache/xhr-body.html [ Crash Failure ] crbug.com/591099 http/tests/cache/xhr-vary-header.html [ Crash Failure ] crbug.com/591099 http/tests/cache/zero-length-xhr.html [ Failure ] @@ -11556,84 +11489,54 @@ crbug.com/591099 http/tests/devtools/console/alert-toString-exception.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/command-line-api-getEventListeners.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-Object-overwritten.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-api-on-call-frame.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/console/console-clear-function.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-command-copy.js [ Failure Pass ] +crbug.com/591099 http/tests/devtools/console/console-api-on-call-frame.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/devtools/console/console-context-selector.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-copy-treeoutline.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-copy-truncated-text.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-dir.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-error-on-call-frame.js [ Crash Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-eval-blocked.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-eval-exception-report.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-eval-fake.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-eval-global.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-eval-object-literal.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-eval-scoped.js [ Crash Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-eval-syntax-error.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-eval-throw.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-eval-undefined-override.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-eval.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-export.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-filter-level-test.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-filter-test.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-focus.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-format-broken-unicode.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-format-collections.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-format-perfomance.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-format-style-whitelist.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-format-table.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-format.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-functions.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-history-contains-requested-text.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-last-result.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-link-to-snippet.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-linkify-message-location.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-log-before-inspector-open.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-log-custom-elements.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-log-document-proto.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-log-eval-syntax-error.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-log-in-xhtml.xhtml [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-log-linkify-links.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-log-linkify-stack-in-errors.html [ Failure Timeout ] -crbug.com/591099 http/tests/devtools/console/console-log-object-with-getter.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-log-short-hand-method.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-log-syntax-error.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-log-toString-object.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/console/console-log-without-console.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-log-wrapped-in-framework.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-memory-equals-console-memory.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-message-contains-async-stack.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-message-format.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-message-from-inline-with-url.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-native-function.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-nested-group.js [ Failure Pass Timeout ] crbug.com/591099 http/tests/devtools/console/console-object-constructor-name.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-object-preview.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-on-paint-worklet.html [ Failure Timeout ] crbug.com/591099 http/tests/devtools/console/console-originating-command.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-preserve-log.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-proxy.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-repeat-count.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-retain-autocomplete-on-typing.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-revoke-error-in-worker.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-revoke-error.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/console-save-to-temp-var.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-search-reveals-messages.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-search.js [ Crash Failure Pass Timeout ] crbug.com/591099 http/tests/devtools/console/console-smart-enter.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-stack-overflow.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-string-format.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-substituted.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-table.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-tainted-globals.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-tests.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-time.js [ Failure Pass ] +crbug.com/591099 http/tests/devtools/console/console-tainted-globals.html [ Failure Timeout ] crbug.com/591099 http/tests/devtools/console/console-timestamp.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/console/console-trace-arguments.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-trace-in-eval.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/console/console-trace.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/console/console-trim-long-urls.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-uncaught-exception-in-eval.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-uncaught-exception.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-uncaught-promise-in-worker.html [ Failure ] @@ -11642,23 +11545,546 @@ crbug.com/591099 http/tests/devtools/console/console-viewport-selection.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-viewport-stick-to-bottom.html [ Failure ] crbug.com/591099 http/tests/devtools/console/console-worker-nested-imports-syntax-error.html [ Failure ] -crbug.com/591099 http/tests/devtools/console/console-xml-document.js [ Crash Failure Pass ] crbug.com/591099 http/tests/devtools/console/console-xpath.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/exception-objects.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/console/function-name-in-console-message-stack.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/console/inspect-html-all-collection.html [ Failure ] crbug.com/591099 http/tests/devtools/console/paintworklet-console-selector.html [ Failure ] crbug.com/591099 http/tests/devtools/console/shadow-element.html [ Crash Failure ] crbug.com/591099 http/tests/devtools/console/worker-eval-contains-stack.html [ Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-styles.js [ Crash Failure Pass Timeout ] -crbug.com/591099 http/tests/devtools/network/async-xhr-json-mime-type.js [ Crash Failure Pass Timeout ] -crbug.com/591099 http/tests/devtools/network/cached-resource-destroyed-moved-to-storage.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/network/cached-resource-destroyed-too-big-discarded.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/network/download.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-await/async-callstack-async-await1.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-await/async-callstack-async-await2.js [ Failure Pass ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-await/async-callstack-async-await3.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-await/async-pause-on-exception.js [ Crash Failure Pass ] +crbug.com/591099 http/tests/devtools/editor/php-highlighter.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-auto-whitespace-removing.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-block-indent.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-char-to-coordinates.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-formatter.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-home-button.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-line-breaks.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-search-replace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-smart-braces.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-token-at-position.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/accessibility/autocomplete-attribute.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/accessibility/edit-aria-attributes.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/attribute-modified-ns.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/bidi-dom-tree.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/breadcrumb-updates.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/dom-agent-query-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/dom-search-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/delete-from-document.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-1.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-3.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-4.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-style-attribute.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/insert-node-collapsed.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/perform-undo-undo.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/remove-node.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/set-attribute-non-html.svg [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-attribute.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-body.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-dom-edits-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-dom-edits.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-set-outer-html-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-set-outer-html.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-css-path.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-delete-inline-style.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-img-tooltip.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-correct-case.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-limited-children.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-reload-assert.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-rewrite-href.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-search.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-selection-after-delete.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-selection-on-refresh.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-structure.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-tab-stops.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-treeoutline-copy.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-custom-framework.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-jquery1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-jquery2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-remove.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listeners-about-blank.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/expand-recursively.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/hide-shortcut.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-grid.html [ Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-dom-updates.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node-scroll.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-svg-root.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/iframe-load-event.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/inline-style-title.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/insert-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/inspect-mode-after-profiling.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/inspect-mode-shadow-text.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/inspect-pointer-events-none.html [ Crash Timeout ] +crbug.com/591099 http/tests/devtools/elements/modify-chardata.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/move-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/node-reselect-on-append-child.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/node-xpath.xhtml [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/resolve-alien-node.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/resolve-node-blocked.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/reveal-whitespace-text-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/selected-element-changes-execution-context.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/create-shadow-root.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/shadow-distribution.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/shadow-root.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/update-shadowdom.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/color-swatch.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/commit-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/css-live-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/css-outline.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/dynamic-style-tag.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-media-text.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-inside-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/empty-background-url.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/filter-matched-styles.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/add-import-rule.html [ Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/cssom-shorthand-important.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/force-pseudo-state.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/inactive-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/inject-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/keyframes-rules.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/lazy-computed-style.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/media-emulation.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/media-queries.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/media-using-same-url.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-comments.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-utf8-bom.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/paste-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/property-ui-location.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/pseudo-elements.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-2/region-style-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/selector-list.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/selector-source-data.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/shadow-dom-rules.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/simple-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/spectrum.html [ Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/style-autocomplete.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-blank-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-invalid-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-cancel-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-commit-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-computed-trace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-inherited.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-change.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-delete.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-variables.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/inline-style-sourcemap.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/keyframes-source-offsets.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-formatting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-history.html [ Crash ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-iframe.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-invalid-color-values.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-keyframes.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-live-locations-leak.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-new-API.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-overriden-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-properties-overload.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines-inline.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-offsets.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-1.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-3.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-4.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-url-linkify.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/svg-style.xhtml [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-new-rule.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-rule-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/cancel-upon-invalid-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/original-content-provider.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-after-cancelled-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-change-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-property-toggle.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-set-selector-text.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles/up-down-numerics-and-colors.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/updates-during-dom-traversal.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/updates-throttled.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/url-color-swatch.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/url-multiple-collapsing.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/user-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/agents-disabled-check.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-agent-crash-on-start.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-bottom-up-large-tree-search.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-bottom-up-times.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-calculate-time.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-flame-chart-overview.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-native-nodes-filter.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-profile-removal.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-profiling.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-save-load.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-stopped-removed-race.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-profiler-profiling.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-dom-groups-change.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-expansion-preserved-when-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-show-all.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-show-next.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-shown-node-count-preserved-when-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-expansion-preserved-when-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-show-all.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-show-next.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-shown-node-count-preserved-when-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-inspect-dom-wrapper.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-loader.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-statistics.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-expand-collapse.html [ Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-expansion-preserved-when-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-search-by-id.html [ Crash Timeout ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-search.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-show-all.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-show-next.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-show-ranges.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-shown-node-count-preserved-when-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-sorting-fields.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-sorting-instances.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/profiler/heap-snapshot.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-css.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-general.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-scss.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/bezier-swatch-position.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/color-swatch-position.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/compile-javascript.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/css-inline-sourcemap.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/css-outline-dialog.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-change-variable.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-in.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/step-through-event-listeners.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/async-call-stack-url.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/copy-stack-trace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-inline-values.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/execution-context-sorted.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-details.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-generator-details.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/inline-scope-variables.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/last-execution-context.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/monitor-console-command.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/reveal-execution-line.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-search.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-snippet-model.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-panel.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/show-function-definition.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/show-generator-location.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-frame-count.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-frame.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-url-comment.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/switch-file.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/ui-source-code.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/properties-special.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/script-collected.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/formatter-css.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/formatter-js.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/inspect-function.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/javascript-outline-dialog.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-2.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-4.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-5.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-6.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-css-1.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-css-2.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-css-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-html-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-html-2.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-html-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-1.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-4.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-5.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-6.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-7.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-8.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-9.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-classes.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-template-literals.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/sass-highlighter.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/search-config.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/snippet-storage.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/source-code-diff.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/sources-panel-extension-names.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/sources-panel-focus-editor-on-select.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/anonymous-image-object.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/buffer-usage.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/category-filter.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/console-timeline.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/decode-resize.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/tracing/frame-model.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/hit-test.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/scroll-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/compile-script.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-gc-event.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-microtasks.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-open-function-call.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-runtime-stats.html [ Crash Failure Pass ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-script-id.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-script-tag-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-script-tag-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-layout/timeline-layout-reason.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-layout/timeline-layout-with-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-layout/timeline-layout.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-animation-frame.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-bound-function.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-event-causes.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-event-details.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-event-dispatch.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-filtering.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-flame-chart-automatically-size-window.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-grouped-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-load-event.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-mark-timeline.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-model.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-node-reference.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-parse-html.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-range-stats.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-record-reload.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-search.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-tree-search.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-trivial.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-window-filter.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-network/timeline-network-resource-details.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-network/timeline-network-resource.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/paint-profiler-update.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-and-multiple-style-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-image.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations-on-deleted-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-paint/update-layer-tree.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-style/parse-author-style-sheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-style-recalc-all-invalidator-types.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidator-invalidations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-time-stamp.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-time.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-timer-fired-from-eval-call-site.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-timer.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-usertiming.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/tracing-timeline-load.html [ Failure ] +crbug.com/591099 http/tests/devtools/tracing/worker-events.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/tracing/worker-js-frames.html [ Crash Failure ] crbug.com/591099 http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Failure ] crbug.com/591099 http/tests/dom/create-contextual-fragment-from-svg-document-range.html [ Crash Failure ] crbug.com/591099 http/tests/dom/location-stringify.html [ Crash Failure ] @@ -11705,8 +12131,8 @@ crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-disabled.php [ Crash Timeout ] crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-enabledforall.php [ Timeout ] crbug.com/591099 http/tests/feature-policy-experimental-features/vibrate-enabledforself.php [ Crash Timeout ] -crbug.com/591099 http/tests/feature-policy/payment-disabled.php [ Crash Failure ] -crbug.com/591099 http/tests/feature-policy/payment-enabledforall.php [ Crash Failure ] +crbug.com/591099 http/tests/feature-policy/payment-disabled.php [ Crash Failure Pass ] +crbug.com/591099 http/tests/feature-policy/payment-enabledforall.php [ Crash Failure Pass ] crbug.com/591099 http/tests/fetch/window/pageimportancesignals.html [ Failure ] crbug.com/591099 http/tests/fileapi/blob-url-in-subframe.html [ Failure ] crbug.com/591099 http/tests/fileapi/create-blob-url-from-data-url.html [ Failure ] @@ -11808,7 +12234,7 @@ crbug.com/591099 http/tests/inspector/cache-storage/cache-deletion.html [ Failure Timeout ] crbug.com/591099 http/tests/inspector/cache-storage/cache-entry-deletion.html [ Failure Timeout ] crbug.com/591099 http/tests/inspector/cache-storage/cache-live-update-cache-content.html [ Failure ] -crbug.com/591099 http/tests/inspector/cache-storage/cache-live-update-list.html [ Failure ] +crbug.com/591099 http/tests/inspector/cache-storage/cache-live-update-list.html [ Failure Timeout ] crbug.com/591099 http/tests/inspector/cache-storage/cache-names.html [ Failure Timeout ] crbug.com/591099 http/tests/inspector/command-line-api-inspect.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/compiler-script-mapping.html [ Crash Failure ] @@ -11834,7 +12260,7 @@ crbug.com/591099 http/tests/inspector/elements/styles/selector-line-sourcemap-header.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/styles/selector-line.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/styles/styles-do-not-add-inline-stylesheets-in-navigator.html [ Failure Timeout ] -crbug.com/591099 http/tests/inspector/elements/styles/styles-redirected-css.html [ Crash Failure ] +crbug.com/591099 http/tests/inspector/elements/styles/styles-redirected-css.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/styles/stylesheet-tracking.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/elements/styles/xsl-transformed.xml [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/extensions-headers.html [ Crash Failure ] @@ -11847,7 +12273,7 @@ crbug.com/591099 http/tests/inspector/extensions/extensions-audits-content-script.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/extensions/extensions-audits.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/extensions/extensions-eval-content-script.html [ Failure ] -crbug.com/591099 http/tests/inspector/extensions/extensions-eval.html [ Crash Failure ] +crbug.com/591099 http/tests/inspector/extensions/extensions-eval.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/extensions/extensions-events.html [ Crash Failure Timeout ] crbug.com/591099 http/tests/inspector/extensions/extensions-network.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/extensions/extensions-panel.html [ Crash Failure Timeout ] @@ -12024,7 +12450,6 @@ crbug.com/591099 http/tests/inspector/sources/debugger/worker-debugging-script-mapping.html [ Failure ] crbug.com/591099 http/tests/inspector/sources/debugger/worker-debugging.html [ Failure ] crbug.com/591099 http/tests/inspector/sources/event-listener-breakpoints-script-fst-stmt-for-module.html [ Failure Timeout ] -crbug.com/591099 http/tests/inspector/sources/inline-module-export-error.html [ Crash Failure ] crbug.com/591099 http/tests/inspector/sources/js-sourcemaps-toggle-enabled.html [ Failure ] crbug.com/591099 http/tests/inspector/sources/navigator-view-content-scripts.html [ Failure ] crbug.com/591099 http/tests/inspector/sources/ui-source-code-highlight.php [ Failure ] @@ -12051,7 +12476,6 @@ crbug.com/591099 http/tests/loading/preload-css-test.html [ Failure ] crbug.com/591099 http/tests/loading/preload-img-test.html [ Crash Failure ] crbug.com/591099 http/tests/loading/preload-picture-invalid.html [ Crash Failure ] -crbug.com/591099 http/tests/loading/preload-video-poster.html [ Failure Pass ] crbug.com/591099 http/tests/loading/redirect-methods.html [ Failure ] crbug.com/591099 http/tests/loading/simple-subframe.html [ Failure ] crbug.com/591099 http/tests/loading/text-content-type-with-binary-extension.html [ Failure ] @@ -12211,7 +12635,6 @@ crbug.com/591099 http/tests/navigatorcontentutils/unregister-protocol-handler.html [ Failure ] crbug.com/591099 http/tests/notifications/notification-sandbox-permission.html [ Failure ] crbug.com/591099 http/tests/permissionclient/image-permissions.html [ Failure ] -crbug.com/591099 http/tests/plugins/navigator-plugins-in-cross-origin-frame.html [ Failure Pass ] crbug.com/591099 http/tests/pointer-lock/iframe-sandboxed-allow-pointer-lock.html [ Failure ] crbug.com/591099 http/tests/pointer-lock/iframe-sandboxed-nested-allow-pointer-lock.html [ Failure ] crbug.com/591099 http/tests/pointer-lock/iframe-sandboxed-nested-disallow-then-allow-pointer-lock.html [ Failure ] @@ -12249,10 +12672,8 @@ crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-affects-cross-site-child-disallowed.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-invalid.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-mismatched-data.html [ Failure Pass ] -crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-mismatched-url.html [ Failure Pass ] crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-notype-data.html [ Failure Pass ] crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-notype-url.html [ Failure Pass ] -crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-nourl-allowed.html [ Failure Pass ] crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-url-01.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/1.1/plugintypes-url-02.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/cached-frame-csp.html [ Crash Failure ] @@ -12264,18 +12685,15 @@ crbug.com/591099 http/tests/security/contentSecurityPolicy/directive-parsing-multiple-headers.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/frame-src-cross-origin-load.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/frame-src-vs-shift-click.html [ Timeout ] -crbug.com/591099 http/tests/security/contentSecurityPolicy/image-document-default-src-none.html [ Failure Pass ] crbug.com/591099 http/tests/security/contentSecurityPolicy/multiple-report-policies.php [ Crash Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/no-policy.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/nonces/scriptnonce-blocked.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/nonces/scriptnonce-invalidnonce.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/object-src-does-not-affect-child.html [ Failure ] -crbug.com/591099 http/tests/security/contentSecurityPolicy/object-src-no-url-allowed.html [ Failure Pass ] crbug.com/591099 http/tests/security/contentSecurityPolicy/object-src-param-code-blocked.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/object-src-param-movie-blocked.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/object-src-param-src-blocked.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/object-src-param-url-blocked.html [ Failure ] -crbug.com/591099 http/tests/security/contentSecurityPolicy/object-src-url-allowed.html [ Failure Pass ] crbug.com/591099 http/tests/security/contentSecurityPolicy/plugin-in-iframe-with-csp.html [ Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/register-bypassing-scheme-partial.html [ Crash Failure ] crbug.com/591099 http/tests/security/contentSecurityPolicy/report-multiple-violations-01.php [ Crash Failure ] @@ -12520,9 +12938,6 @@ crbug.com/591099 http/tests/security/video-poster-cross-origin-crash2.html [ Crash Failure ] crbug.com/591099 http/tests/security/webgl-cross-origin-ImageBitmap-blocked.html [ Failure ] crbug.com/591099 http/tests/security/window-onerror-exception-in-iframe.html [ Failure ] -crbug.com/591099 http/tests/security/window-properties-clear-domain.html [ Failure Pass ] -crbug.com/591099 http/tests/security/window-properties-clear-port.html [ Failure Pass ] -crbug.com/591099 http/tests/security/window-properties-pass.html [ Failure Pass ] crbug.com/591099 http/tests/security/xss-DENIED-iframe-src-alias.html [ Failure ] crbug.com/591099 http/tests/security/xss-DENIED-javascript-variations.html [ Failure ] crbug.com/591099 http/tests/security/xss-DENIED-object-element.html [ Failure ] @@ -13048,7 +13463,7 @@ crbug.com/757767 ietestcenter/css3/multicolumn/column-block-formatting-context-001.htm [ Crash ] crbug.com/757767 ietestcenter/css3/multicolumn/column-containing-block-001.htm [ Crash ] crbug.com/757767 ietestcenter/css3/multicolumn/column-containing-block-002.htm [ Crash ] -crbug.com/757767 ietestcenter/css3/multicolumn/column-containing-block-003.htm [ Crash Timeout ] +crbug.com/757767 ietestcenter/css3/multicolumn/column-containing-block-003.htm [ Crash ] crbug.com/757767 ietestcenter/css3/multicolumn/column-width-applies-to-009.htm [ Crash ] crbug.com/757767 ietestcenter/css3/multicolumn/column-width-applies-to-012.htm [ Crash ] crbug.com/591099 ietestcenter/css3/multicolumn/column-width-negative-001.htm [ Failure ] @@ -13069,7 +13484,7 @@ crbug.com/591099 images/color-profile-border-radius.html [ Failure ] crbug.com/591099 images/color-profile-drag-image.html [ Failure ] crbug.com/591099 images/color-profile-filter.html [ Failure ] -crbug.com/591099 images/color-profile-group.html [ Failure ] +crbug.com/591099 images/color-profile-group.html [ Crash Failure ] crbug.com/591099 images/color-profile-iframe.html [ Failure ] crbug.com/591099 images/color-profile-image-filter-all.html [ Failure ] crbug.com/591099 images/color-profile-image-object-fit.html [ Failure ] @@ -13151,7 +13566,7 @@ crbug.com/591099 images/rendering-broken-10px-images.html [ Crash Failure ] crbug.com/591099 images/rendering-broken-16px-images.html [ Crash Failure ] crbug.com/591099 images/rendering-broken-1px-images.html [ Crash Failure ] -crbug.com/757767 images/rendering-broken-block-flow-images.html [ Timeout ] +crbug.com/591099 images/rendering-broken-block-flow-images.html [ Failure Timeout ] crbug.com/591099 images/rendering-broken-images-empty-alt.html [ Crash Failure ] crbug.com/591099 images/rendering-broken-images.html [ Crash Failure ] crbug.com/591099 images/script-counter-imageDimensionChanged-crash.html [ Failure ] @@ -13176,7 +13591,6 @@ crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-labelledby.js [ Crash Failure Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-visiblity.js [ Crash Failure Timeout ] crbug.com/591099 inspector-protocol/css/css-add-rule.js [ Timeout ] -crbug.com/591099 inspector-protocol/css/css-get-platform-fonts.js [ Failure Pass ] crbug.com/591099 inspector-protocol/css/css-set-style-text.js [ Timeout ] crbug.com/591099 inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot.js [ Crash Failure Timeout ] crbug.com/591099 inspector-protocol/emulation/device-emulation-small-dw.js [ Failure ] @@ -13184,7 +13598,6 @@ crbug.com/591099 inspector-protocol/input/dispatchTouchEvent.js [ Timeout ] crbug.com/591099 inspector-protocol/layers/get-layers.js [ Failure ] crbug.com/591099 inspector-protocol/layers/paint-profiler.js [ Failure ] -crbug.com/591099 inspector-protocol/sessions/log-entry-added.js [ Failure Pass ] crbug.com/591099 inspector/agents-enable-disable.html [ Failure ] crbug.com/591099 inspector/animation/animation-KeyframeEffectReadOnly-crash.html [ Crash Failure ] crbug.com/591099 inspector/animation/animation-empty-web-animations.html [ Crash Failure ] @@ -13240,467 +13653,13 @@ crbug.com/591099 inspector/device-mode/device-mode-switching-devices.html [ Crash Failure Timeout ] crbug.com/591099 inspector/diff-module.html [ Failure ] crbug.com/591099 inspector/domdebugger/domdebugger-getEventListeners.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/php-highlighter.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/php-highlighter.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/editor/text-editor-auto-whitespace-removing.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-auto-whitespace-removing.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-block-indent.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-block-indent.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-char-to-coordinates.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-char-to-coordinates.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-formatter.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-formatter.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/editor/text-editor-home-button.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-home-button.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-line-breaks.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-line-breaks.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-search-replace.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-search-replace.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-smart-braces.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-smart-braces.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-token-at-position.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-token-at-position.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/accessibility/autocomplete-attribute.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/accessibility/autocomplete-attribute.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/accessibility/edit-aria-attributes.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/accessibility/edit-aria-attributes.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/attribute-modified-ns.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/attribute-modified-ns.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/bidi-dom-tree.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/bidi-dom-tree.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/breadcrumb-updates.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/breadcrumb-updates.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/dom-agent-query-selector.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/dom-agent-query-selector.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/dom-search-crash.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/dom-search-crash.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/delete-from-document.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/delete-from-document.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-1.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-1.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-2.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-2.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-3.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-3.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-4.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-4.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-style-attribute.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-style-attribute.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/insert-node-collapsed.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/insert-node-collapsed.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/perform-undo-undo.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/perform-undo-undo.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/remove-node.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/remove-node.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/set-attribute-non-html.svg [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-attribute-non-html.svg [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/set-attribute.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-attribute.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-2.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-2.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-body.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-body.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/undo-dom-edits-2.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-dom-edits-2.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/undo-dom-edits.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-dom-edits.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/undo-set-outer-html-2.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-set-outer-html-2.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/edit/undo-set-outer-html.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-set-outer-html.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-css-path.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-css-path.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-delete-inline-style.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-delete-inline-style.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-img-tooltip.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-img-tooltip.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-correct-case.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-correct-case.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-limited-children.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-limited-children.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-reload-assert.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-reload-assert.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-rewrite-href.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-rewrite-href.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-search.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-search.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-selection-after-delete.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-selection-after-delete.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-selection-on-refresh.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-selection-on-refresh.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-panel-structure.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-structure.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-tab-stops.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-tab-stops.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/elements-treeoutline-copy.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-treeoutline-copy.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-custom-framework.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-custom-framework.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-jquery1.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-jquery1.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-jquery2.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-jquery2.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-remove.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-remove.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/event-listeners-about-blank.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listeners-about-blank.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/expand-recursively.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/expand-recursively.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/hide-shortcut.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/hide-shortcut.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-grid.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-grid.html [ Failure ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-dom-updates.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-dom-updates.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node-scroll.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-node-scroll.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-node.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/highlight/highlight-svg-root.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-svg-root.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/iframe-load-event.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/iframe-load-event.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/inline-style-title.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inline-style-title.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/insert-node.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/insert-node.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/inspect-mode-after-profiling.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-mode-after-profiling.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/inspect-mode-shadow-text.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-mode-shadow-text.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/inspect-pointer-events-none.html [ Crash Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-pointer-events-none.html [ Crash Timeout ] -crbug.com/591099 http/tests/devtools/elements/modify-chardata.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/modify-chardata.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/move-node.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/move-node.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/node-reselect-on-append-child.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/node-reselect-on-append-child.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/node-xpath.xhtml [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/node-xpath.xhtml [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/resolve-alien-node.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/resolve-alien-node.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/resolve-node-blocked.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/resolve-node-blocked.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/reveal-whitespace-text-node.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/reveal-whitespace-text-node.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/selected-element-changes-execution-context.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/selected-element-changes-execution-context.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/create-shadow-root.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/create-shadow-root.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/shadow-distribution.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-distribution.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/shadow-root.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-root.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/shadow/update-shadowdom.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/update-shadowdom.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/color-swatch.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-swatch.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/commit-selector.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/commit-selector.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/css-live-edit.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/css-live-edit.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/css-outline.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/css-outline.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-1/dynamic-style-tag.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/dynamic-style-tag.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/edit-media-text.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-media-text.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-inside-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-inside-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-1/empty-background-url.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/empty-background-url.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-1/filter-matched-styles.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/filter-matched-styles.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/add-import-rule.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/http/tests/devtools/elements/styles-2/add-import-rule.html [ Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/cssom-shorthand-important.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/cssom-shorthand-important.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/force-pseudo-state.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/force-pseudo-state.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/inactive-properties.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inactive-properties.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/inject-stylesheet.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inject-stylesheet.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/keyframes-rules.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/keyframes-rules.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/lazy-computed-style.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/lazy-computed-style.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/media-emulation.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-emulation.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/media-queries.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-queries.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/media-using-same-url.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-using-same-url.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html [ Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html [ Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/parse-comments.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-comments.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/parse-utf8-bom.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-utf8-bom.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/paste-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/paste-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/property-ui-location.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/property-ui-location.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-2/pseudo-elements.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/pseudo-elements.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-2/region-style-crash.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/region-style-crash.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/selector-list.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/selector-list.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/selector-source-data.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/selector-source-data.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/shadow-dom-rules.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/shadow-dom-rules.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/simple-selector.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/simple-selector.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/spectrum.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/spectrum.html [ Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/style-autocomplete.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/style-autocomplete.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-blank-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-blank-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-invalid-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-invalid-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-cancel-editing.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-cancel-editing.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-commit-editing.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-commit-editing.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-computed-trace.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-computed-trace.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-inherited.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-inherited.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-change.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-change.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-delete.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-delete.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-enable.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-variables.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-variables.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/inline-style-sourcemap.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/inline-style-sourcemap.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/keyframes-source-offsets.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/keyframes-source-offsets.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-formatting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-formatting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-history.html [ Crash ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-history.html [ Crash ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-iframe.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-iframe.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-invalid-color-values.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-invalid-color-values.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-keyframes.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-keyframes.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-live-locations-leak.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-live-locations-leak.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-new-API.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-new-API.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-overriden-properties.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-overriden-properties.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-properties-overload.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-properties-overload.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines-inline.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines-inline.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-offsets.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-offsets.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-1.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-1.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-2.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-2.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-3.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-3.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-4.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-4.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-url-linkify.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-url-linkify.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/svg-style.xhtml [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/svg-style.xhtml [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-new-rule.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-new-rule.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-rule-crash.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-rule-crash.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/cancel-upon-invalid-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/cancel-upon-invalid-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/original-content-provider.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/original-content-provider.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/undo-after-cancelled-editing.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-after-cancelled-editing.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/undo-change-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-change-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/undo-property-toggle.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-property-toggle.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/undo-set-selector-text.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-set-selector-text.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/styles/up-down-numerics-and-colors.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/up-down-numerics-and-colors.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/updates-during-dom-traversal.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/updates-during-dom-traversal.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/updates-throttled.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/updates-throttled.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/url-color-swatch.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/url-color-swatch.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/elements/styles/url-multiple-collapsing.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/url-multiple-collapsing.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/elements/user-properties.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/user-properties.html [ Crash Failure ] crbug.com/591099 inspector/evaluate-in-page.html [ Failure ] crbug.com/591099 inspector/file-reader-with-network-panel.html [ Failure ] crbug.com/591099 inspector/file-system-mapping.html [ Failure ] crbug.com/591099 inspector/file-system-project.html [ Failure ] crbug.com/591099 inspector/filtered-item-selection-dialog-rendering.html [ Failure ] crbug.com/591099 inspector/geolocation-emulation-tests.html [ Failure ] -crbug.com/591099 inspector/help/release-note-unit.html [ Crash Failure ] +crbug.com/591099 inspector/help/release-note-unit.html [ Crash Failure Timeout ] crbug.com/591099 inspector/help/release-note.html [ Crash Failure ] crbug.com/591099 inspector/import-open-inspector.html [ Failure ] crbug.com/591099 inspector/input-event-warning.html [ Failure ] @@ -13725,89 +13684,13 @@ crbug.com/591099 inspector/network/network-request-query-string.html [ Failure ] crbug.com/591099 inspector/network/network-toggle-type-filter.html [ Crash Failure ] crbug.com/591099 inspector/network/network-update-calculator-for-all-requests.html [ Failure ] -crbug.com/591099 http/tests/devtools/profiler/agents-disabled-check.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/agents-disabled-check.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-agent-crash-on-start.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-agent-crash-on-start.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-bottom-up-large-tree-search.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-bottom-up-large-tree-search.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-bottom-up-times.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-bottom-up-times.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-calculate-time.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-calculate-time.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-flame-chart-overview.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-flame-chart-overview.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-native-nodes-filter.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-native-nodes-filter.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-profile-removal.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-profile-removal.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-profiling.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-profiling.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-save-load.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-save-load.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/cpu-profiler-stopped-removed-race.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-stopped-removed-race.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-profiler-profiling.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-profiler-profiling.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-dom-groups-change.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-dom-groups-change.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-expansion-preserved-when-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-expansion-preserved-when-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-show-all.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-show-all.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-show-next.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-show-next.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-shown-node-count-preserved-when-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-shown-node-count-preserved-when-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-comparison-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-expansion-preserved-when-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-expansion-preserved-when-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-show-all.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-show-all.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-show-next.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-show-next.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-shown-node-count-preserved-when-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-shown-node-count-preserved-when-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-containment-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-inspect-dom-wrapper.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-inspect-dom-wrapper.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-loader.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-loader.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-statistics.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-statistics.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-expand-collapse.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-expand-collapse.html [ Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-expansion-preserved-when-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-expansion-preserved-when-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-search-by-id.html [ Crash Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-search-by-id.html [ Crash Timeout ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-search.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-search.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-show-all.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-show-all.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-show-next.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-show-next.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-show-ranges.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-show-ranges.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-shown-node-count-preserved-when-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-shown-node-count-preserved-when-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-sorting-fields.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-sorting-fields.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-sorting-instances.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-sorting-instances.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot-summary-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/profiler/heap-snapshot.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot.html [ Crash Failure ] crbug.com/591099 inspector/quick-open/command-menu.html [ Crash Failure ] crbug.com/591099 inspector/remote-object.html [ Failure ] crbug.com/591099 inspector/report-API-errors.html [ Failure ] crbug.com/591099 inspector/report-protocol-errors.html [ Failure ] crbug.com/591099 inspector/reveal-objects.html [ Crash Failure ] crbug.com/591099 inspector/runtime.html [ Failure ] -crbug.com/591099 inspector/runtime/runtime-callFunctionOn.html [ Crash Failure ] +crbug.com/591099 inspector/runtime/runtime-callFunctionOn.html [ Crash Failure Timeout ] crbug.com/591099 inspector/runtime/runtime-es6-setSymbolPropertyValue.html [ Failure ] crbug.com/591099 inspector/runtime/runtime-getProperties-isOwnProperty.html [ Crash Failure ] crbug.com/591099 inspector/runtime/runtime-getProperties.html [ Failure ] @@ -13840,422 +13723,6 @@ crbug.com/591099 inspector/sass/test-ssp-editing.html [ Crash Failure ] crbug.com/591099 inspector/sass/test-ssp-incremental-edit-invalid-value.html [ Crash Failure ] crbug.com/591099 inspector/schema-get-domains-matches-agents.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/autocomplete-css.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-css.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/autocomplete-general.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-general.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/autocomplete-scss.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-scss.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/bezier-swatch-position.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/bezier-swatch-position.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/color-swatch-position.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/color-swatch-position.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/compile-javascript.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/compile-javascript.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/css-inline-sourcemap.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/css-inline-sourcemap.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/css-outline-dialog.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/css-outline-dialog.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-change-variable.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-change-variable.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-in.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-in.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out.html [ Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out.html [ Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-step/step-through-event-listeners.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/step-through-event-listeners.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/async-call-stack-url.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/async-call-stack-url.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/copy-stack-trace.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/copy-stack-trace.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-inline-values.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-inline-values.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/execution-context-sorted.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/execution-context-sorted.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-details.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-details.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-generator-details.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-generator-details.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/inline-scope-variables.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/inline-scope-variables.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/last-execution-context.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/last-execution-context.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/monitor-console-command.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/monitor-console-command.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/reveal-execution-line.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/reveal-execution-line.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-search.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-search.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-snippet-model.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-snippet-model.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-panel.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-panel.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-sorting.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-sorting.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/show-function-definition.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/show-function-definition.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/show-generator-location.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/show-generator-location.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-frame-count.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-frame-count.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-frame.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-frame.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-url-comment.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-url-comment.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/switch-file.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/switch-file.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/ui-source-code.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/ui-source-code.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/properties-special.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/properties-special.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/script-collected.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-collected.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/formatter-css.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/formatter-css.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/formatter-js.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/formatter-js.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/inspect-function.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/inspect-function.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/javascript-outline-dialog.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/javascript-outline-dialog.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/outline-javascript-1.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-1.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/outline-javascript-2.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-2.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/outline-javascript-3.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-3.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/outline-javascript-4.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-4.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/outline-javascript-5.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-5.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/outline-javascript-6.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-6.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-css-1.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-1.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-css-2.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-2.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-css-3.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-3.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-html-1.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-1.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-html-2.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-2.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-html-3.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-3.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-1.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-1.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-2.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-2.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-3.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-3.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-4.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-4.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-5.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-5.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-6.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-6.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-7.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-7.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-8.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-8.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-9.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-9.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-classes.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-classes.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-template-literals.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-template-literals.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/sass-highlighter.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sass-highlighter.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/search-config.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/search-config.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/snippet-storage.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/snippet-storage.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/source-code-diff.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/source-code-diff.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/sources-panel-extension-names.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sources-panel-extension-names.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/sources-panel-focus-editor-on-select.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sources-panel-focus-editor-on-select.html [ Crash Failure ] crbug.com/591099 inspector/storage-panel-dom-storage-update.html [ Failure ] crbug.com/591099 inspector/storage-panel-dom-storage.html [ Failure ] crbug.com/591099 inspector/syntax-highlight-css.html [ Failure ] @@ -14266,135 +13733,13 @@ crbug.com/591099 inspector/tabbed-pane-max-tab-width-calculation.html [ Failure ] crbug.com/591099 inspector/tabbed-pane-tabs-to-show.html [ Failure Timeout ] crbug.com/591099 inspector/text-autosizing-override.html [ Failure ] -crbug.com/591099 inspector/throttling/mobile-throttling.html [ Failure ] +crbug.com/591099 inspector/throttling/mobile-throttling.html [ Failure Timeout ] crbug.com/591099 inspector/tracing-browser-thread.html [ Failure ] crbug.com/591099 inspector/tracing-model-async.html [ Failure ] crbug.com/591099 inspector/tracing-model-ids.html [ Failure ] crbug.com/591099 inspector/tracing-model-storage.html [ Failure ] crbug.com/591099 inspector/tracing-model.html [ Failure ] crbug.com/591099 inspector/tracing-session-id.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/anonymous-image-object.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/anonymous-image-object.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/buffer-usage.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/buffer-usage.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/category-filter.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/category-filter.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/console-timeline.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/console-timeline.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/decode-resize.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/decode-resize.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/tracing/frame-model.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/frame-model.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/hit-test.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/hit-test.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/scroll-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/scroll-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/compile-script.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/compile-script.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-gc-event.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-gc-event.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-microtasks.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-microtasks.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-open-function-call.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-open-function-call.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-runtime-stats.html [ Crash Failure Pass ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-runtime-stats.html [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-script-id.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-script-id.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-script-tag-1.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-script-tag-1.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-js/timeline-script-tag-2.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-script-tag-2.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-layout/timeline-layout-reason.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-layout/timeline-layout-reason.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-layout/timeline-layout-with-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-layout/timeline-layout-with-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-layout/timeline-layout.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-layout/timeline-layout.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-animation-frame.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-animation-frame.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-bound-function.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-bound-function.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-event-causes.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-event-causes.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-event-details.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-event-details.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-event-dispatch.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-event-dispatch.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-filtering.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-filtering.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-flame-chart-automatically-size-window.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-flame-chart-automatically-size-window.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-grouped-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-grouped-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-load-event.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-load-event.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-mark-timeline.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-mark-timeline.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-model.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-model.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-node-reference.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-node-reference.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-parse-html.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-parse-html.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-range-stats.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-range-stats.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-record-reload.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-record-reload.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-search.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-search.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-tree-search.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-tree-search.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-trivial.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-trivial.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-misc/timeline-window-filter.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-window-filter.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-network/timeline-network-resource-details.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-network/timeline-network-resource-details.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-network/timeline-network-resource.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-network/timeline-network-resource.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/paint-profiler-update.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/paint-profiler-update.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-and-multiple-style-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-and-multiple-style-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-image.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-image.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations-on-deleted-node.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations-on-deleted-node.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/timeline-paint.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-paint/update-layer-tree.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/update-layer-tree.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-style/parse-author-style-sheet.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/parse-author-style-sheet.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-style-recalc-all-invalidator-types.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-style-recalc-all-invalidator-types.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidator-invalidations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidator-invalidations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-time-stamp.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-time-stamp.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-time.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-time.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-timer-fired-from-eval-call-site.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-timer-fired-from-eval-call-site.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-timer.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-timer.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/timeline-time/timeline-usertiming.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-usertiming.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/tracing-timeline-load.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/tracing-timeline-load.html [ Failure ] -crbug.com/591099 http/tests/devtools/tracing/worker-events.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/worker-events.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/tracing/worker-js-frames.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/worker-js-frames.html [ Crash Failure ] crbug.com/591099 inspector/uisourcecode-revisions.html [ Failure ] crbug.com/591099 inspector/user-metrics.html [ Failure ] crbug.com/591099 inspector/version-controller.html [ Failure ] @@ -14568,7 +13913,6 @@ crbug.com/591099 media/video-poster-scale.html [ Failure ] crbug.com/591099 media/video-remove-insert-repaints.html [ Crash Failure ] crbug.com/591099 media/video-replaces-poster.html [ Failure ] -crbug.com/591099 media/video-scales-in-media-document.html [ Crash Failure Pass ] crbug.com/591099 media/video-transformed.html [ Failure ] crbug.com/591099 media/video-zoom-controls.html [ Failure ] crbug.com/591099 media/video-zoom.html [ Failure ] @@ -14602,7 +13946,6 @@ crbug.com/591099 paint/frames/frameset-with-stacking-context-and-not-stacking-context-children.html [ Failure ] crbug.com/591099 paint/frames/frameset-with-stacking-contexts.html [ Failure ] crbug.com/591099 paint/high-contrast-mode/image-filter-all/text-on-backgrounds.html [ Failure ] -crbug.com/591099 paint/inline/floating-inline.html [ Failure Pass ] crbug.com/591099 paint/inline/focus-ring-under-absolute-with-relative-continuation.html [ Failure ] crbug.com/591099 paint/inline/outline-offset.html [ Failure ] crbug.com/591099 paint/invalidation/4774354.html [ Failure ] @@ -14813,7 +14156,6 @@ crbug.com/591099 paint/invalidation/fixed-descendant-of-transformed-scrolled.html [ Failure ] crbug.com/591099 paint/invalidation/fixed-element-repaint-after-compositing-update.html [ Failure Pass ] crbug.com/591099 paint/invalidation/fixed-margin-change-repaint.html [ Failure Pass ] -crbug.com/591099 paint/invalidation/fixed-move-after-keyboard-scroll.html [ Failure Pass ] crbug.com/591099 paint/invalidation/fixed-move-after-scroll.html [ Failure ] crbug.com/591099 paint/invalidation/fixed-position-layer-moved.html [ Failure Pass ] crbug.com/591099 paint/invalidation/fixed-position-transparency-with-overflow.html [ Failure Pass ] @@ -14940,11 +14282,10 @@ crbug.com/591099 paint/invalidation/multi-subsequence-composited.html [ Failure ] crbug.com/591099 paint/invalidation/multi-subsequence-scrolled.html [ Failure ] crbug.com/757767 paint/invalidation/multicol-as-paint-container.html [ Crash ] -crbug.com/757767 paint/invalidation/multicol-nested.html [ Timeout ] +crbug.com/591099 paint/invalidation/multicol-nested.html [ Failure Timeout ] crbug.com/591099 paint/invalidation/multicol-relpos-with-abspos.html [ Failure Pass ] crbug.com/757767 paint/invalidation/multicol-repaint.html [ Crash ] crbug.com/591099 paint/invalidation/multicol-resize-with-rule.html [ Failure ] -crbug.com/591099 paint/invalidation/multicol-spanner-background-color.html [ Failure Pass ] crbug.com/757767 paint/invalidation/multicol-with-abspos-in-relpos.html [ Timeout ] crbug.com/757767 paint/invalidation/multicol-with-abspos.html [ Timeout ] crbug.com/591099 paint/invalidation/multicol-with-block.html [ Failure Pass ] @@ -15227,6 +14568,7 @@ crbug.com/591099 paint/markers/inline-spelling-markers-hidpi-composited.html [ Failure ] crbug.com/591099 paint/markers/inline-spelling-markers-hidpi.html [ Failure ] crbug.com/591099 paint/markers/inline_spelling_markers.html [ Failure ] +crbug.com/591099 paint/markers/suggestion-marker-basic.html [ Failure Pass ] crbug.com/591099 paint/markers/suggestion-marker-split.html [ Failure ] crbug.com/591099 paint/masks/fieldset-mask.html [ Failure ] crbug.com/591099 paint/overflow/composited-rounded-clip-floating-element.html [ Failure ] @@ -15381,7 +14723,6 @@ crbug.com/591099 printing/thead-repeats-at-top-of-each-page-multiple-tables.html [ Failure ] crbug.com/591099 printing/thead-repeats-at-top-of-each-page.html [ Failure ] crbug.com/757767 printing/viewport-size-dependant-iframe-with-multicol-crash.html [ Crash ] -crbug.com/757767 printing/webgl-oversized-printing.html [ Crash Pass ] crbug.com/591099 scrollbars/auto-scrollbar-fit-content.html [ Failure ] crbug.com/591099 scrollbars/basic-scrollbar.html [ Failure ] crbug.com/591099 scrollbars/custom-scrollbar-enable-changes-thickness-with-iframe.html [ Failure Pass ] @@ -16504,7 +15845,6 @@ crbug.com/591099 svg/text/small-fonts-in-html5.html [ Failure Pass ] crbug.com/591099 svg/text/surrogate-pair-queries.html [ Failure Pass ] crbug.com/591099 svg/text/text-repaint-rects.xhtml [ Failure ] -crbug.com/591099 svg/text/text-style-recalc-crash.html [ Failure Pass ] crbug.com/591099 svg/text/unpaired-surrogate-with-trailing-char-crash.html [ Failure ] crbug.com/591099 svg/text/white-space-pre-wrap-whitespace-only-crash.html [ Failure ] crbug.com/591099 svg/transforms/negative-scale-value.html [ Failure ] @@ -16679,7 +16019,7 @@ crbug.com/591099 tables/mozilla_expected_failures/bugs/bug8499.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug85016.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/bugs/bug89315.html [ Failure ] -crbug.com/591099 tables/mozilla_expected_failures/bugs/bug91057.html [ Failure ] +crbug.com/591099 tables/mozilla_expected_failures/bugs/bug91057.html [ Failure Pass ] crbug.com/591099 tables/mozilla_expected_failures/collapsing_borders/bug41262-5.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/collapsing_borders/bug41262-6.html [ Failure ] crbug.com/591099 tables/mozilla_expected_failures/core/captions1.html [ Failure ] @@ -16905,7 +16245,6 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-render-layer.html [ Failure Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-scroll-path-into-view.html [ Crash Failure Timeout ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-shadow-source-in.html [ Failure Pass ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-textMetrics-width.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-transforms-during-path.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/currentTransform-null.html [ Failure ] @@ -17028,7 +16367,7 @@ crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-10px-images.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-16px-images.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-1px-images.html [ Crash Failure ] -crbug.com/757767 virtual/exotic-color-space/images/rendering-broken-block-flow-images.html [ Timeout ] +crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-block-flow-images.html [ Failure Timeout ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images-empty-alt.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/rendering-broken-images.html [ Crash Failure ] crbug.com/591099 virtual/exotic-color-space/images/script-counter-imageDimensionChanged-crash.html [ Crash Failure ] @@ -17055,7 +16394,6 @@ crbug.com/591099 virtual/gpu-rasterization/images/animated-background-image-crash.html [ Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-jpeg-with-color-profile.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-clip-text.html [ Crash Failure ] -crbug.com/591099 virtual/gpu-rasterization/images/color-profile-background-image-space.html [ Crash Failure Pass ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-image-source.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-border-radius.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-drag-image.html [ Crash Failure ] @@ -17141,7 +16479,7 @@ crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-10px-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-16px-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-1px-images.html [ Crash Failure ] -crbug.com/757767 virtual/gpu-rasterization/images/rendering-broken-block-flow-images.html [ Timeout ] +crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-block-flow-images.html [ Failure Timeout ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-images-empty-alt.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/rendering-broken-images.html [ Crash Failure ] crbug.com/591099 virtual/gpu-rasterization/images/script-counter-imageDimensionChanged-crash.html [ Failure ] @@ -17191,7 +16529,6 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-render-layer.html [ Failure Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-scroll-path-into-view.html [ Failure Timeout ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-shadow-source-in.html [ Failure Pass ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-text-baseline-tiny-fonts.html [ Failure Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-textMetrics-width.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-transforms-during-path.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/currentTransform-null.html [ Crash Failure ] @@ -17221,12 +16558,8 @@ crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/clear-applies-to-012.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-applies-to-008.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-width-002.xht [ Crash Failure ] -crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-005.xht [ Crash Failure Pass ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-036.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/floats-143.xht [ Crash Failure ] -crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001a.xht [ Crash Failure Pass ] -crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001b.xht [ Crash Failure Pass ] -crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-placement-vertical-001c.xht [ Crash Failure Pass ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule3-outside-left-002.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-rule3-outside-right-002.xht [ Crash Failure ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats/floats-wrap-bfc-003-right-overflow.xht [ Crash Failure ] @@ -17270,20 +16603,16 @@ crbug.com/591099 virtual/layout_ng/fast/block/float/assert-when-moving-float-2.html [ Failure Pass ] crbug.com/591099 virtual/layout_ng/fast/block/float/assert-when-moving-float.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-not-removed-from-first-letter.html [ Crash Failure ] -crbug.com/757767 virtual/layout_ng/fast/block/float/float-not-removed-from-next-sibling4.html [ Pass Timeout ] -crbug.com/757767 virtual/layout_ng/fast/block/float/floats-do-not-overhang-from-block-formatting-context.html [ Crash Timeout Failure ] +crbug.com/757767 virtual/layout_ng/fast/block/float/floats-do-not-overhang-from-block-formatting-context.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/floats-offset-image-quirk-line-height.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/formatting-context-changes.html [ Crash Failure ] -crbug.com/757767 virtual/layout_ng/fast/block/float/line-break-after-white-space-crash.html [ Crash Timeout ] +crbug.com/757767 virtual/layout_ng/fast/block/float/line-break-after-white-space-crash.html [ Crash ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-made-inline-crash.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash-2.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/rubybase-children-moved-crash.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/trailing-float-with-columns.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng/fast/block/margin-collapse/line-beside-float-complex-margin-collapsing.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/margin-collapse/self-collapsing-cols-creates-block-formatting-context.html [ Failure ] -crbug.com/591099 virtual/mojo-blobs/fast/files/blob-close-read.html [ Failure ] -crbug.com/591099 virtual/mojo-blobs/fast/files/blob-close-revoke.html [ Failure ] -crbug.com/591099 virtual/mojo-blobs/fast/files/blob-close.html [ Failure ] crbug.com/591099 virtual/mojo-blobs/fast/files/blob-constructor.html [ Failure ] crbug.com/591099 virtual/mojo-blobs/fast/files/blob-parts-slice-test.html [ Failure ] crbug.com/591099 virtual/mojo-blobs/fast/files/blob-slice-test.html [ Failure ] @@ -17437,7 +16766,6 @@ crbug.com/591099 virtual/mojo-loading/fast/table/border-collapsing/dynamic-border-width-change.html [ Failure ] crbug.com/591099 virtual/mojo-loading/fast/table/border-recalc.html [ Failure ] crbug.com/591099 virtual/mojo-loading/fast/table/canvas-column-in-column-group.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/fast/table/caption-encloses-overhanging-float.html [ Failure Pass ] crbug.com/591099 virtual/mojo-loading/fast/table/caption-in-inline.html [ Failure ] crbug.com/591099 virtual/mojo-loading/fast/table/caption-orthogonal-writing-mode-sizing.html [ Failure ] crbug.com/591099 virtual/mojo-loading/fast/table/cell-height-min-intrinsic.html [ Failure ] @@ -17695,7 +17023,7 @@ crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-smart-enter.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-string-format.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-substituted.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-tainted-globals.html [ Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-tainted-globals.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-timestamp.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-trace-in-eval.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-uncaught-exception-in-eval.html [ Failure ] @@ -17708,10 +17036,544 @@ crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-worker-nested-imports-syntax-error.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/console-xpath.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/exception-objects.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/inspect-html-all-collection.html [ Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/inspect-html-all-collection.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/paintworklet-console-selector.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/shadow-element.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/worker-eval-contains-stack.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/php-highlighter.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-auto-whitespace-removing.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-block-indent.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-char-to-coordinates.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-formatter.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-home-button.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-line-breaks.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-search-replace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-smart-braces.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-token-at-position.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/accessibility/autocomplete-attribute.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/accessibility/edit-aria-attributes.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/attribute-modified-ns.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/bidi-dom-tree.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/breadcrumb-updates.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/dom-agent-query-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/dom-search-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/delete-from-document.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-1.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-3.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-4.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-style-attribute.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/insert-node-collapsed.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/perform-undo-undo.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/remove-node.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-attribute-non-html.svg [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-attribute.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-body.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-dom-edits-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-dom-edits.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-set-outer-html-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-set-outer-html.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-css-path.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-delete-inline-style.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-img-tooltip.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-correct-case.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-limited-children.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-reload-assert.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-rewrite-href.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-search.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-selection-after-delete.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-selection-on-refresh.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-structure.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-tab-stops.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-treeoutline-copy.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-custom-framework.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-jquery1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-jquery2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-remove.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listeners-about-blank.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/expand-recursively.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/hide-shortcut.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-grid.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-dom-updates.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-node-scroll.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-svg-root.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/iframe-load-event.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inline-style-title.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/insert-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-mode-after-profiling.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-mode-shadow-text.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-pointer-events-none.html [ Crash Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/modify-chardata.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/move-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/node-reselect-on-append-child.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/node-xpath.xhtml [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/resolve-alien-node.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/resolve-node-blocked.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/reveal-whitespace-text-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/selected-element-changes-execution-context.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/create-shadow-root.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-distribution.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-root.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/update-shadowdom.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-swatch.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/commit-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/css-live-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/css-outline.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/dynamic-style-tag.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-media-text.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-inside-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/empty-background-url.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/filter-matched-styles.html [ Crash Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/devtools/elements/styles-2/add-import-rule.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/cssom-shorthand-important.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/force-pseudo-state.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inactive-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inject-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/keyframes-rules.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/lazy-computed-style.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-emulation.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-queries.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-using-same-url.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-comments.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-utf8-bom.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/paste-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/property-ui-location.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/pseudo-elements.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/region-style-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/selector-list.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/selector-source-data.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/shadow-dom-rules.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/simple-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/spectrum.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/style-autocomplete.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-blank-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-invalid-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-cancel-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-commit-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-computed-trace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-inherited.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-change.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-delete.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-enable.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-variables.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/inline-style-sourcemap.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/keyframes-source-offsets.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-formatting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-history.html [ Crash ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-iframe.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-invalid-color-values.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-keyframes.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-live-locations-leak.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-new-API.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-overriden-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-properties-overload.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines-inline.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-offsets.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-1.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-3.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-4.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-url-linkify.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/svg-style.xhtml [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-new-rule.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-rule-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/cancel-upon-invalid-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/original-content-provider.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-after-cancelled-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-change-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-property-toggle.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-set-selector-text.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/up-down-numerics-and-colors.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/updates-during-dom-traversal.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/updates-throttled.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/url-color-swatch.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/url-multiple-collapsing.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/user-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/agents-disabled-check.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-agent-crash-on-start.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-bottom-up-large-tree-search.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-bottom-up-times.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-calculate-time.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-flame-chart-overview.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-native-nodes-filter.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-profile-removal.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-profiling.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-save-load.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/cpu-profiler-stopped-removed-race.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-profiler-profiling.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-dom-groups-change.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-expansion-preserved-when-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-show-all.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-show-next.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-shown-node-count-preserved-when-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-comparison-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-expansion-preserved-when-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-show-all.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-show-next.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-shown-node-count-preserved-when-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-containment-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-inspect-dom-wrapper.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-loader.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-statistics.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-expand-collapse.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-expansion-preserved-when-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-search-by-id.html [ Crash Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-search.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-show-all.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-show-next.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-show-ranges.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-shown-node-count-preserved-when-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-sorting-fields.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-sorting-instances.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot-summary-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/profiler/heap-snapshot.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-css.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-general.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-scss.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/bezier-swatch-position.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/color-swatch-position.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/compile-javascript.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/css-inline-sourcemap.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/css-outline-dialog.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-change-variable.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-in.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/step-through-event-listeners.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/async-call-stack-url.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/copy-stack-trace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-inline-values.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/execution-context-sorted.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-details.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-generator-details.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/inline-scope-variables.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/last-execution-context.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/monitor-console-command.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/reveal-execution-line.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-search.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-snippet-model.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-panel.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/show-function-definition.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/show-generator-location.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-frame-count.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-frame.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-url-comment.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/switch-file.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/ui-source-code.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/properties-special.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-collected.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/formatter-css.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/formatter-js.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/inspect-function.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/javascript-outline-dialog.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-2.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-4.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-5.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-6.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-1.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-2.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-2.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-1.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-4.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-5.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-6.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-7.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-8.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-9.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-classes.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-template-literals.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sass-highlighter.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/search-config.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/snippet-storage.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/source-code-diff.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sources-panel-extension-names.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sources-panel-focus-editor-on-select.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/anonymous-image-object.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/buffer-usage.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/category-filter.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/console-timeline.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/decode-resize.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/frame-model.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/hit-test.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/scroll-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/compile-script.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-gc-event.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-microtasks.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-open-function-call.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-runtime-stats.html [ Crash Failure Pass ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-script-id.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-script-tag-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-js/timeline-script-tag-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-layout/timeline-layout-reason.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-layout/timeline-layout-with-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-layout/timeline-layout.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-animation-frame.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-bound-function.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-event-causes.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-event-details.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-event-dispatch.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-filtering.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-flame-chart-automatically-size-window.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-grouped-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-load-event.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-mark-timeline.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-model.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-node-reference.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-parse-html.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-range-stats.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-record-reload.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-search.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-tree-search.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-trivial.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-window-filter.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-network/timeline-network-resource-details.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-network/timeline-network-resource.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/paint-profiler-update.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-and-multiple-style-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-image.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations-on-deleted-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/update-layer-tree.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/parse-author-style-sheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-recalculate-styles.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-style-recalc-all-invalidator-types.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidator-invalidations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-time-stamp.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-time.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-timer-fired-from-eval-call-site.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-timer.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/timeline-time/timeline-usertiming.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/tracing-timeline-load.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/worker-events.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/tracing/worker-js-frames.html [ Crash Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/dom/create-contextual-fragment-from-svg-document-range.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/dom/location-stringify.html [ Failure ] @@ -17833,7 +17695,7 @@ crbug.com/591099 virtual/mojo-loading/http/tests/inspector/appcache/appcache-swap.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/application-panel/resources-panel-on-navigation.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/application-panel/resources-panel-resource-preview.html [ Failure Timeout ] -crbug.com/591099 virtual/mojo-loading/http/tests/inspector/application-panel/resources-panel-websql.html [ Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/inspector/application-panel/resources-panel-websql.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/application-panel/storage-view-reports-quota.html [ Failure Pass Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/bindings/bindings-frame-attach-detach.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/bindings/bindings-frame-navigate.html [ Failure ] @@ -18064,7 +17926,6 @@ crbug.com/591099 virtual/mojo-loading/http/tests/inspector/sources/debugger/worker-debugging-script-mapping.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/sources/debugger/worker-debugging.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/sources/event-listener-breakpoints-script-fst-stmt-for-module.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/http/tests/inspector/sources/inline-module-export-error.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/sources/js-sourcemaps-toggle-enabled.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/sources/navigator-view-content-scripts.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/inspector/sources/ui-source-code-highlight.php [ Failure ] @@ -18759,7 +18620,7 @@ crbug.com/591099 virtual/mojo-loading/http/tests/workers/shared-worker-invalid-url.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/workers/shared-worker-redirect.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/workers/terminate-during-sync-operation-file.html [ Failure Timeout ] -crbug.com/591099 virtual/mojo-loading/http/tests/workers/terminate-during-sync-operation-filesystem.html [ Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/workers/terminate-during-sync-operation-filesystem.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/workers/worker-importScripts-onerror-crossorigin.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/workers/worker-importScripts-onerror-redirect-to-crossorigin.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/workers/worker-importScripts-onerror-sameorigin.html [ Failure ] @@ -18865,7 +18726,7 @@ crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/28.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/29.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/30.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/31.html [ Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/31.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/32.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/33.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/origin-exact-matching/34.html [ Failure ] @@ -18985,7 +18846,7 @@ crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-latin1.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-mimetype-mixed-case.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-missing-file-exception.html [ Failure ] -crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-multiple-open.html [ Failure ] +crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-multiple-open.html [ Failure Timeout ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-no-content-length-onProgress-response-type-blob.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-no-content-length-onProgress.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/xmlhttprequest/xmlhttprequest-no-content-type-with-text.html [ Failure ] @@ -19025,6 +18886,246 @@ crbug.com/591099 virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering.html [ Failure ] crbug.com/591099 virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering.html [ Failure ] crbug.com/591099 virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/XMLHttpRequestException.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/abort-should-destroy-responseText.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-preflight-data-saver.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-preflight-headers-async.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-preflight-request-header-sorted.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-preflight-request-headers-origin.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-preflight-request-invalid-status-400.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-response-with-body-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-response-with-body.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-response-with-expose-headers.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow-origin-null.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-sandboxed-iframe-allow.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied-without-wildcard.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/access-control-sandboxed-iframe-denied.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/async-xhr-revalidate-after-sync-xhr.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/authorization-header.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/binary-x-user-defined.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/bom.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/broken-xml-encoding.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/cache-control-request.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/cache-override.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/chunked-progress-event-expectedLength.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/close-window.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/connection-error-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/cookies.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/cross-origin-preflight-get-response-type-blob.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/cross-origin-preflight-get.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/cross-origin-unsupported-url.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/detaching-frame-2.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/detaching-frame.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/docLoaderFrame.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/duplicate-revalidation-reload.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/encode-request-url-2.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/encode-request-url.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/encoding-send-latin-1.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/event-listener-gc.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/event-target.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/exceptions.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/extra-parameters.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/failed-auth.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/filename-encoding.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/frame-load-cancelled-abort.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/frame-unload-abort-crash.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/get-dangerous-headers.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/getAllResponseHeaders.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/getResponseHeader.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/infoOnProgressEvent-response-type-blob.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/infoOnProgressEvent.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/inject-header.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/interactive-state.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/logout.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/methods-async.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/methods-lower-case.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/methods.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/newline-in-request-uri.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/null-auth.php [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/onabort-event.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/onerror-event.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/onloadend-event-after-abort.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/onloadend-event-after-error.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/onloadstart-event.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/open-async-overload.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/open-in-body-onload-sync-to-invalid-cross-origin-response-handling.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/open-in-body-onload-sync-to-invalid-preflight-handling.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/open-in-body-onload-sync-to-invalid-redirect-response-handling.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/00.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/01.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/02.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/03.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/04.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/05.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/06.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/07.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/08.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/09.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/10.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/11.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/12.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/13.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/14.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/15.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/16.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/17.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/18.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/19.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/20.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/21.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/22.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/23.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/24.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/25.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/26.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/27.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/28.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/29.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/30.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/31.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/32.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/33.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/34.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/35.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/36.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/37.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/38.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/39.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/40.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/41.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/42.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/43.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/44.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/45.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/46.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-exact-matching/47.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-all.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-exact-match.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-https.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-ip-addresses-with-subdomains.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-removal.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/origin-whitelisting-subdomains.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/post-arraybuffer-data-view.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/post-blob-content-type-async.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/post-blob-content-type-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/post-content-type.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/post-formdata.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/post-with-boundary.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/range-test.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/readystatechange.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cors-origin-null.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cross-origin-2.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cross-origin-post-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cross-origin-post.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cross-origin-sync-double.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cross-origin-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cross-origin-tripmine.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/redirect-cross-origin.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/referer.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/remember-bad-password.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/reopen-encoding.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/request-encoding.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/request-encoding2.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/request-encoding3.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/request-encoding4.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/request-from-popup.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/response-array-buffer-abort-in-loading-state.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/response-blob-abort-in-loading-state.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/response-blob-mimetype.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/response-document.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/response-encoding.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/response-encoding2.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/response-text.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/responsexml-type.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/send-object-tostring-check.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/serialize-document.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/set-dangerous-headers.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/simple-cross-origin-denied-events-post-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/simple-cross-origin-denied-events-post.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/simple-cross-origin-denied-events-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/simple-cross-origin-denied-events.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/simple-cross-origin-progress-events.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/state-after-network-error.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/status-after-abort.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/supported-xml-content-types-invalid-1.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/supported-xml-content-types-invalid-2.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/supported-xml-content-types-strange-valid-1.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/supported-xml-content-types-strange-valid-2.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/supported-xml-content-types.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/svg-created-by-xhr-allowed-in-dashboard.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/sync-xhr-revalidate-after-async-xhr.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/upload-onloadend-event-after-abort.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/upload-onloadend-event-after-sync-requests.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/upload-onloadstart-event.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/upload-onprogress-event.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/upload-request-error-event-order.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/web-apps/007.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/web-apps/018.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/abort-exception-assert.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/access-control-basic-get-fail-non-simple.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/access-control-preflight-request-headers-referer.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/close.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/cross-origin-unsupported-url.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/methods-async.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/methods.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/post-formdata.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/referer.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-access-control-basic-get-fail-non-simple.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-close.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-methods-async.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-methods.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-referer.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-response-type-blob-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-response-type-blob.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/shared-worker-xhr-file-not-found.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/upload-onprogress-event.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/xmlhttprequest-allowed-with-disabled-web-security.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/xmlhttprequest-file-not-found.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/xmlhttprequest-response-type-blob.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/workers/xmlhttprequest-timeout-override.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xhr-onunload.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xml-encoding.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldDispatchEvent.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldNotDispatchEvent.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-addEventListener-onProgress.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-allowed-with-disabled-web-security.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-big-document.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-check-get-readystate-for-404-without-body.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-check-head-readystate-for-404.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-contenttype-empty.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-crlf-getAllResponseHeader.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-forbidden-methods-exception.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-image-not-loaded.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-inheritance.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-latin1.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-mimetype-mixed-case.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-missing-file-exception.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-multiple-open.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-no-content-length-onProgress-response-type-blob.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-no-content-length-onProgress.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-no-content-type-with-text.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-no-content-type.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-open-empty-method.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-overridemimetype-content-type-header.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-overridemimetype-mixed-case.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-post-crash.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-response-type-blob.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-responseText-exception.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-responseXML-exception.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-name.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-value.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-sync-no-progress-events.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-sync-no-timers.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-sync-vs-async-assertion-failure.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-test-custom-headers.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-test-send-flag.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/xmlhttprequest-unload-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/zero-length-response-sync.html [ Failure ] +crbug.com/591099 virtual/outofblink-cors/http/tests/xmlhttprequest/zero-length-response.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-scrolling-with-clip-path-text.html [ Failure ] crbug.com/591099 virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-scrolling-with-clip-path.html [ Failure ] @@ -19342,7 +19443,7 @@ crbug.com/591099 virtual/scroll_customization/fast/scrolling/fractional-scroll-offset-document.html [ Failure ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/hover-during-scroll.html [ Failure ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/html-element-client-rect-excludes-scrollbars.html [ Failure ] -crbug.com/591099 virtual/scroll_customization/fast/scrolling/keyboard-scroll-page-scale.html [ Failure ] +crbug.com/591099 virtual/scroll_customization/fast/scrolling/keyboard-scroll-page-scale.html [ Failure Timeout ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/overflow-auto-ltr.html [ Failure ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/overflow-scrollability.html [ Failure ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/scroll-clears-fragment-anchor.html [ Failure ] @@ -19353,7 +19454,7 @@ crbug.com/591099 virtual/scroll_customization/fast/scrolling/scrollbar-mousedown-mouseup.html [ Failure ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/scrollbar-mousedown-move-mouseup.html [ Failure ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/scrollbar-prevent-default.html [ Failure ] -crbug.com/591099 virtual/scroll_customization/fast/scrolling/scrollbar-tickmarks-hittest.html [ Failure ] +crbug.com/591099 virtual/scroll_customization/fast/scrolling/scrollbar-tickmarks-hittest.html [ Failure Timeout ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/scrolling-apis-nan-scroll-position.html [ Failure ] crbug.com/591099 virtual/scroll_customization/fast/scrolling/scrolling-apis-subpixel.html [ Failure ] crbug.com/591099 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Crash Timeout ] @@ -19461,7 +19562,7 @@ crbug.com/591099 virtual/threaded/animations/interpolation/svg-stroke-dasharray-interpolation.html [ Crash Timeout ] crbug.com/591099 virtual/threaded/animations/interpolation/transform-interpolation.html [ Crash Timeout ] crbug.com/591099 virtual/threaded/animations/interpolation/webkit-clip-path-interpolation.html [ Crash Timeout ] -crbug.com/757767 virtual/threaded/animations/interpolation/webkit-column-count-interpolation.html [ Crash ] +crbug.com/757767 virtual/threaded/animations/interpolation/webkit-column-count-interpolation.html [ Crash Pass ] crbug.com/591099 virtual/threaded/animations/interpolation/webkit-transform-interpolation.html [ Crash Timeout ] crbug.com/591099 virtual/threaded/animations/keyframes-rule.html [ Failure ] crbug.com/591099 virtual/threaded/animations/lazy-detached-animation-stop.html [ Failure ] @@ -19636,7 +19737,6 @@ crbug.com/591099 virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables.html [ Failure ] crbug.com/591099 virtual/threaded/printing/thead-repeats-at-top-of-each-page.html [ Failure ] crbug.com/757767 virtual/threaded/printing/viewport-size-dependant-iframe-with-multicol-crash.html [ Crash ] -crbug.com/757767 virtual/threaded/printing/webgl-oversized-printing.html [ Crash Pass ] crbug.com/591099 virtual/threaded/transitions/3d/interrupted-transition.html [ Failure ] crbug.com/591099 virtual/threaded/transitions/bad-transition-shorthand-crash.html [ Failure ] crbug.com/591099 virtual/threaded/transitions/inherit-other-props-do-not-affect-transition-property.html [ Failure ] @@ -19675,6 +19775,7 @@ crbug.com/591099 virtual/threaded/transitions/transition-shape-outside-crash.html [ Failure ] crbug.com/591099 virtual/threaded/transitions/transition-transform-translate-calculated-length-crash.html [ Failure ] crbug.com/591099 virtual/threaded/transitions/transitions-parsing.html [ Failure Timeout ] +crbug.com/591099 virtual/wheelscrolllatching/fast/compositor-wheel-scroll-latching/touchpad-scroll-impl-to-main.html [ Failure Pass ] crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheel-event-dispatch-event.html [ Failure ] crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheel-fling-cancel.html [ Failure ] crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheel-in-scrollbar.html [ Failure ] @@ -19683,8 +19784,6 @@ crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheelevent-ctrl.html [ Failure ] crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheelevent-document-createevent.html [ Failure ] crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheelevent-handler-count.html [ Failure ] -crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html [ Failure Pass ] -crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html [ Failure Pass ] crbug.com/591099 virtual/wheelscrolllatching/fast/events/wheel/wheelevent-mousewheel-interaction.html [ Failure ] crbug.com/591099 webaudio/BiquadFilter/tail-time-lowpass.html [ Timeout ] crbug.com/591099 webaudio/internals/audiocontext-lock-threading-race.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService index 21b453f5..ba5ccd2 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
@@ -1,106 +1,6 @@ # These tests currently fail when run with --enable-network-service # See https://crbug.com/729849 -Bug(none) battery-status/api-defined.html [ Timeout ] -Bug(none) battery-status/multiple-promises-after-resolve.html [ Timeout ] -Bug(none) battery-status/multiple-promises.html [ Timeout ] -Bug(none) battery-status/multiple-windows-page-visibility.html [ Timeout ] -Bug(none) battery-status/multiple-windows.html [ Timeout ] -Bug(none) battery-status/no-gc-with-eventlisteners.html [ Timeout ] -Bug(none) battery-status/page-visibility.html [ Timeout ] -Bug(none) battery-status/promise-with-eventlisteners.html [ Timeout ] -Bug(none) battery-status/restricted-level-precision.html [ Timeout ] -Bug(none) bluetooth/characteristic/characteristicProperties.html [ Timeout ] -Bug(none) bluetooth/characteristic/getDescriptor/gen-characteristic-is-removed.html [ Timeout ] -Bug(none) bluetooth/characteristic/getDescriptor/gen-descriptor-get-same-object.html [ Timeout ] -Bug(none) bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed.html [ Timeout ] -Bug(none) bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed-with-uuid.html [ Timeout ] -Bug(none) bluetooth/characteristic/getDescriptors/gen-descriptor-get-same-object.html [ Timeout ] -Bug(none) bluetooth/characteristic/readValue/add-multiple-event-listeners.html [ Timeout ] -Bug(none) bluetooth/characteristic/readValue/event-is-fired.html [ Timeout ] -Bug(none) bluetooth/characteristic/readValue/gen-characteristic-is-removed.html [ Timeout ] -Bug(none) bluetooth/characteristic/readValue/gen-gatt-op-garbage-collection-ran-during-error.html [ Timeout ] -Bug(none) bluetooth/characteristic/readValue/read-succeeds.html [ Timeout ] -Bug(none) bluetooth/characteristic/readValue/read-updates-value.html [ Timeout ] -Bug(none) bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.html [ Timeout ] -Bug(none) bluetooth/characteristic/writeValue/write-succeeds.html [ Timeout ] -Bug(none) bluetooth/characteristic/writeValue/gen-characteristic-is-removed.html [ Timeout ] -Bug(none) bluetooth/descriptor/readValue/read-succeeds.html [ Timeout ] -Bug(none) bluetooth/idl/idl-BluetoothDevice.html [ Timeout ] -Bug(none) bluetooth/requestDevice [ Timeout ] -Bug(none) bluetooth/server/connect/connection-succeeds.html [ Timeout ] -Bug(none) bluetooth/server/connect/garbage-collection-ran-during-success.html [ Timeout ] -Bug(none) bluetooth/server/connect/get-same-gatt-server.html [ Timeout ] -Bug(none) bluetooth/server/device-same-object.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-disconnect-called-before.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-disconnected-device.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-get-same-object.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-invalid-service-name.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-no-permission-absent-service.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-no-permission-present-service.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/gen-service-not-found.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryService/service-found.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryService/two-iframes-from-same-origin.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/blocklisted-services.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/correct-services.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-called-before.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-disconnected-device.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-get-same-object.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-invalid-service-name.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.html [ Failure Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/services-found-with-uuid.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/services-found.html [ Timeout ] -Bug(none) bluetooth/server/getPrimaryServices/services-not-found.html [ Failure Timeout ] -Bug(none) bluetooth/service/device-same-from-2-services.html [ Timeout ] -Bug(none) bluetooth/service/device-same-object.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristic/characteristic-found.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristic/gen-characteristic-not-found.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristic/gen-get-same-object.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristic/gen-reconnect-during.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/blocklisted-characteristics.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/characteristics-found-with-uuid.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/characteristics-found.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/characteristics-not-found.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/gen-get-same-object.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.html [ Timeout ] -Bug(none) bluetooth/service/getCharacteristics/gen-reconnect-during.html [ Timeout ] Bug(none) compositing/video-frame-size-change.html [ Timeout ] Bug(none) external/wpt/clear-site-data/storage.https.html [ Failure ] Bug(none) external/wpt/fetch/api/abort/general-serviceworker.https.html [ Failure ] @@ -108,12 +8,7 @@ Bug(none) external/wpt/FileAPI/historical.https.html [ Crash Failure Timeout ] Bug(none) external/wpt/XMLHttpRequest/event-upload-progress-crossorigin.htm [ Failure ] Bug(none) external/wpt/XMLHttpRequest/event-upload-progress.htm [ Failure ] -Bug(none) external/wpt/XMLHttpRequest/formdata-blob.htm [ Failure ] -Bug(none) external/wpt/XMLHttpRequest/formdata.htm [ Failure ] -Bug(none) external/wpt/XMLHttpRequest/overridemimetype-blob.html [ Failure ] Bug(none) external/wpt/XMLHttpRequest/send-accept.htm [ Failure ] -Bug(none) external/wpt/XMLHttpRequest/send-blob-with-no-mime-type.html [ Failure ] -Bug(none) external/wpt/XMLHttpRequest/send-data-blob.htm [ Failure ] Bug(none) external/wpt/XMLHttpRequest/send-redirect-post-upload.htm [ Failure ] Bug(none) external/wpt/XMLHttpRequest/send-response-upload-event-loadend.htm [ Timeout ] Bug(none) external/wpt/XMLHttpRequest/send-response-upload-event-progress.htm [ Timeout ] @@ -430,11 +325,7 @@ Bug(none) http/tests/loading/307-after-303-after-post.html [ Failure ] Bug(none) http/tests/loading/doc-write-sync-third-party-script-reload.html [ Crash ] Bug(none) http/tests/loading/bad-scheme-subframe.html [ Failure ] -Bug(none) http/tests/local/blob/send-data-blob.html [ Failure ] -Bug(none) http/tests/local/blob/send-hybrid-blob.html [ Failure ] -Bug(none) http/tests/local/blob/send-sliced-data-blob.html [ Failure ] Bug(none) http/tests/local/fileapi/send-sliced-dragged-file.html [ Failure ] -Bug(none) http/tests/local/formdata/formdata-methods.html [ Failure ] Bug(none) http/tests/local/formdata/send-form-data-with-sliced-file.html [ Failure ] Bug(none) http/tests/local/formdata/upload-events.html [ Failure ] Bug(none) http/tests/local/serviceworker/fetch-request-body-file.html [ Crash Timeout ] @@ -561,9 +452,8 @@ Bug(none) http/tests/websocket/httponly-cookie.pl [ Failure ] Bug(none) http/tests/xmlhttprequest/access-control-preflight-request-must-not-contain-cookie.html [ Failure ] Bug(none) http/tests/xmlhttprequest/filename-encoding.html [ Failure ] -Bug(none) http/tests/xmlhttprequest/post-formdata.html [ Failure ] +Bug(none) http/tests/xmlhttprequest/simple-cross-origin-progress-events.html [ Failure Pass ] Bug(none) http/tests/xmlhttprequest/upload-onprogress-event.html [ Failure ] -Bug(none) http/tests/xmlhttprequest/workers/post-formdata.html [ Failure ] Bug(none) http/tests/xmlhttprequest/workers/upload-onprogress-event.html [ Failure ] Bug(none) http/tests/xmlhttprequest/xmlhttprequest-data-url.html [ Failure ] Bug(none) http/tests/xmlhttprequest/upload-onload-event.html [ Timeout ] @@ -579,16 +469,134 @@ Bug(none) installedapp/getinstalledrelatedapps-empty.html [ Timeout ] Bug(none) installedapp/getinstalledrelatedapps.html [ Timeout ] Bug(none) plugins/iframe-plugin-bgcolor.html [ Timeout ] -Bug(none) presentation/presentation-controller-close-connection.html [ Timeout ] -Bug(none) presentation/presentation-controller-connection-closed-by-receiver.html [ Timeout ] -Bug(none) presentation/presentation-controller-terminate-connection.html [ Timeout ] -Bug(none) presentation/presentation-onreceiverconnection.html [ Timeout ] -Bug(none) presentation/presentation-receiver-terminate-connection.html [ Timeout ] -Bug(none) presentation/presentation-reconnect.html [ Timeout ] -Bug(none) presentation/presentation-start-error.html [ Timeout ] -Bug(none) presentation/presentation-start.html [ Timeout ] -Bug(none) presentation/presentationconnectionavailableevent-ctor-mock.html [ Timeout ] Bug(none) virtual [ Crash Failure Timeout ] -Bug(none) http/tests/xmlhttprequest/simple-cross-origin-progress-events.html [ Failure Pass ] +crbug.com/761117 external/wpt/XMLHttpRequest/formdata-blob.htm [ Failure ] +crbug.com/761117 external/wpt/XMLHttpRequest/formdata.htm [ Failure ] +crbug.com/761117 external/wpt/XMLHttpRequest/send-blob-with-no-mime-type.html [ Failure ] +crbug.com/761117 external/wpt/XMLHttpRequest/send-data-blob.htm [ Failure ] +crbug.com/761117 external/wpt/XMLHttpRequest/overridemimetype-blob.html [ Failure ] +crbug.com/761117 http/tests/local/blob/send-data-blob.html [ Failure ] +crbug.com/761117 http/tests/local/blob/send-hybrid-blob.html [ Failure ] +crbug.com/761117 http/tests/local/blob/send-sliced-data-blob.html [ Failure ] +crbug.com/761117 http/tests/local/formdata/formdata-methods.html [ Failure ] +crbug.com/761117 http/tests/xmlhttprequest/post-formdata.html [ Failure ] +crbug.com/761117 http/tests/xmlhttprequest/workers/post-formdata.html [ Failure ] + +# The next three sections are blocked by converting to new Mojo JS APIs. + +# TODO(reillyg): https://chromium-review.googlesource.com/c/chromium/src/+/579791 +crbug.com/758675 battery-status/api-defined.html [ Timeout ] +crbug.com/758675 battery-status/multiple-promises-after-resolve.html [ Timeout ] +crbug.com/758675 battery-status/multiple-promises.html [ Timeout ] +crbug.com/758675 battery-status/multiple-windows-page-visibility.html [ Timeout ] +crbug.com/758675 battery-status/multiple-windows.html [ Timeout ] +crbug.com/758675 battery-status/no-gc-with-eventlisteners.html [ Timeout ] +crbug.com/758675 battery-status/page-visibility.html [ Timeout ] +crbug.com/758675 battery-status/promise-with-eventlisteners.html [ Timeout ] +crbug.com/758675 battery-status/restricted-level-precision.html [ Timeout ] + +# TODO(conleyo) +crbug.com/758675 bluetooth/characteristic/characteristicProperties.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/getDescriptor/gen-characteristic-is-removed.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/getDescriptor/gen-descriptor-get-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/getDescriptors/gen-descriptor-get-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/readValue/add-multiple-event-listeners.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/readValue/event-is-fired.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/readValue/gen-characteristic-is-removed.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/readValue/gen-gatt-op-garbage-collection-ran-during-error.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/readValue/read-succeeds.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/readValue/read-updates-value.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/writeValue/write-succeeds.html [ Timeout ] +crbug.com/758675 bluetooth/characteristic/writeValue/gen-characteristic-is-removed.html [ Timeout ] +crbug.com/758675 bluetooth/descriptor/readValue/read-succeeds.html [ Timeout ] +crbug.com/758675 bluetooth/idl/idl-BluetoothDevice.html [ Timeout ] +crbug.com/758675 bluetooth/requestDevice [ Timeout ] +crbug.com/758675 bluetooth/server/connect/connection-succeeds.html [ Timeout ] +crbug.com/758675 bluetooth/server/connect/garbage-collection-ran-during-success.html [ Timeout ] +crbug.com/758675 bluetooth/server/connect/get-same-gatt-server.html [ Timeout ] +crbug.com/758675 bluetooth/server/device-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-disconnect-called-before.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-disconnected-device.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-get-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-invalid-service-name.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-no-permission-absent-service.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-no-permission-present-service.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/gen-service-not-found.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/service-found.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryService/two-iframes-from-same-origin.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/blocklisted-services-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/blocklisted-services.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/correct-services.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-called-before.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-disconnected-device.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-get-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-invalid-service-name.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.html [ Failure Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/services-found-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/services-found.html [ Timeout ] +crbug.com/758675 bluetooth/server/getPrimaryServices/services-not-found.html [ Failure Timeout ] +crbug.com/758675 bluetooth/service/device-same-from-2-services.html [ Timeout ] +crbug.com/758675 bluetooth/service/device-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristic/characteristic-found.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristic/gen-characteristic-not-found.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristic/gen-get-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristic/gen-reconnect-during.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/blocklisted-characteristics.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/characteristics-found-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/characteristics-found.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/characteristics-not-found.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/gen-get-same-object.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.html [ Timeout ] +crbug.com/758675 bluetooth/service/getCharacteristics/gen-reconnect-during.html [ Timeout ] + +# TODO(reillyg): https://chromium-review.googlesource.com/c/chromium/src/+/597309 +crbug.com/758675 presentation/presentation-controller-close-connection.html [ Timeout ] +crbug.com/758675 presentation/presentation-controller-connection-closed-by-receiver.html [ Timeout ] +crbug.com/758675 presentation/presentation-controller-terminate-connection.html [ Timeout ] +crbug.com/758675 presentation/presentation-onreceiverconnection.html [ Timeout ] +crbug.com/758675 presentation/presentation-receiver-terminate-connection.html [ Timeout ] +crbug.com/758675 presentation/presentation-reconnect.html [ Timeout ] +crbug.com/758675 presentation/presentation-start-error.html [ Timeout ] +crbug.com/758675 presentation/presentation-start.html [ Timeout ] +crbug.com/758675 presentation/presentationconnectionavailableevent-ctor-mock.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests index b21f818..2555721 100644 --- a/third_party/WebKit/LayoutTests/NeverFixTests +++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -152,9 +152,6 @@ # Failing WPT using ch unit in vertical orientation crbug.com/759914 external/wpt/css/css-values-3/ch-unit-002.html [ WontFix ] -# Failing CSS values WPT needs waitUntilDone -crbug.com/759921 external/wpt/css/css-values-3/vh_not_refreshing_on_chrome.html [ WontFix ] - # Media queries do not support calc() for internal CSS length values crbug.com/421909 external/wpt/css/css-values-3/calc-in-media-queries-001.html [ WontFix ] crbug.com/421909 external/wpt/css/css-values-3/calc-in-media-queries-002.html [ WontFix ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 46fec47..cebbade4 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -685,6 +685,7 @@ crbug.com/326139 crbug.com/390125 media/video-frame-accurate-seek.html [ Failure Pass ] crbug.com/248938 virtual/threaded/animations/stability/animation-iteration-event-destroy-renderer.html [ Pass Timeout ] crbug.com/248938 virtual/threaded/animations/dynamic-stylesheet-loading.html [ Pass Failure Timeout ] +crbug.com/248938 [ Win7 Debug ] virtual/threaded/animations/display-none-terminates-animation.html [ Pass Failure ] crbug.com/421283 html/marquee/marquee-scrollamount.html [ Pass Failure ] # TODO(oshima): Mac Android are currently not supported. @@ -1744,8 +1745,10 @@ crbug.com/751952 virtual/mojo-loading/http/tests/inspector-unit/datagrid-editable-longtext.js [ Pass Failure ] crbug.com/751952 virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed/budget-api-origin-trial-interfaces.html [ Pass Failure ] crbug.com/751952 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/link-element-register-security-error.https.html [ Pass Failure ] +crbug.com/761952 virtual/outofblink-cors/external/wpt/service-workers/service-worker/link-element-register-security-error.https.html [ Failure Pass ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 external/wpt/payment-request/updateWith-method-pmi-handling-manual.https.html [ Skip ] crbug.com/626703 external/wpt/audio-output/setSinkId-manual.https.html [ Skip ] crbug.com/626703 external/wpt/payment-request/payment-response/complete-method-manual.https.html [ Skip ] crbug.com/626703 external/wpt/payment-request/payment-response/methodName-attribute-manual.https.html [ Skip ] @@ -1920,6 +1923,7 @@ crbug.com/626703 external/wpt/html/webappapis/idle-callbacks/cancel-invoked.html [ Timeout ] crbug.com/626703 external/wpt/html/webappapis/scripting/events/contextmenu-event-manual.htm [ Timeout ] crbug.com/626703 external/wpt/http/basic-auth-cache-test.html [ Timeout ] +crbug.com/626703 virtual/outofblink-cors/external/wpt/http/basic-auth-cache-test.html [ Timeout ] crbug.com/626703 external/wpt/IndexedDB/request-abort-ordering.html [ Pass Failure ] crbug.com/626703 external/wpt/media-source/mediasource-avtracks.html [ Failure Crash ] crbug.com/626703 external/wpt/media-source/mediasource-getvideoplaybackquality.html [ Timeout Failure ] @@ -1949,6 +1953,7 @@ crbug.com/626703 external/wpt/secure-contexts/shared-worker-secure-first.https.html [ Timeout ] crbug.com/626703 external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] crbug.com/626703 virtual/mojo-blobs/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] +crbug.com/626703 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] crbug.com/626703 external/wpt/streams/readable-streams/general.html [ Failure Timeout ] crbug.com/626703 external/wpt/svg/linking/reftests/href-filter-element.html [ Failure ] crbug.com/626703 external/wpt/wasm/wasm_indexeddb_test.html [ Timeout ] @@ -2422,11 +2427,13 @@ crbug.com/602693 external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Timeout ] crbug.com/602693 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Timeout ] crbug.com/602693 virtual/mojo-blobs/external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Timeout ] +crbug.com/602693 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-frame-resource.https.html [ Timeout ] # This test requires a special browser flag and seems not suitable for a wpt test, see bug. crbug.com/691944 external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] crbug.com/691944 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] crbug.com/691944 virtual/mojo-blobs/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] +crbug.com/691944 virtual/outofblink-cors/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ] # These tests (erroneously) see a platform-specific User-Agent header crbug.com/595993 external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ] @@ -2435,6 +2442,8 @@ crbug.com/595993 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] crbug.com/595993 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] crbug.com/595993 virtual/mojo-blobs/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] +crbug.com/595993 virtual/outofblink-cors/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] +crbug.com/595993 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ] crbug.com/619427 [ Mac Linux ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ] @@ -2745,7 +2754,6 @@ crbug.com/681468 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Failure Pass ] crbug.com/681468 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Failure Pass ] crbug.com/681468 [ Win ] virtual/scalefactor150/fast/hidpi/static/data-suggestion-picker-appearance.html [ Failure Pass Timeout ] -crbug.com/681468 [ Win ] virtual/scalefactor200/fast/hidpi/static/data-suggestion-picker-appearance.html [ Failure Pass Timeout ] crbug.com/681468 [ Win ] virtual/scalefactor200withzoom/fast/hidpi/static/data-suggestion-picker-appearance.html [ Failure Pass Timeout ] crbug.com/683800 [ Win7 Debug ] external/wpt/selection/ [ Failure Pass ] @@ -2785,6 +2793,7 @@ crbug.com/688486 external/wpt/service-workers/service-worker/fetch-request-resources.https.html [ Failure Pass ] crbug.com/688486 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/fetch-request-resources.https.html [ Failure Pass ] crbug.com/688486 virtual/mojo-blobs/external/wpt/service-workers/service-worker/fetch-request-resources.https.html [ Failure Pass ] +crbug.com/688486 virtual/outofblink-cors/external/wpt/service-workers/service-worker/fetch-request-resources.https.html [ Failure Pass ] # Sheriff failures 2017-02-21 crbug.com/73609 http/tests/media/video-play-stall.html [ Pass Timeout ] @@ -3633,3 +3642,10 @@ crbug.com/760543 [ Linux Release ] virtual/mojo-loading/http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidator-invalidations.html [ Pass Timeout ] crbug.com/760543 [ Linux Release ] virtual/mojo-loading/http/tests/devtools/tracing/timeline-misc/timeline-event-causes.html [ Pass Timeout ] crbug.com/760543 [ Linux Release ] virtual/mojo-loading/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations-on-deleted-node.html [ Pass Timeout ] + +# Tests crashing or timing out on WebKit Linux Trusty ASAN +crbug.com/760904 [ Linux Release ] svg/as-image/svg-nested.html [ Pass Crash Timeout ] + +# Tests failing on WebKit Mac10.11, WebKit Mac10.10, WebKit Mac10.9 +crbug.com/760967 [ Mac ] external/wpt/payment-request/payment-request-constructor.https.html [ Pass Failure ] +crbug.com/760967 [ Mac ] external/wpt/payment-request/payment-request-ctor-pmi-handling.https.html [ Pass Failure ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites index 95bf3d9..030838a 100644 --- a/third_party/WebKit/LayoutTests/VirtualTestSuites +++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -484,6 +484,26 @@ "args": ["--enable-features=OutOfBlinkCORS,LoadingWithMojo"] }, { + "prefix": "outofblink-cors", + "base": "external/wpt/http", + "args": ["--enable-features=OutOfBlinkCORS,LoadingWithMojo"] + }, + { + "prefix": "outofblink-cors", + "base": "external/wpt/referrer-policy", + "args": ["--enable-features=OutOfBlinkCORS,LoadingWithMojo"] + }, + { + "prefix": "outofblink-cors", + "base": "external/wpt/service-workers", + "args": ["--enable-features=OutOfBlinkCORS,LoadingWithMojo"] + }, + { + "prefix": "outofblink-cors", + "base": "http/tests/xmlhttprequest", + "args": ["--enable-features=OutOfBlinkCORS,LoadingWithMojo"] + }, + { "prefix": "presentation", "base": "receiver", "args": ["--force-presentation-receiver-for-testing"] @@ -507,5 +527,10 @@ "prefix": "mojo-blobs", "base": "fast/files", "args": ["--enable-features=MojoBlobs"] + }, + { + "prefix": "longtask-v2", + "base": "http/tests/performance-timing/longtask-v2", + "args": ["--enable-features=LongTaskV2"] } ]
diff --git a/third_party/WebKit/LayoutTests/accessibility/aom-actions.html b/third_party/WebKit/LayoutTests/accessibility/aom-actions.html index 743465c..23ed494 100644 --- a/third_party/WebKit/LayoutTests/accessibility/aom-actions.html +++ b/third_party/WebKit/LayoutTests/accessibility/aom-actions.html
@@ -240,3 +240,115 @@ }); }, "AOM event bubbling respects aria-owns over DOM parent chain"); </script> + +<button id="context_menu_target">Context Menu Target</button> + +<script> +async_test(function(t) { + enableAccessibilityEventsPermission().then(function() { + var target = document.getElementById("context_menu_target"); + var axTarget = accessibilityController.accessibleElementById("context_menu_target"); + + var gotDOMEvent = false; + target.addEventListener("contextmenu", function(event) { + event.preventDefault(); + gotDOMEvent = true; + }); + var gotAccessibleEvent = false; + target.accessibleNode.onaccessiblecontextmenu = function() { + gotAccessibleEvent = true; + }; + axTarget.showMenu(); + + assert_true(gotAccessibleEvent); + assert_true(gotDOMEvent); + t.done(); + }); +}, "AccessibleNode.onaccessiblecontextmenu"); +</script> + +<input type=range min=1 max=5 value=3 id="decrement_target"> + +<script> +async_test(function(t) { + enableAccessibilityEventsPermission().then(function() { + var target = document.getElementById("decrement_target"); + var axTarget = accessibilityController.accessibleElementById("decrement_target"); + + var gotAccessibleEvent = false; + target.accessibleNode.onaccessibledecrement = function() { + gotAccessibleEvent = true; + }; + axTarget.decrement(); + + assert_true(gotAccessibleEvent); + assert_equals(target.value, "2"); + t.done(); + }); +}, "AccessibleNode.onaccessibledecrement"); +</script> + +<input type=range min=1 max=5 value=3 id="increment_target"> + +<script> +async_test(function(t) { + enableAccessibilityEventsPermission().then(function() { + var target = document.getElementById("increment_target"); + var axTarget = accessibilityController.accessibleElementById("increment_target"); + + var gotAccessibleEvent = false; + target.accessibleNode.onaccessibleincrement = function() { + gotAccessibleEvent = true; + }; + axTarget.increment(); + + assert_true(gotAccessibleEvent); + assert_equals(target.value, "4"); + t.done(); + }); +}, "AccessibleNode.onaccessibleincrement"); +</script> + +<input id="focus_target"> + +<script> +async_test(function(t) { + enableAccessibilityEventsPermission().then(function() { + var target = document.getElementById("focus_target"); + var axTarget = accessibilityController.accessibleElementById("focus_target"); + + var gotAccessibleEvent = false; + target.accessibleNode.onaccessiblefocus = function() { + gotAccessibleEvent = true; + }; + axTarget.takeFocus(); + + assert_true(gotAccessibleEvent); + assert_equals(document.activeElement, target); + t.done(); + }); +}, "AccessibleNode.onaccessiblefocus"); +</script> + +<input id="scroll_target" style="margin-top: 1000px;"> + +<script> +async_test(function(t) { + enableAccessibilityEventsPermission().then(function() { + var target = document.getElementById("scroll_target"); + var axTarget = accessibilityController.accessibleElementById("scroll_target"); + + var oldY = window.pageYOffset; + + var gotAccessibleEvent = false; + target.accessibleNode.onaccessiblescrollintoview = function() { + gotAccessibleEvent = true; + }; + axTarget.scrollToMakeVisible(); + + assert_true(gotAccessibleEvent); + assert_true(window.pageYOffset > oldY); + t.done(); + }); +}, "AccessibleNode.onaccessiblescroll"); +</script>
diff --git a/third_party/WebKit/LayoutTests/accessibility/ignore-spacer-elements-expected.txt b/third_party/WebKit/LayoutTests/accessibility/ignore-spacer-elements-expected.txt deleted file mode 100644 index 7453d17..0000000 --- a/third_party/WebKit/LayoutTests/accessibility/ignore-spacer-elements-expected.txt +++ /dev/null
@@ -1,3 +0,0 @@ -First Second Apple Yahoo -Test passed -
diff --git a/third_party/WebKit/LayoutTests/accessibility/ignore-spacer-elements.html b/third_party/WebKit/LayoutTests/accessibility/ignore-spacer-elements.html deleted file mode 100644 index 5fb791dd..0000000 --- a/third_party/WebKit/LayoutTests/accessibility/ignore-spacer-elements.html +++ /dev/null
@@ -1,38 +0,0 @@ -<html> -<script> - if (window.testRunner) - testRunner.dumpAsText(); -</script> -<body id="body"> - - <!-- This test makes sure that spacer elements are not returned as elements. There should be at most 4 elements returned --> - -<div role="group" id="container"> - <b>First</b> - <b>Second</b> - <a href="http://www.apple.com">Apple</a> - <a href="http://www.yahoo.com">Yahoo</a> -</div> - - - <div id="result"></div> - - - <script> - if (window.accessibilityController) { - var result = document.getElementById("result"); - - var body = document.getElementById("body"); - body.focus(); - var container = accessibilityController.accessibleElementById("container"); - - if (container.childrenCount == 4) { - result.innerText += "Test passed\n"; - } - else { - result.innerText += "Test failed\n"; - } - } - </script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/accessibility/role-attribute-expected.txt b/third_party/WebKit/LayoutTests/accessibility/role-attribute-expected.txt index 6f884f60..3e20f74 100644 --- a/third_party/WebKit/LayoutTests/accessibility/role-attribute-expected.txt +++ b/third_party/WebKit/LayoutTests/accessibility/role-attribute-expected.txt
@@ -46,6 +46,8 @@ AXRole: AXMenuListOption "Implicit dropdown 1" AXRole: AXMenuListOption "Implicit dropdown 2" AXRole: AXStatus + AXRole: AXStaticText " " + AXRole: AXInlineTextBox " " AXRole: AXProgressIndicator AXRole: AXStatus AXRole: AXSliderThumb
diff --git a/third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html b/third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html index 8c3f2d3d..483a29e 100644 --- a/third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html +++ b/third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html
@@ -52,7 +52,7 @@ assert_equals(sel.startContainer.textContent, "this is a"); // Select the second child. - axRegion.setSelection(axRegion, 1, axRegion, 2); + axRegion.setSelection(axRegion, 1, axRegion, 3); updateSelectedRangeFromPage(); assert_equals(sel.toString(), "test\n"); assert_false(sel.collapsed); @@ -65,7 +65,7 @@ assert_equals(sel.endContainer.textContent, "\n "); // Next, another insertion point between second and third child. - axRegion.setSelection(axRegion, 2, axRegion, 2); + axRegion.setSelection(axRegion, 3, axRegion, 3); updateSelectedRangeFromPage(); assert_equals(sel.toString(), ""); assert_true(sel.collapsed); @@ -74,7 +74,7 @@ assert_equals(sel.startContainer.textContent, "\n "); // Select the third child. - axRegion.setSelection(axRegion, 2, axRegion, 3); + axRegion.setSelection(axRegion, 3, axRegion, 4); updateSelectedRangeFromPage(); assert_equals(sel.toString(), "of selection"); assert_false(sel.collapsed); @@ -86,7 +86,7 @@ assert_equals(sel.endContainer.textContent, "of selection"); // Select the first and second children. - axRegion.setSelection(axRegion, 0, axRegion, 2); + axRegion.setSelection(axRegion, 0, axRegion, 3); updateSelectedRangeFromPage(); assert_equals(sel.toString(), "this is atest\n"); assert_false(sel.collapsed); @@ -98,7 +98,7 @@ assert_equals(sel.endContainer.textContent, "\n "); // Select the second and third children. - axRegion.setSelection(axRegion, 1, axRegion, 3); + axRegion.setSelection(axRegion, 1, axRegion, 4); updateSelectedRangeFromPage(); assert_equals(sel.toString(), "test\n of selection"); assert_false(sel.collapsed); @@ -110,7 +110,7 @@ assert_equals(sel.endContainer.textContent, "of selection"); // Select everything. - axRegion.setSelection(axRegion, 0, axRegion, 3); + axRegion.setSelection(axRegion, 0, axRegion, 4); updateSelectedRangeFromPage(); assert_equals(sel.toString(), "this is atest\n of selection"); assert_false(sel.collapsed); @@ -122,7 +122,7 @@ assert_equals(sel.endContainer.textContent, "of selection"); // Last, the insertion point after third child. - axRegion.setSelection(axRegion, 3, axRegion, 3); + axRegion.setSelection(axRegion, 4, axRegion, 4); updateSelectedRangeFromPage(); assert_equals(sel.toString(), ""); assert_true(sel.collapsed);
diff --git a/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt b/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt index 12f22de5..5f6bd009 100644 --- a/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 2513], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [0, 200], "bounds": [100, 100], - "contentsOpaque": true, - "drawsContent": true + "contentsOpaque": true } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background-expected.html b/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background-expected.html new file mode 100644 index 0000000..70db7e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background-expected.html
@@ -0,0 +1,4 @@ +<!DOCTYPE html> +<body style="background: rgb(127, 127, 191)"> + The view's background should blend the white base background and <body>'s background. +</body>
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background-expected.txt similarity index 78% rename from third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt rename to third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background-expected.txt index f700373f..74382eb 100644 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#7F7FBF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background.html b/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background.html new file mode 100644 index 0000000..aa1d4df2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/background-color/view-blending-base-background.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<script> +onload = function() { + if (window.testRunner && window.internals) + testRunner.setCustomTextOutput(internals.layerTreeAsText(document)); +} +</script> +<body style="background: rgba(0, 0, 128, 0.5)"> + The view's background should blend the white base background and <body>'s background. +</body>
diff --git a/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt index bae49e2..a14e8f4 100644 --- a/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='container'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt b/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt index 73a3dac..1e94afca 100644 --- a/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [1600, 585], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited box'", "position": [818, 145], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt index 268fecb..33591cd 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt
@@ -4,28 +4,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='box composited'", "position": [13, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutBlockFlow DIV class='box composited padding-clip'", "position": [13, 113], "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutBlockFlow DIV class='box composited content-clip'", "position": [13, 218], "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt index 24add97..9b4dc01 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt
@@ -4,18 +4,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='box composited'", "position": [8, 8], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='box translucent composited'", "position": [8, 108], "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF0080" }, { @@ -23,7 +23,6 @@ "position": [8, 208], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt index 4a25a1e..4574e6f 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt
@@ -4,13 +4,11 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "LayoutBlockFlow HTML", "bounds": [800, 600], - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { @@ -18,13 +16,11 @@ "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt index eef1b05..d3b7bdbe 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt
@@ -4,26 +4,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] }, { "name": "LayoutBlockFlow (positioned) DIV id='underbody'", "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt index 3a877dd..5a6eab2b 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt
@@ -4,19 +4,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container-box'", "position": [-18, -18], - "bounds": [157, 157], - "drawsContent": true + "bounds": [157, 157] }, { "name": "LayoutBlockFlow DIV class='composited container-box'", "position": [10, 120], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt index f96ad93..ab76b32 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='caption'", "position": [8, 13], "bounds": [200, 100], - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt index 0691b6f30..d47930c 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt
@@ -5,13 +5,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='caption'", "position": [8, 13], "bounds": [200, 100], - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt index 2bb3d74f..fe35ad16 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='box opaque-background translucent composited'", @@ -12,7 +12,6 @@ "bounds": [100, 100], "opacity": 0.5, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt index 4ec408f..88fe6ba 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='box'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 }
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt index d35d7c2b..bbb85dff 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='box'", "position": [39, 31], "bounds": [138, 138], - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt index 0ec9d9e..6546391 100644 --- a/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt
@@ -4,42 +4,37 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-simple'", "position": [13, 8], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-transparent-background'", "position": [13, 73], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00FF0080" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-padding'", "position": [13, 138], "bounds": [60, 60], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-border'", "position": [13, 203], "bounds": [60, 60], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-image'", "position": [13, 268], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -47,21 +42,18 @@ "position": [13, 333], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-opaque-border'", "position": [13, 398], "bounds": [60, 60], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-opaque-box-shadow'", "position": [13, 463], "bounds": [60, 60], - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt index 2f3c662..4cd3e7c 100644 --- a/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt
@@ -4,42 +4,37 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-simple'", "position": [13, 8], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-padding'", "position": [13, 73], "bounds": [60, 60], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-border'", "position": [13, 138], "bounds": [60, 60], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-image'", "position": [13, 203], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutHTMLCanvas CANVAS id='canvas-transparent-background'", "position": [13, 268], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00FF0080" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt index 6ea9019..cd8a6d05 100644 --- a/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -4,23 +4,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='composited'", "position": [105, 105], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#000000" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='software')", - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt index 11e9b69..ad968a87 100644 --- a/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt
@@ -4,19 +4,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-parent'", "position": [230, 230], "bounds": [200, 200], - "drawsContent": true, "backgroundColor": "#000000" }, { "name": "LayoutBlockFlow (positioned) DIV id='software-parent'", "bounds": [200, 200], - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt index 4b24a89..948861d 100644 --- a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt
@@ -4,21 +4,19 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited'", "position": [105, 105], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#000000" }, { "name": "LayoutBlockFlow (positioned) DIV id='software'", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt index 777f81c..6277a2f9 100644 --- a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt
@@ -4,21 +4,19 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited'", "position": [130, 130], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#000000" }, { "name": "LayoutBlockFlow (positioned) DIV id='software'", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt b/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt index e8f62f7b..4e8300b7 100644 --- a/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt
@@ -1,53 +1,62 @@ { "layers": [ { - "name": "Root Transform Layer" + "name": "Root Transform Layer", + "drawsContent": false }, { "name": "Inner Viewport Container Layer", - "bounds": [800, 600] + "bounds": [800, 600], + "drawsContent": false }, { - "name": "Overscroll Elasticity Layer" + "name": "Overscroll Elasticity Layer", + "drawsContent": false }, { - "name": "Page Scale Layer" + "name": "Page Scale Layer", + "drawsContent": false }, { "name": "Inner Viewport Scroll Layer", - "bounds": [800, 600] + "bounds": [800, 600], + "drawsContent": false }, { "name": "Frame Overflow Controls Host Layer", - "bounds": [800, 600] + "bounds": [800, 600], + "drawsContent": false }, { "name": "Frame Clipping Layer", - "bounds": [785, 600] + "bounds": [785, 600], + "drawsContent": false }, { "name": "LayoutView #document (background) Layer", "bounds": [785, 600], - "contentsOpaque": true, - "drawsContent": true + "contentsOpaque": true }, { - "name": "Frame Scrolling Layer" + "name": "Frame Scrolling Layer", + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [785, 3700] + "bounds": [785, 3700], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [785, 3700], - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [785, 0], "bounds": [15, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt index 8249a94..af7f75c0 100644 --- a/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -4,25 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#402B3C" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [8, 13], "bounds": [150, 150], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D9CCA7" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='layer-A')", "position": [20, 20], - "bounds": [226, 180], - "drawsContent": true + "bounds": [226, 180] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt index 95b1f90..c1757ed3 100644 --- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt index 95b1f90..c1757ed3 100644 --- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt index e8029334..1edd2b8fd 100644 --- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
@@ -5,54 +5,57 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='parent-iframe'", "position": [8, 8], - "bounds": [154, 154], - "drawsContent": true + "bounds": [154, 154] }, { "name": "Frame Overflow Controls Host Layer", "position": [10, 10], - "bounds": [150, 150] + "bounds": [150, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [10, 10], - "bounds": [135, 135] + "bounds": [135, 135], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [10, 10] + "position": [10, 10], + "drawsContent": false }, { "name": "Content Root Layer", "position": [10, 10], - "bounds": [508, 516] + "bounds": [508, 516], + "drawsContent": false }, { "name": "LayoutView #document", "position": [10, 10], - "bounds": [508, 516], - "drawsContent": true + "bounds": [508, 516] }, { "name": "Frame Horizontal Scrollbar Layer", "position": [10, 145], - "bounds": [135, 15] + "bounds": [135, 15], + "drawsContent": false }, { "name": "Frame Vertical Scrollbar Layer", "position": [145, 10], - "bounds": [15, 135] + "bounds": [15, 135], + "drawsContent": false }, { "name": "Frame Scroll Corner Layer", "position": [145, 145], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt index e53be9e7..e90369be 100644 --- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
@@ -5,54 +5,57 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='iframe'", "position": [8, 8], - "bounds": [154, 154], - "drawsContent": true + "bounds": [154, 154] }, { "name": "Frame Overflow Controls Host Layer", "position": [10, 10], - "bounds": [150, 150] + "bounds": [150, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [10, 10], - "bounds": [135, 135] + "bounds": [135, 135], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [10, 10] + "position": [10, 10], + "drawsContent": false }, { "name": "Content Root Layer", "position": [10, 10], - "bounds": [508, 516] + "bounds": [508, 516], + "drawsContent": false }, { "name": "LayoutView #document", "position": [10, 10], - "bounds": [508, 516], - "drawsContent": true + "bounds": [508, 516] }, { "name": "Frame Horizontal Scrollbar Layer", "position": [10, 145], - "bounds": [135, 15] + "bounds": [135, 15], + "drawsContent": false }, { "name": "Frame Vertical Scrollbar Layer", "position": [145, 10], - "bounds": [15, 135] + "bounds": [15, 135], + "drawsContent": false }, { "name": "Frame Scroll Corner Layer", "position": [145, 145], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt index a8a3401..3382920 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='box'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt index d2a762b..a3f3899 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='container'", "position": [58, 8], "bounds": [200, 100], - "drawsContent": true, "transform": 1 } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt index 3e076a9..2b9f6ea 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
@@ -5,20 +5,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [10, 10], - "bounds": [540, 240], - "drawsContent": true + "bounds": [540, 240] }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [10, 260], "bounds": [50, 50], - "contentsOpaque": true, - "drawsContent": true + "contentsOpaque": true } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt index 9effd29..8f0105f 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -6,33 +6,30 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", - "bounds": [500, 250], - "drawsContent": true + "bounds": [500, 250] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [0, 250], - "bounds": [150, 150], - "drawsContent": true + "bounds": [150, 150] }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow PRE id='layers')", - "bounds": [792, 100], - "drawsContent": true + "bounds": [792, 100] }, { "name": "LayoutBlockFlow (positioned) DIV class='indicator box'", "position": [0, 250], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt index eac675d7..d526f527 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt
@@ -5,14 +5,13 @@ "name": "LayoutView #document", "bounds": [44990, 15063], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [10, 10], "bounds": [50, 50], - "contentsOpaque": true, - "drawsContent": true + "contentsOpaque": true } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt index db2fc62..ff5571b 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt
@@ -6,26 +6,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box'", "position": [15, 15], "bounds": [110, 110], - "drawsContent": true, "backgroundColor": "#808080", "transform": 1 }, { "name": "Ancestor Clipping Layer", "position": [215, 15], - "bounds": [110, 110] + "bounds": [110, 110], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner'", "position": [-5, -5], "bounds": [120, 120], - "drawsContent": true, "backgroundColor": "#00000033", "transform": 2 }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt index f8e42b3..780816b 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt
@@ -6,27 +6,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box'", "position": [25, 35], "bounds": [90, 80], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 1 }, { "name": "Ancestor Clipping Layer", "position": [225, 35], - "bounds": [90, 80] + "bounds": [90, 80], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner'", "position": [-15, -25], "bounds": [120, 120], - "drawsContent": true, "backgroundColor": "#00000033", "transform": 2 }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt index 60a544d..82f5b1ea7c 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt
@@ -4,26 +4,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box'", "position": [15, 15], "bounds": [110, 110], - "drawsContent": true, "backgroundColor": "#808080", "transform": 1 }, { "name": "Ancestor Clipping Layer", "position": [215, 15], - "bounds": [110, 110] + "bounds": [110, 110], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner'", "position": [-5, -5], "bounds": [120, 120], - "drawsContent": true, "backgroundColor": "#00000033", "transform": 2 }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt index 8cbf1ed1..4cc608f2 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt
@@ -4,21 +4,19 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited flipped'", "position": [18, 10], "bounds": [250, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow DIV class='composited box'", "position": [53, 20], "bounds": [195, 100], - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt index 112fd0d..98ce953 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt
@@ -5,49 +5,48 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='main box'", "position": [19, 89], "bounds": [318, 318], - "drawsContent": true, "backgroundColor": "#FF0000" }, { "name": "LayoutBlockFlow (positioned) DIV class='negative child'", "position": [59, 59], "bounds": [50, 50], + "drawsContent": false, "transform": 1 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='main box' (foreground) Layer", "position": [19, 89], - "bounds": [318, 318], - "drawsContent": true + "bounds": [318, 318] }, { "name": "LayoutBlockFlow (relative positioned) DIV class='main box'", "position": [363, 19], "bounds": [318, 318], - "drawsContent": true, "backgroundColor": "#FF0000" }, { "name": "Child Containment Layer", "position": [422, 78], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='negative child'", "bounds": [50, 50], + "drawsContent": false, "transform": 2 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='main box' (foreground) Layer", "position": [422, 78], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] } ], "transforms": [
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt index 72b425a..702803d 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt
@@ -6,21 +6,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='compositing'", "position": [8, 8], - "bounds": [1, 1] + "bounds": [1, 1], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='test')", "position": [-9992, -1], - "bounds": [10100, 100], - "drawsContent": true + "bounds": [10100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt index e8671da..43d10d4 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt
@@ -5,21 +5,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='compositing'", "position": [29, 29], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')", "position": [-9971, 8], - "bounds": [10121, 142], - "drawsContent": true + "bounds": [10121, 142] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt index 3057116..26a4ae0 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt
@@ -5,21 +5,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='compositing'", "position": [29, 29], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')", "position": [-771, 8], - "bounds": [1200, 142], - "drawsContent": true + "bounds": [1200, 142] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt index 28e3e552..e68766f 100644 --- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt
@@ -5,21 +5,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='compositing'", "position": [129, 29], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')", "position": [-871, 8], - "bounds": [1221, 142], - "drawsContent": true + "bounds": [1221, 142] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt index 7e39dc7..e8071aa 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt
@@ -5,69 +5,73 @@ "name": "LayoutView #document", "bounds": [785, 1500], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME", "position": [20, 120], - "bounds": [284, 204], - "drawsContent": true + "bounds": [284, 204] }, { "name": "Frame Overflow Controls Host Layer", "position": [22, 122], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [22, 122], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [22, 122] + "position": [22, 122], + "drawsContent": false }, { "name": "Content Root Layer", "position": [22, 122], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "LayoutView #document", "position": [22, 122], - "bounds": [280, 200], - "drawsContent": true + "bounds": [280, 200] }, { "name": "LayoutIFrame IFRAME", "position": [30, 130], - "bounds": [252, 172], - "drawsContent": true + "bounds": [252, 172] }, { "name": "Frame Overflow Controls Host Layer", "position": [31, 131], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [31, 131], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [31, 131] + "position": [31, 131], + "drawsContent": false }, { "name": "Content Root Layer", "position": [31, 131], - "bounds": [250, 230] + "bounds": [250, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [31, 131], "bounds": [250, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -75,70 +79,73 @@ "position": [49, 141], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutIFrame IFRAME", "position": [20, 344], - "bounds": [284, 204], - "drawsContent": true + "bounds": [284, 204] }, { "name": "Frame Overflow Controls Host Layer", "position": [22, 346], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [22, 346], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [22, 346] + "position": [22, 346], + "drawsContent": false }, { "name": "Content Root Layer", "position": [22, 346], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "LayoutView #document", "position": [22, 346], - "bounds": [280, 200], - "drawsContent": true + "bounds": [280, 200] }, { "name": "LayoutIFrame IFRAME", "position": [30, 354], - "bounds": [252, 172], - "drawsContent": true + "bounds": [252, 172] }, { "name": "Frame Overflow Controls Host Layer", "position": [31, 355], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [31, 355], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [31, 355] + "position": [31, 355], + "drawsContent": false }, { "name": "Content Root Layer", "position": [31, 355], - "bounds": [250, 230] + "bounds": [250, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [31, 355], "bounds": [250, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -146,14 +153,12 @@ "position": [49, 365], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutBlockFlow DIV id='box' class='composited'", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt index 12fa4404..acbfd15 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (floating) IFRAME id='iframe'", "position": [58, 58], - "bounds": [350, 200], - "drawsContent": true + "bounds": [350, 200] }, { "name": "Frame Overflow Controls Host Layer", "position": [73, 73], - "bounds": [320, 170] + "bounds": [320, 170], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [73, 73], - "bounds": [305, 170] + "bounds": [305, 170], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [73, 73] + "position": [73, 73], + "drawsContent": false }, { "name": "Content Root Layer", "position": [73, 73], - "bounds": [305, 230] + "bounds": [305, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [73, 73], "bounds": [305, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,19 +46,18 @@ "position": [91, 83], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [378, 73], - "bounds": [15, 170] + "bounds": [15, 170], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='overlay'", "position": [5, 5], "bounds": [150, 150], - "drawsContent": true, "backgroundColor": "#00000099" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt index f21be61..36a7222 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME", "position": [-11, -11], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [23, 23], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [23, 23], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [23, 23] + "position": [23, 23], + "drawsContent": false }, { "name": "Content Root Layer", "position": [23, 23], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [23, 23], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,13 +46,13 @@ "position": [41, 33], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [308, 23], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt index 77f781f..f61877e 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -7,38 +7,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='iframe'", "position": [9, 109], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 143], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 143], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 143] + "position": [43, 143], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 143], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 143], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -46,20 +48,19 @@ "position": [61, 153], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 143], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='box' class='composited'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt index f972f25..2686d7a8 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='parent-iframe'", "position": [9, 9], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,19 +46,18 @@ "position": [61, 53], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 43], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "position": [5, 5], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00000033" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt index d3754d5..ee29868 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='iframe' class='composited'", "position": [9, 9], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,19 +46,18 @@ "position": [61, 53], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 43], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "position": [5, 5], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00000033" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt index 51ee5a7..aa42f3f 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='iframe' class='composited'", "position": [9, 9], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,13 +46,13 @@ "position": [61, 53], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 43], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt index f972f25..2686d7a8 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='parent-iframe'", "position": [9, 9], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,19 +46,18 @@ "position": [61, 53], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 43], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "position": [5, 5], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00000033" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt index 1dab109..dfac2733 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='parent-iframe' class='bigger'", "position": [9, 9], - "bounds": [468, 188], - "drawsContent": true + "bounds": [468, 188] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [400, 120] + "bounds": [400, 120], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [385, 120] + "bounds": [385, 120], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [385, 230] + "bounds": [385, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [385, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,19 +46,18 @@ "position": [61, 53], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [428, 43], - "bounds": [15, 120] + "bounds": [15, 120], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "position": [5, 5], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00000033" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt index 73aa1e4..e361adeb 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='iframe' class='expanded'", "position": [28, 28], - "bounds": [330, 180], - "drawsContent": true + "bounds": [330, 180] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,19 +46,18 @@ "position": [61, 53], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 43], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "position": [5, 5], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00000033" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt index d75f2f9..dc62e39 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='box'", "position": [18, 10], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt index bff81ec9..d1bab85 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='parent-iframe'", "position": [9, 9], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,19 +46,18 @@ "position": [61, 53], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 43], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "position": [5, 5], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00000033" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt index 1654c19..89d50a8 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt
@@ -4,37 +4,39 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [304, 304], - "drawsContent": true + "bounds": [304, 304] }, { "name": "Frame Overflow Controls Host Layer", "position": [2, 2], - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [2, 2], - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [2, 2] + "position": [2, 2], + "drawsContent": false }, { "name": "Content Root Layer", "position": [2, 2], - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "LayoutView #document", "position": [2, 2], "bounds": [300, 300], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -42,14 +44,12 @@ "position": [20, 12], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutIFrame (positioned) IFRAME id='overlap'", "position": [250, 0], - "bounds": [304, 304], - "drawsContent": true + "bounds": [304, 304] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt index a1ed710..1fda75f8 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -5,69 +5,73 @@ "name": "LayoutView #document", "bounds": [785, 1650], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME", "position": [20, 150], - "bounds": [284, 204], - "drawsContent": true + "bounds": [284, 204] }, { "name": "Frame Overflow Controls Host Layer", "position": [22, 152], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [22, 152], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [22, 152] + "position": [22, 152], + "drawsContent": false }, { "name": "Content Root Layer", "position": [22, 152], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "LayoutView #document", "position": [22, 152], - "bounds": [280, 200], - "drawsContent": true + "bounds": [280, 200] }, { "name": "LayoutIFrame IFRAME", "position": [30, 160], - "bounds": [252, 172], - "drawsContent": true + "bounds": [252, 172] }, { "name": "Frame Overflow Controls Host Layer", "position": [31, 161], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [31, 161], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [31, 161] + "position": [31, 161], + "drawsContent": false }, { "name": "Content Root Layer", "position": [31, 161], - "bounds": [250, 230] + "bounds": [250, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [31, 161], "bounds": [250, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -75,70 +79,73 @@ "position": [49, 171], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutIFrame IFRAME", "position": [20, 374], - "bounds": [284, 204], - "drawsContent": true + "bounds": [284, 204] }, { "name": "Frame Overflow Controls Host Layer", "position": [22, 376], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [22, 376], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [22, 376] + "position": [22, 376], + "drawsContent": false }, { "name": "Content Root Layer", "position": [22, 376], - "bounds": [280, 200] + "bounds": [280, 200], + "drawsContent": false }, { "name": "LayoutView #document", "position": [22, 376], - "bounds": [280, 200], - "drawsContent": true + "bounds": [280, 200] }, { "name": "LayoutIFrame IFRAME", "position": [30, 384], - "bounds": [252, 172], - "drawsContent": true + "bounds": [252, 172] }, { "name": "Frame Overflow Controls Host Layer", "position": [31, 385], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [31, 385], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [31, 385] + "position": [31, 385], + "drawsContent": false }, { "name": "Content Root Layer", "position": [31, 385], - "bounds": [250, 230] + "bounds": [250, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [31, 385], "bounds": [250, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -146,14 +153,12 @@ "position": [49, 395], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutBlockFlow (positioned) DIV id='banner'", "position": [0, 100], "bounds": [785, 120], - "drawsContent": true, "backgroundColor": "#00000080" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt index 873d572..ffa828a 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME class='container'", "position": [8, 8], - "bounds": [304, 154], - "drawsContent": true + "bounds": [304, 154] }, { "name": "Frame Overflow Controls Host Layer", "position": [10, 10], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [10, 10], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [10, 10] + "position": [10, 10], + "drawsContent": false }, { "name": "Content Root Layer", "position": [10, 10], - "bounds": [285, 230] + "bounds": [285, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [10, 10], "bounds": [285, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,24 +46,24 @@ "position": [28, 20], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [295, 10], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [304, 154] + "bounds": [304, 154], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [295, 145], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt index 890129b..b62bf7f3 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt
@@ -5,38 +5,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME id='parent-iframe'", "position": [9, 9], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [43, 43], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [43, 43], - "bounds": [285, 135] + "bounds": [285, 135], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [43, 43] + "position": [43, 43], + "drawsContent": false }, { "name": "Content Root Layer", "position": [43, 43], - "bounds": [508, 608] + "bounds": [508, 608], + "drawsContent": false }, { "name": "LayoutView #document", "position": [43, 43], "bounds": [508, 608], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,30 +46,29 @@ "position": [151, 143], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Horizontal Scrollbar Layer", "position": [43, 178], - "bounds": [285, 15] + "bounds": [285, 15], + "drawsContent": false }, { "name": "Frame Vertical Scrollbar Layer", "position": [328, 43], - "bounds": [15, 135] + "bounds": [15, 135], + "drawsContent": false }, { "name": "Frame Scroll Corner Layer", "position": [328, 178], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "position": [5, 5], "bounds": [50, 50], - "drawsContent": true, "backgroundColor": "#00000033" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt b/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt index d07e519..e60a809 100644 --- a/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt
@@ -5,13 +5,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutImage (positioned) IMG class='composited'", "position": [210, 23], - "bounds": [140, 140], - "drawsContent": true + "bounds": [140, 140] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt index 9afede49..84e27ec 100644 --- a/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
@@ -7,12 +7,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutImage IMG class='composited'", "position": [8, 8], - "bounds": [256, 256] + "bounds": [256, 256], + "drawsContent": false } ] } @@ -25,13 +26,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutImage IMG class='composited border'", "position": [8, 8], - "bounds": [260, 260], - "drawsContent": true + "bounds": [260, 260] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt index 4f3efac..cd08a1a 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -6,38 +6,35 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='to-animate' class='container animating'", "position": [8, 8], - "bounds": [262, 212], - "drawsContent": true + "bounds": [262, 212] }, { "name": "Squashing Containment Layer", - "position": [8, 8] + "position": [8, 8], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited banner'", "position": [14, 14], "bounds": [250, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='test1 box')", "position": [19, 29], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box'", "position": [18, 230], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt index e4e2734..133cbd03 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [8, 108], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt index 9be0689..0375673 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 5021], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='indicator'", "position": [100, 1100], "bounds": [256, 256], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -19,7 +18,6 @@ "position": [0, 1000], "bounds": [500, 500], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt index ac2e3b93..4d7b825f 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt
@@ -5,21 +5,19 @@ "name": "LayoutView #document", "bounds": [785, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed1'", "position": [100, -100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed2'", "position": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ] @@ -31,14 +29,13 @@ "name": "LayoutView #document", "bounds": [785, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed1'", "position": [100, 50], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -46,7 +43,6 @@ "position": [100, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ] @@ -58,21 +54,19 @@ "name": "LayoutView #document", "bounds": [785, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed1'", "position": [100, -100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed2'", "position": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt index a6933a9e..19581ec 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
@@ -4,42 +4,42 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='overflow fixed'", "position": [8, 13], - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] }, { "name": "Scrolling Layer", "position": [8, 13], - "bounds": [785, 600] + "bounds": [785, 600], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 13], - "bounds": [785, 1000], - "drawsContent": true + "bounds": [785, 1000] }, { "name": "LayoutBlockFlow (positioned) DIV class='yellow fixed'", "position": [200, 13], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [800, 600] + "bounds": [800, 600], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [793, 13], - "bounds": [15, 600] + "bounds": [15, 600], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt index 7d1dada1..a7e160aa 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt
@@ -4,19 +4,19 @@ "name": "LayoutView #document", "bounds": [785, 1021], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [10, 10], - "bounds": [50, 50] + "bounds": [50, 50], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='absolute'", "position": [40, 40], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt index a7f14fb..f3f9d4d 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 4021], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt index 8060348..4abb0ee 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
@@ -6,14 +6,13 @@ "name": "LayoutView #document", "bounds": [800, 4024], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='absolute composited red box'", "position": [10, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -21,7 +20,6 @@ "position": [10, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt index 320e1f2..c869873 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
@@ -5,27 +5,24 @@ "name": "LayoutView #document", "bounds": [785, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box'", "position": [50, 360], "bounds": [300, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FFFF" }, { "name": "LayoutIFrame (positioned) IFRAME id='iframe2' class='composited'", "position": [10, 200], - "bounds": [154, 154], - "drawsContent": true + "bounds": [154, 154] }, { "name": "LayoutIFrame (positioned) IFRAME id='iframe3'", "position": [10, 380], - "bounds": [154, 154], - "drawsContent": true + "bounds": [154, 154] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt index 5697cfc..d0e1d5a0 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt
@@ -3,19 +3,19 @@ { "name": "LayoutView #document", "bounds": [785, 1021], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [785, 1021], - "drawsContent": true + "bounds": [785, 1021] }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [8, 1013], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -23,7 +23,6 @@ "position": [8, -100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -31,20 +30,17 @@ "position": [1000, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [785, 1021], - "drawsContent": true + "bounds": [785, 1021] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt index 712ecbec..3ae71b6 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -10,14 +10,13 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='positionedAndTransformed fixed'", "position": [20, -80], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0", "transform": 1 } @@ -41,14 +40,13 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='positionedAndTransformed fixed'", "position": [20, -70], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0", "transform": 1 }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt index 6e02e55..f78ba579 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt
@@ -5,14 +5,13 @@ "name": "LayoutView #document", "bounds": [4008, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [8, -100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -20,7 +19,6 @@ "position": [8, 1008], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -28,7 +26,6 @@ "position": [1000, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -36,14 +33,12 @@ "position": [600, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ] @@ -55,14 +50,13 @@ "name": "LayoutView #document", "bounds": [4008, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [8, -100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -70,7 +64,6 @@ "position": [8, 1008], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -78,7 +71,6 @@ "position": [1000, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -86,14 +78,12 @@ "position": [600, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ] @@ -105,14 +95,13 @@ "name": "LayoutView #document", "bounds": [4008, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [8, -100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -120,7 +109,6 @@ "position": [8, 1008], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -128,7 +116,6 @@ "position": [1000, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -136,14 +123,12 @@ "position": [600, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt index cf1f26dc..a3e7db9 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
@@ -5,14 +5,13 @@ "name": "LayoutView #document", "bounds": [4008, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [108, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -20,7 +19,6 @@ "position": [108, 1108], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -28,7 +26,6 @@ "position": [1100, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -36,7 +33,6 @@ "position": [700, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -44,7 +40,6 @@ "position": [100, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ] @@ -56,14 +51,13 @@ "name": "LayoutView #document", "bounds": [4008, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [108, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -71,7 +65,6 @@ "position": [108, 1108], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -79,7 +72,6 @@ "position": [1100, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -87,7 +79,6 @@ "position": [700, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -95,7 +86,6 @@ "position": [100, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ] @@ -107,14 +97,13 @@ "name": "LayoutView #document", "bounds": [4008, 4016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [108, 0], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -122,7 +111,6 @@ "position": [108, 1108], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -130,7 +118,6 @@ "position": [1100, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -138,7 +125,6 @@ "position": [700, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -146,7 +132,6 @@ "position": [100, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt index b52ba841..e1a9cc2 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt
@@ -3,40 +3,36 @@ { "name": "LayoutView #document", "bounds": [785, 1021], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [785, 1021], - "drawsContent": true + "bounds": [785, 1021] }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [8, 1013], - "bounds": [10, 10], - "drawsContent": true + "bounds": [10, 10] }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [8, -100], - "bounds": [10, 10], - "drawsContent": true + "bounds": [10, 10] }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "position": [1000, 0], - "bounds": [10, 10], - "drawsContent": true + "bounds": [10, 10] }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", - "bounds": [10, 10], - "drawsContent": true + "bounds": [10, 10] }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [785, 1021], - "drawsContent": true + "bounds": [785, 1021] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-under-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-under-transform-expected.txt index 7768fc2b..0760cde2 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-under-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-under-transform-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 5021], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='transform'", "position": [108, 113], "bounds": [256, 256], "contentsOpaque": true, - "drawsContent": true, "transform": 1 }, { @@ -19,7 +18,6 @@ "position": [0, 1000], "bounds": [500, 500], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt index e3c5d421..c930f1c 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [785, 5021], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt index 439898cd..2e8d2c0d 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [800, 5021], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt index f7bd4db5..6b9b2c6 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
@@ -5,13 +5,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='transform'", "position": [8, 8], - "bounds": [100, 30], - "drawsContent": true + "bounds": [100, 30] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt index 350f0b0..b7016d2a 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt index 925ada4c..2fc74a4 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
@@ -4,40 +4,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited'", "position": [8, 8], - "bounds": [30, 30] + "bounds": [30, 30], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='scroller' class='overflow')", "position": [20, 20], - "bounds": [306, 206], - "drawsContent": true + "bounds": [306, 206] }, { "name": "Ancestor Clipping Layer", "position": [23, 23], - "bounds": [285, 200] + "bounds": [285, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box'", "position": [43, 29], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [43, 184], - "bounds": [210, 100], - "drawsContent": true + "bounds": [210, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt index 61057d0..6b16aa8 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 812], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate1' class='box animating1'", "position": [18, 120], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }, @@ -20,20 +19,19 @@ "position": [58, 230], "bounds": [122, 462], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { "name": "Child Containment Layer", "position": [59, 231], - "bounds": [120, 460] + "bounds": [120, 460], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box gray force-layer'", "position": [10, 10], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 2 }, @@ -42,7 +40,6 @@ "position": [10, 230], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 3 }, @@ -51,7 +48,6 @@ "position": [69, 571], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" }, { @@ -59,7 +55,6 @@ "position": [18, 702], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt index e413b75..0030553 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt
@@ -5,14 +5,13 @@ "name": "LayoutView #document", "bounds": [785, 802], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate1' class='box animating1'", "position": [18, 120], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }, @@ -20,27 +19,25 @@ "name": "LayoutBlockFlow (relative positioned) DIV class='container'", "position": [47, 230], "bounds": [144, 452], - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { "name": "Squashing Containment Layer", - "position": [47, 230] + "position": [47, 230], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box gray force-layer'", "position": [22, 11], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box yellow')", "position": [18, 692], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [ @@ -72,14 +69,13 @@ "name": "LayoutView #document", "bounds": [785, 802], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate1' class='box animating1'", "position": [18, 120], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }, @@ -88,7 +84,6 @@ "position": [58, 230], "bounds": [122, 452], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { @@ -96,7 +91,6 @@ "position": [11, 11], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 2 }, @@ -104,27 +98,25 @@ "name": "LayoutBlockFlow (relative positioned) DIV id='first-green-box' class='box green rotate-45deg'", "position": [10, 120], "bounds": [102, 102], - "drawsContent": true, "backgroundColor": "#008000", "transform": 3 }, { "name": "Squashing Containment Layer", - "position": [58, 230] + "position": [58, 230], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box green rotate-45deg'", "position": [10, 230], "bounds": [102, 102], - "drawsContent": true, "backgroundColor": "#008000", "transform": 4 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box green')", "position": [18, 570], - "bounds": [152, 222], - "drawsContent": true + "bounds": [152, 222] } ], "transforms": [
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt index 0e828e8..2fdbc33 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt
@@ -4,25 +4,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='container'", "position": [8, 8], - "bounds": [122, 242], - "drawsContent": true + "bounds": [122, 242] }, { "name": "Child Containment Layer", "position": [9, 9], - "bounds": [120, 240] + "bounds": [120, 240], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate' class='animating box'", "position": [10, 10], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }, @@ -31,7 +30,6 @@ "position": [19, 129], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt index ae98caa..36aaab5 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -4,21 +4,20 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='container'", "bounds": [256, 256], - "contentsOpaque": true, - "drawsContent": true + "contentsOpaque": true }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='green')", - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt index dc8765b38..c795b8b7 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt
@@ -4,37 +4,36 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Ancestor Clipping Layer", "position": [50, 50], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='child'", "position": [50, 50], "bounds": [500, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='child'", "position": [50, 200], "bounds": [500, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='overlap')", "position": [450, 200], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt index ade0cb3..26e5b5a 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt
@@ -5,14 +5,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='box green center composited'", "position": [108, 108], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 } @@ -37,25 +36,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='box green center composited rotated-3d'", "position": [108, 108], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top left')", "position": [8, 8], - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] } ], "transforms": [
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt index c28f9b54..da473a0 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
@@ -4,35 +4,34 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='container clips'", "bounds": [100, 100], - "drawsContent": true, "transform": 1 }, { "name": "Child Containment Layer", "bounds": [100, 100], + "drawsContent": false, "transform": 1 }, { "name": "Squashing Containment Layer", + "drawsContent": false, "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV class='under composited'", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000", "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='over')", "bounds": [100, 100], - "drawsContent": true, "transform": 1 } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt index b336d739..9ed1049 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt
@@ -4,27 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='container'", "position": [23, 8], "bounds": [256, 256], "contentsOpaque": true, - "drawsContent": true, "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV id='composited'", "position": [408, 8], "contentsOpaque": true, + "drawsContent": false, "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV id='green'", "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt index d5aa3d95..6f2a746 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt
@@ -4,26 +4,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow BODY", "position": [8, 8], - "bounds": [784, 584], - "drawsContent": true + "bounds": [784, 584] }, { "name": "LayoutBlockFlow DIV id='container'", "position": [15, 0], "bounds": [256, 256], "contentsOpaque": true, - "drawsContent": true, "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV id='composited'", "position": [400, 0], "contentsOpaque": true, + "drawsContent": false, "transform": 1 }, { @@ -31,7 +30,6 @@ "position": [8, 8], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt index 1243019..330ecf39 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
@@ -5,61 +5,58 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='center box-container'", "position": [108, 108], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "Child Transform Layer", + "drawsContent": false, "transform": 1 }, { "name": "LayoutBlockFlow DIV id='camera' class='rotate-3d-start'", "contentsOpaque": true, + "drawsContent": false, "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-1'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-2'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 4 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-3'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 5 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-4'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 6 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-5'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 7 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-6'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 8 } @@ -170,80 +167,76 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='center box-container'", "position": [108, 108], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "Child Transform Layer", + "drawsContent": false, "transform": 1 }, { "name": "LayoutBlockFlow DIV id='camera' class='rotate-3d-start rotate-3d-end'", "contentsOpaque": true, + "drawsContent": false, "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-1'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-2'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 4 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-3'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 5 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-4'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 6 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-5'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 7 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-6'", "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#00FF00CC", "transform": 8 }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box top left'", "position": [8, 8], "bounds": [100, 150], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top right')", "position": [8, 8], - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] } ], "transforms": [
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt index b831be21..42d9c40 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt
@@ -4,25 +4,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='container'", "position": [8, 8], - "bounds": [122, 242], - "drawsContent": true + "bounds": [122, 242] }, { "name": "Child Containment Layer", "position": [9, 9], - "bounds": [120, 240] + "bounds": [120, 240], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='transformed box'", "position": [10, 10], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt index e582c33..d10128e 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='parent' class='fade'", "position": [8, 8], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFC0CB" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt index 06a14467..7c9d429 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -6,48 +6,45 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box translateZ'", "position": [23, 23], "bounds": [110, 110], - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate15'", "position": [167, 23], "bounds": [110, 110], - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [167, 143], - "bounds": [110, 110], - "drawsContent": true + "bounds": [110, 110] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate45'", "position": [311, 23], "bounds": [110, 110], - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [311, 143], - "bounds": [110, 110], - "drawsContent": true + "bounds": [110, 110] } ], "transforms": [
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt index 49a29b81..0d3793a8 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt
@@ -5,21 +5,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='composited'", "position": [8, 8], - "bounds": [20, 20] + "bounds": [20, 20], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='overlay')", "position": [10, 8], - "bounds": [400, 204], - "drawsContent": true + "bounds": [400, 204] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt index 626336b..a27ec29 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -4,22 +4,21 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutHTMLCanvas CANVAS id='world'", "position": [8, 8], - "bounds": [100, 50], - "drawsContent": true + "bounds": [100, 50] }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='output')", "position": [8, 8], - "bounds": [100, 50], - "drawsContent": true + "bounds": [100, 50] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt index 1fd543e5..08cfe06 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -4,26 +4,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Ancestor Clipping Layer", "position": [8, 8], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='composited'", "position": [8, 58], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FA8072" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')", "position": [8, 58], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt index 3cf5a09..b366fb3 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='trigger'", "position": [8, 8], "bounds": [20, 20], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='container')", "position": [8, 18], - "bounds": [142, 142], - "drawsContent": true + "bounds": [142, 142] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt index 17b8580..f79d5cd 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
@@ -4,20 +4,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box'", "position": [10, 10], "bounds": [120, 120], - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box'", "position": [60, 60], "bounds": [220, 120], - "drawsContent": true, "backgroundColor": "#FF000099" }, { @@ -25,7 +23,6 @@ "position": [75, 75], "bounds": [56, 56], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt index aabfed15..b31c850 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='test' class='box composited'", "position": [18, 10], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt index e294abd9..5eaa747 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited box'", "position": [18, 10], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-tree-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-tree-expected.txt index 449f8b3..f0236b6 100644 --- a/third_party/WebKit/LayoutTests/compositing/layer-tree-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/layer-tree-expected.txt
@@ -1,40 +1,49 @@ { "name": "Root Transform Layer", + "drawsContent": false, "children": [ { "name": "Inner Viewport Container Layer", "bounds": [800, 600], + "drawsContent": false, "children": [ { "name": "Overscroll Elasticity Layer", + "drawsContent": false, "children": [ { "name": "Page Scale Layer", + "drawsContent": false, "children": [ { "name": "Inner Viewport Scroll Layer", "bounds": [800, 600], + "drawsContent": false, "children": [ { "name": "Frame Overflow Controls Host Layer", "bounds": [800, 600], + "drawsContent": false, "children": [ { "name": "Frame Clipping Layer", "bounds": [780, 580], + "drawsContent": false, "children": [ { "name": "Frame Scrolling Layer", + "drawsContent": false, "children": [ { "name": "Content Root Layer", "bounds": [1200, 900], + "drawsContent": false, "children": [ { "name": "LayoutView #document", "bounds": [1200, 900], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -53,20 +62,17 @@ { "name": "Frame Horizontal Scrollbar Layer", "position": [0, 580], - "bounds": [780, 20], - "drawsContent": true + "bounds": [780, 20] }, { "name": "Frame Vertical Scrollbar Layer", "position": [780, 0], - "bounds": [20, 580], - "drawsContent": true + "bounds": [20, 580] }, { "name": "Frame Scroll Corner Layer", "position": [780, 580], - "bounds": [20, 20], - "drawsContent": true + "bounds": [20, 20] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt b/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt index 600e4d2..59adfc1 100644 --- a/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt
@@ -4,20 +4,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='masked'", "position": [10, 10], "bounds": [400, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#000000", "maskLayer": [ { "name": "Mask Layer", - "bounds": [400, 200], - "drawsContent": true + "bounds": [400, 200] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt index c197f1c..3b93cc2 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
@@ -4,27 +4,29 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 8], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] }, { "name": "Child Transform Layer", "bounds": [200, 200], + "drawsContent": false, "transform": 1 }, { "name": "Scrolling Layer", "bounds": [185, 185], + "drawsContent": false, "transform": 1 }, { "name": "Scrolling Contents Layer", "bounds": [185, 290], + "drawsContent": false, "transform": 1 }, { @@ -32,7 +34,6 @@ "position": [0, 65], "bounds": [60, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 2 }, @@ -41,30 +42,31 @@ "position": [65, 65], "bounds": [60, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 3 }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "transforms": [
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/clear-scroll-parent-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/clear-scroll-parent-expected.txt index 445cdfbc..be5bdc5 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/clear-scroll-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/clear-scroll-parent-expected.txt
@@ -4,79 +4,78 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='container'", "position": [8, 8], "bounds": [308, 208], - "drawsContent": true, "backgroundColor": "#00FF0080" }, { "name": "Scrolling Layer", "position": [12, 12], - "bounds": [285, 200] + "bounds": [285, 200], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [12, 12], "bounds": [285, 530], - "drawsContent": true + "backgroundColor": "#00FF0080" }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [308, 208] + "bounds": [308, 208], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [297, 12], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [297, 197], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed'", "position": [50, 200], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Ancestor Clipping Layer", "position": [12, 12], "bounds": [80, 80], + "drawsContent": false, "hasScrollParent": true }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box red'", "position": [22, 22], "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#FF000080" }, { "name": "Squashing Containment Layer", + "drawsContent": false, "hasScrollParent": true }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box'", "position": [22, 102], "bounds": [100, 100], - "drawsContent": true, "backgroundColor": "#0000FF80" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [22, 212], - "bounds": [100, 320], - "drawsContent": true + "bounds": [100, 320] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt index 4d1409d..f94f6c40 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt
@@ -4,73 +4,71 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Ancestor Clipping Layer", "position": [48, 38], - "bounds": [60, 70] + "bounds": [60, 70], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='box'", "position": [2, 12], "bounds": [100, 150], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 1 }, { "name": "Ancestor Clipping Layer", "position": [240, 38], - "bounds": [60, 70] + "bounds": [60, 70], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='box'", "position": [2, 12], "bounds": [100, 150], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [48, 230], - "bounds": [60, 70], - "drawsContent": true + "bounds": [60, 70] }, { "name": "Child Containment Layer", "position": [48, 230], - "bounds": [60, 70] + "bounds": [60, 70], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='box'", "position": [2, 12], "bounds": [100, 150], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [240, 230], - "bounds": [60, 70], - "drawsContent": true + "bounds": [60, 70] }, { "name": "Child Containment Layer", "position": [240, 230], - "bounds": [60, 70] + "bounds": [60, 70], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='box'", "position": [2, 12], "bounds": [100, 150], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080", "transform": 4 }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/composited-scroll-overlap-test-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/composited-scroll-overlap-test-expected.txt index 8b13789..172ddbe 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/composited-scroll-overlap-test-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/composited-scroll-overlap-test-expected.txt
@@ -1 +1,5 @@ +CONSOLE ERROR: line 2579: Uncaught Error: assert_equals: expected 4 but got 0 +This is a testharness.js-based test. +FAIL Untitled Uncaught Error: assert_equals: expected 4 but got 0 +Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt index 24541e10..b2b32313 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -4,6 +4,8 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF", "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -14,7 +16,6 @@ { "name": "LayoutBlockFlow HTML", "bounds": [800, 242], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintMask", @@ -26,7 +27,6 @@ "position": [29, 31], "bounds": [80, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintingPhases": [ "GraphicsLayerPaintBackground", @@ -38,7 +38,6 @@ { "name": "LayoutBlockFlow HTML (foreground) Layer", "bounds": [800, 242], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintForeground" ] @@ -47,7 +46,6 @@ "name": "LayoutBlockFlow DIV class='container'", "position": [28, 20], "bounds": [202, 202], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintMask", @@ -59,6 +57,7 @@ "name": "Scrolling Layer", "position": [29, 21], "bounds": [185, 185], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -70,7 +69,6 @@ "name": "Scrolling Contents Layer", "position": [29, 21], "bounds": [185, 715], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintForeground", "GraphicsLayerPaintOverflowContents", @@ -81,6 +79,7 @@ "name": "Overflow Controls Host Layer", "position": [28, 20], "bounds": [202, 202], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -92,6 +91,7 @@ "name": "Horizontal Scrollbar Layer", "position": [29, 206], "bounds": [185, 15], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -103,6 +103,7 @@ "name": "Vertical Scrollbar Layer", "position": [214, 21], "bounds": [15, 185], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -114,7 +115,6 @@ "name": "Scroll Corner Layer", "position": [214, 206], "bounds": [15, 15], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground",
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt index a3908c3..6bee4c5 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt
@@ -4,138 +4,151 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 13], - "bounds": [85, 100] + "bounds": [85, 100], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 13], - "bounds": [85, 200] + "bounds": [85, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content tall'", "position": [8, 13], - "bounds": [10, 200] + "bounds": [10, 200], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [93, 13], - "bounds": [15, 100] + "bounds": [15, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 13], - "bounds": [100, 85] + "bounds": [100, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 13], - "bounds": [200, 85] + "bounds": [200, 85], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content wide'", "position": [8, 13], - "bounds": [200, 10] + "bounds": [200, 10], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 98], - "bounds": [100, 15] + "bounds": [100, 15], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 13], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 13], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='both' class='content wide tall'", "position": [8, 13], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 98], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [93, 13], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container resizeWidget'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Child Containment Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='content'", "position": [8, 13], - "bounds": [10, 10] + "bounds": [10, 10], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt index 479ea19..e29b2fe6 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt
@@ -4,67 +4,79 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Child Containment Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content'", "position": [8, 13], - "bounds": [10, 10] + "bounds": [10, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Child Containment Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content'", "position": [8, 13], - "bounds": [10, 10] + "bounds": [10, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Child Containment Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='both' class='content'", "position": [8, 13], - "bounds": [10, 10] + "bounds": [10, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container'", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Child Containment Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='content'", "position": [8, 13], - "bounds": [10, 10] + "bounds": [10, 10], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/no-excessive-clip-parent-if-parent-escaped-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/no-excessive-clip-parent-if-parent-escaped-expected.txt index f7c3bae..8fc6dc2 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/no-excessive-clip-parent-if-parent-escaped-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/no-excessive-clip-parent-if-parent-escaped-expected.txt
@@ -4,27 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { "name": "Child Containment Layer", "position": [8, 8], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "hasClipParent": true }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt index aa2b0d5..04475d2 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt
@@ -4,138 +4,151 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 13], - "bounds": [85, 100] + "bounds": [85, 100], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 13], - "bounds": [85, 200] + "bounds": [85, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='content tall'", "position": [8, 13], - "bounds": [10, 200] + "bounds": [10, 200], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [93, 13], - "bounds": [15, 100] + "bounds": [15, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 13], - "bounds": [100, 85] + "bounds": [100, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 13], - "bounds": [200, 85] + "bounds": [200, 85], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='content wide'", "position": [8, 13], - "bounds": [200, 10] + "bounds": [200, 10], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 98], - "bounds": [100, 15] + "bounds": [100, 15], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 13], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 13], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='content wide tall'", "position": [8, 13], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 98], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [93, 13], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV class='container resizeWidget'", "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Child Containment Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='content'", "position": [8, 13], - "bounds": [10, 10] + "bounds": [10, 10], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 13], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt index 9ce46581..4d3642fa 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1008, 1008], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt index ce8c20e..4fb88b5 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -4,65 +4,70 @@ "name": "LayoutView #document", "bounds": [1208, 821], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Ancestor Clipping Layer", "position": [8, 8], - "bounds": [1200, 800] + "bounds": [1200, 800], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='positioned'", "position": [8, 8], - "bounds": [1200, 800], - "drawsContent": true + "bounds": [1200, 800] }, { "name": "Child Containment Layer", "position": [8, 8], - "bounds": [1200, 800] + "bounds": [1200, 800], + "drawsContent": false }, { "name": "Ancestor Clipping Layer", "position": [8, 8], - "bounds": [1200, 1000] + "bounds": [1200, 1000], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], - "bounds": [1200, 1000], - "drawsContent": true + "bounds": [1200, 1000] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [1200, 1000] + "bounds": [1200, 1000], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], - "bounds": [1200, 10000], - "drawsContent": true + "bounds": [1200, 10000] }, { "name": "LayoutBlockFlow (relative positioned) DIV id='foreground'", "position": [8, 10008], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "Overflow Controls Ancestor Clipping Layer", "position": [8, 8], - "bounds": [1200, 1000] + "bounds": [1200, 1000], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [1200, 1000] + "bounds": [1200, 1000], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [1201, 8], - "bounds": [7, 1000] + "bounds": [7, 1000], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt index d7b0088d0..943385e 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='resizable composited box'", "position": [18, 10], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Overflow Controls Host Layer", "position": [18, 10], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [103, 95], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt index c0ca36e..5f5bcc6 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt
@@ -4,63 +4,64 @@ "name": "LayoutView #document", "bounds": [785, 5516], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='top'", "position": [8, 8], "bounds": [500, 500], - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [485, 485] + "bounds": [485, 485], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [485, 5000], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#0000FF" }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [500, 500] + "bounds": [500, 500], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 493], - "bounds": [485, 15] + "bounds": [485, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [493, 8], - "bounds": [15, 485] + "bounds": [15, 485], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [493, 493], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='middle')", "position": [8, 8], - "bounds": [400, 400], - "drawsContent": true + "bounds": [400, 400] }, { "name": "LayoutBlockFlow (relative positioned) DIV id='child'", "position": [8, 8], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FFFF00" }, @@ -69,7 +70,6 @@ "position": [8, 8], "bounds": [20, 5000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FA8072", "hasScrollParent": true }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt index b5a1464..f54049d 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
@@ -4,31 +4,29 @@ "name": "LayoutView #document", "bounds": [785, 5516], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='top'", "position": [8, 8], - "bounds": [500, 500], - "drawsContent": true + "bounds": [500, 500] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [485, 485] + "bounds": [485, 485], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], - "bounds": [485, 5000], - "drawsContent": true + "bounds": [485, 5000] }, { "name": "LayoutBlockFlow (positioned) DIV id='middle'", "position": [8, 8], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "hasClipParent": true }, @@ -37,7 +35,6 @@ "position": [8, 8], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FFFF00", "hasClipParent": true @@ -47,29 +44,30 @@ "position": [8, 8], "bounds": [20, 5000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FA8072" }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [500, 500] + "bounds": [500, 500], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 493], - "bounds": [485, 15] + "bounds": [485, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [493, 8], - "bounds": [15, 485] + "bounds": [15, 485], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [493, 493], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt index 73f595f3..02cf334 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -4,67 +4,67 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='intervening'", "position": [98, 90], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FFEFD5" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [98, 90], - "bounds": [102, 102], - "drawsContent": true + "bounds": [102, 102] }, { "name": "Scrolling Layer", "position": [99, 91], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [99, 91], - "bounds": [100, 180] + "bounds": [100, 180], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed'", "position": [60, 60], "bounds": [80, 80], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='scrolled'", "position": [103, 95], "bounds": [60, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='scrolled')", "position": [103, 139], - "bounds": [60, 128], - "drawsContent": true + "bounds": [60, 128] }, { "name": "Overflow Controls Host Layer", "position": [98, 90], - "bounds": [102, 102] + "bounds": [102, 102], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [192, 91], - "bounds": [7, 100] + "bounds": [7, 100], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scrollbar-layer-placement-expected.txt index 5deec6e26..a5f198e 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/scrollbar-layer-placement-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/scrollbar-layer-placement-expected.txt
@@ -4,198 +4,203 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='outer A'", "position": [6, 6], - "bounds": [340, 282], - "drawsContent": true + "bounds": [340, 282] }, { "name": "LayoutBlockFlow (relative positioned) DIV class='scroller'", "position": [38, 38], "bounds": [278, 218], - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { "name": "Scrolling Layer", "position": [67, 67], - "bounds": [220, 160] + "bounds": [220, 160], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [67, 67], "bounds": [220, 236], - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Overflow Controls Host Layer", "position": [62, 62], - "bounds": [230, 170] + "bounds": [230, 170], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [280, 67], - "bounds": [7, 160] + "bounds": [7, 160], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='outer B'", "position": [355, 6], - "bounds": [340, 282], - "drawsContent": true + "bounds": [340, 282] }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [387, 38], "bounds": [278, 218], - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { "name": "Scrolling Layer", "position": [416, 67], - "bounds": [220, 160] + "bounds": [220, 160], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [416, 67], "bounds": [220, 236], - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='content'", "position": [428, 79], "bounds": [196, 212], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#DDDDDD" }, { "name": "Overflow Controls Host Layer", "position": [411, 62], - "bounds": [230, 170] + "bounds": [230, 170], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [629, 67], - "bounds": [7, 160] + "bounds": [7, 160], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='outer C'", "position": [6, 297], - "bounds": [340, 282], - "drawsContent": true + "bounds": [340, 282] }, { "name": "Ancestor Clipping Layer", "position": [46, 337], - "bounds": [260, 100] + "bounds": [260, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [37, 328], "bounds": [278, 218], - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { "name": "Scrolling Layer", "position": [66, 357], - "bounds": [220, 160] + "bounds": [220, 160], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [66, 357], "bounds": [220, 236], - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='content'", "position": [78, 369], "bounds": [196, 212], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#DDDDDD" }, { "name": "Overflow Controls Ancestor Clipping Layer", "position": [46, 337], - "bounds": [260, 100] + "bounds": [260, 100], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [61, 352], - "bounds": [230, 170] + "bounds": [230, 170], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [279, 357], - "bounds": [7, 160] + "bounds": [7, 160], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='outer D'", "position": [355, 297], - "bounds": [340, 282], - "drawsContent": true + "bounds": [340, 282] }, { "name": "LayoutBlockFlow (relative positioned) DIV class='clipper'", "position": [379, 321], - "bounds": [292, 200], - "drawsContent": true + "bounds": [292, 200] }, { "name": "Child Containment Layer", "position": [389, 331], - "bounds": [272, 180] + "bounds": [272, 180], + "drawsContent": false }, { "name": "Ancestor Clipping Layer", "position": [395, 337], - "bounds": [260, 100] + "bounds": [260, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [386, 328], "bounds": [278, 218], - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { "name": "Scrolling Layer", "position": [415, 357], - "bounds": [220, 160] + "bounds": [220, 160], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [415, 357], "bounds": [220, 236], - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV class='content'", "position": [427, 369], "bounds": [196, 212], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#DDDDDD" }, { "name": "Overflow Controls Ancestor Clipping Layer", "position": [395, 337], - "bounds": [260, 100] + "bounds": [260, 100], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [410, 352], - "bounds": [230, 170] + "bounds": [230, 170], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [628, 357], - "bounds": [7, 160] + "bounds": [7, 160], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt index c5feec6..0b6d29f 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
@@ -4,47 +4,49 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='scroller'", - "bounds": [320, 340], - "drawsContent": true + "bounds": [320, 340] }, { "name": "Scrolling Layer", - "bounds": [305, 325] + "bounds": [305, 325], + "drawsContent": false }, { "name": "Scrolling Contents Layer", - "bounds": [305, 1224] + "bounds": [305, 1224], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", - "bounds": [320, 340] + "bounds": [320, 340], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [0, 325], - "bounds": [305, 15] + "bounds": [305, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [305, 0], - "bounds": [15, 325] + "bounds": [15, 325], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [305, 325], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (relative positioned) DIV class='column'", "position": [10, 10], "bounds": [284, 1204], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt index b5745fc..692abac0 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -4,736 +4,743 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='container-absolute-grandchildren-not-contained' class='overflow'", "position": [10, 10], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [12, 12], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [12, 12], - "bounds": [85, 144], - "drawsContent": true + "bounds": [85, 144] }, { "name": "Overflow Controls Host Layer", "position": [10, 10], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [12, 97], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [97, 12], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [97, 97], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')", "position": [35, 75], - "bounds": [80, 40], - "drawsContent": true + "bounds": [80, 40] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'", "position": [16, -15], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')", "position": [16, 41], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'", "position": [130, 10], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [132, 12], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [132, 12], - "bounds": [105, 144], - "drawsContent": true + "bounds": [105, 144] }, { "name": "Overflow Controls Host Layer", "position": [130, 10], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [132, 97], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [217, 12], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [217, 97], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'", "position": [157, 18], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')", "position": [136, -15], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'", "position": [250, 10], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [252, 12], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [252, 12], - "bounds": [85, 144] + "bounds": [85, 144], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [250, 10], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [252, 97], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [337, 12], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [337, 97], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')", "position": [275, 75], - "bounds": [80, 40], - "drawsContent": true + "bounds": [80, 40] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'", "position": [256, -15], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')", "position": [256, 41], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'", "position": [370, 10], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [372, 12], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [372, 12], - "bounds": [85, 144], - "drawsContent": true + "bounds": [85, 144] }, { "name": "Overflow Controls Host Layer", "position": [370, 10], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [372, 97], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [457, 12], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [457, 97], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')", "position": [395, 75], - "bounds": [80, 40], - "drawsContent": true + "bounds": [80, 40] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'", "position": [376, -15], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')", "position": [376, 41], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'", "position": [10, 130], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [12, 132], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [12, 132], - "bounds": [105, 144], - "drawsContent": true + "bounds": [105, 144] }, { "name": "Overflow Controls Host Layer", "position": [10, 130], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [12, 217], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [97, 132], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [97, 217], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'", "position": [37, 138], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')", "position": [16, 105], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'", "position": [130, 130], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [132, 132], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [132, 132], - "bounds": [85, 144] + "bounds": [85, 144], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [130, 130], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [132, 217], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [217, 132], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [217, 217], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')", "position": [155, 195], - "bounds": [80, 40], - "drawsContent": true + "bounds": [80, 40] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'", "position": [136, 105], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')", "position": [136, 161], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'", "position": [250, 130], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [252, 132], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [252, 132], - "bounds": [105, 144] + "bounds": [105, 144], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [250, 130], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [252, 217], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [337, 132], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [337, 217], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'", "position": [277, 138], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')", "position": [256, 105], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'", "position": [370, 130], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [372, 132], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [372, 132], - "bounds": [105, 144] + "bounds": [105, 144], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [370, 130], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [372, 217], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [457, 132], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [457, 217], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'", "position": [397, 138], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')", "position": [376, 105], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'", "position": [10, 250], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [12, 252], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [12, 252], - "bounds": [85, 144], - "drawsContent": true + "bounds": [85, 144] }, { "name": "Overflow Controls Host Layer", "position": [10, 250], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [12, 337], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [97, 252], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [97, 337], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'", "position": [35, 315], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'", "position": [16, 225], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')", "position": [16, 281], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'", "position": [130, 250], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [132, 252], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [132, 252], - "bounds": [85, 144] + "bounds": [85, 144], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [130, 250], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [132, 337], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [217, 252], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [217, 337], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'", "position": [155, 315], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'", "position": [136, 225], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')", "position": [136, 281], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'", "position": [250, 250], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [252, 252], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [252, 252], - "bounds": [85, 144], - "drawsContent": true + "bounds": [85, 144] }, { "name": "Overflow Controls Host Layer", "position": [250, 250], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [252, 337], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [337, 252], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [337, 337], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'", "position": [275, 315], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'", "position": [256, 225], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')", "position": [256, 281], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'", "position": [370, 250], - "bounds": [104, 104], - "drawsContent": true + "bounds": [104, 104] }, { "name": "Scrolling Layer", "position": [372, 252], - "bounds": [85, 85] + "bounds": [85, 85], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [372, 252], - "bounds": [85, 144] + "bounds": [85, 144], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [370, 250], - "bounds": [104, 104] + "bounds": [104, 104], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [372, 337], - "bounds": [85, 15] + "bounds": [85, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [457, 252], - "bounds": [15, 85] + "bounds": [15, 85], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [457, 337], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'", "position": [395, 315], "bounds": [80, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#800080" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'", "position": [376, 225], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')", "position": [376, 281], - "bounds": [75, 24], - "drawsContent": true + "bounds": [75, 24] }, { "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'", "position": [375, 20], "bounds": [50, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -741,7 +748,6 @@ "position": [15, 140], "bounds": [50, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -749,7 +755,6 @@ "position": [135, 140], "bounds": [50, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -757,7 +762,6 @@ "position": [255, 140], "bounds": [50, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -765,7 +769,6 @@ "position": [15, 260], "bounds": [50, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -773,212 +776,199 @@ "position": [135, 260], "bounds": [50, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'", "position": [16, -43], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')", "position": [16, 13], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'", "position": [136, -43], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')", "position": [136, 13], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'", "position": [256, -43], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')", "position": [256, 13], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'", "position": [376, -43], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')", "position": [376, 13], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'", "position": [16, 77], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')", "position": [16, 133], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'", "position": [136, 77], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')", "position": [136, 133], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'", "position": [256, 77], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')", "position": [256, 133], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'", "position": [376, 77], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')", "position": [376, 133], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'", "position": [16, 197], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')", "position": [16, 253], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'", "position": [136, 197], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')", "position": [136, 253], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'", "position": [256, 197], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')", "position": [256, 253], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'", "position": [376, 197], "bounds": [75, 24], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')", "position": [376, 253], - "bounds": [75, 80], - "drawsContent": true + "bounds": [75, 80] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt b/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt index 3191c295d..4d4857e 100644 --- a/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='grandparent' class='composited'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 }, @@ -19,7 +18,6 @@ "name": "LayoutBlockFlow DIV id='parent' class='composited'", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 2 }, @@ -27,7 +25,6 @@ "name": "LayoutBlockFlow DIV id='child' class='composited'", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 3 }
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt index 71477f0..d943d4e 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -12,7 +11,6 @@ "position": [50, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt index 82afd3e6..a8d081bc 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [1000, 1000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -12,7 +11,6 @@ "position": [265, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt index 661f798a..bbca6046 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [1000, 1000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -12,7 +11,6 @@ "position": [51, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt index 71477f0..d943d4e 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -12,7 +11,6 @@ "position": [50, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt index c4bea1a5..fdde5369 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [1000, 1000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -12,7 +11,6 @@ "position": [265, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -20,7 +18,6 @@ "position": [265, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt index 29ca87b..28cf526c 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [1000, 1000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -12,7 +11,6 @@ "position": [51, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -20,7 +18,6 @@ "position": [51, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt index 99d4a79e..34746f2f 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt
@@ -4,32 +4,34 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [400, 400], - "drawsContent": true + "bounds": [400, 400] }, { "name": "Frame Overflow Controls Host Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Frame Clipping Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { - "name": "Frame Scrolling Layer" + "name": "Frame Scrolling Layer", + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [400, 400], - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -37,7 +39,6 @@ "position": [50, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt index 9cf7ae13..6f8ecd61 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
@@ -4,33 +4,35 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [400, 400], - "drawsContent": true - }, - { - "name": "Frame Overflow Controls Host Layer", "bounds": [400, 400] }, { + "name": "Frame Overflow Controls Host Layer", + "bounds": [400, 400], + "drawsContent": false + }, + { "name": "Frame Clipping Layer", - "bounds": [385, 385] + "bounds": [385, 385], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [615, 0] + "position": [615, 0], + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [1000, 1000] + "bounds": [1000, 1000], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [1000, 1000], - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -38,24 +40,24 @@ "position": [665, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Frame Horizontal Scrollbar Layer", "position": [0, 385], - "bounds": [385, 15] + "bounds": [385, 15], + "drawsContent": false }, { "name": "Frame Vertical Scrollbar Layer", "position": [385, 0], - "bounds": [15, 385] + "bounds": [15, 385], + "drawsContent": false }, { "name": "Frame Scroll Corner Layer", "position": [385, 385], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt index 3494218..b310e561 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -4,33 +4,35 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [400, 400], - "drawsContent": true - }, - { - "name": "Frame Overflow Controls Host Layer", "bounds": [400, 400] }, { + "name": "Frame Overflow Controls Host Layer", + "bounds": [400, 400], + "drawsContent": false + }, + { "name": "Frame Clipping Layer", - "bounds": [385, 385] + "bounds": [385, 385], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [615, 0] + "position": [615, 0], + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [1000, 1000] + "bounds": [1000, 1000], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [1000, 1000], - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -38,24 +40,24 @@ "position": [51, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Frame Horizontal Scrollbar Layer", "position": [0, 385], - "bounds": [385, 15] + "bounds": [385, 15], + "drawsContent": false }, { "name": "Frame Vertical Scrollbar Layer", "position": [385, 0], - "bounds": [15, 385] + "bounds": [15, 385], + "drawsContent": false }, { "name": "Frame Scroll Corner Layer", "position": [385, 385], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt index 99d4a79e..34746f2f 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt
@@ -4,32 +4,34 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [400, 400], - "drawsContent": true + "bounds": [400, 400] }, { "name": "Frame Overflow Controls Host Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Frame Clipping Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { - "name": "Frame Scrolling Layer" + "name": "Frame Scrolling Layer", + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [400, 400], - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -37,7 +39,6 @@ "position": [50, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt index cfb954d5..c43660c 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
@@ -4,33 +4,35 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [400, 400], - "drawsContent": true - }, - { - "name": "Frame Overflow Controls Host Layer", "bounds": [400, 400] }, { + "name": "Frame Overflow Controls Host Layer", + "bounds": [400, 400], + "drawsContent": false + }, + { "name": "Frame Clipping Layer", - "bounds": [385, 385] + "bounds": [385, 385], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [615, 0] + "position": [615, 0], + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [1000, 1000] + "bounds": [1000, 1000], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [1000, 1000], - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -38,7 +40,6 @@ "position": [665, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -46,24 +47,24 @@ "position": [665, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Frame Horizontal Scrollbar Layer", "position": [0, 385], - "bounds": [385, 15] + "bounds": [385, 15], + "drawsContent": false }, { "name": "Frame Vertical Scrollbar Layer", "position": [385, 0], - "bounds": [15, 385] + "bounds": [15, 385], + "drawsContent": false }, { "name": "Frame Scroll Corner Layer", "position": [385, 385], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt index cfb954d5..c43660c 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -4,33 +4,35 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [400, 400], - "drawsContent": true - }, - { - "name": "Frame Overflow Controls Host Layer", "bounds": [400, 400] }, { + "name": "Frame Overflow Controls Host Layer", + "bounds": [400, 400], + "drawsContent": false + }, + { "name": "Frame Clipping Layer", - "bounds": [385, 385] + "bounds": [385, 385], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [615, 0] + "position": [615, 0], + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [1000, 1000] + "bounds": [1000, 1000], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [1000, 1000], - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -38,7 +40,6 @@ "position": [665, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -46,24 +47,24 @@ "position": [665, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Frame Horizontal Scrollbar Layer", "position": [0, 385], - "bounds": [385, 15] + "bounds": [385, 15], + "drawsContent": false }, { "name": "Frame Vertical Scrollbar Layer", "position": [385, 0], - "bounds": [15, 385] + "bounds": [15, 385], + "drawsContent": false }, { "name": "Frame Scroll Corner Layer", "position": [385, 385], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt index 7dec397..de4ceea 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt
@@ -4,39 +4,40 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", - "bounds": [400, 400], - "drawsContent": true + "bounds": [400, 400] }, { "name": "Frame Overflow Controls Host Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Frame Clipping Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { - "name": "Frame Scrolling Layer" + "name": "Frame Scrolling Layer", + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "LayoutView #document", - "bounds": [400, 400], - "drawsContent": true + "bounds": [400, 400] }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [242, 58], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt index 39a9f6a..7bf2ef0 100644 --- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [642, 58], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt index e05f7a6b..d129936 100644 --- a/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -4,90 +4,91 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='outer'", "position": [8, 8], - "bounds": [404, 404], - "drawsContent": true + "bounds": [404, 404] }, { "name": "Scrolling Layer", "position": [10, 10], - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [10, 10], - "bounds": [400, 704], - "drawsContent": true + "bounds": [400, 704] }, { "name": "LayoutBlockFlow (positioned) DIV id='inner'", "position": [10, 510], - "bounds": [204, 204], - "drawsContent": true + "bounds": [204, 204] }, { "name": "Scrolling Layer", "position": [12, 512], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [12, 512], - "bounds": [5000, 9000], - "drawsContent": true + "bounds": [5000, 9000] }, { "name": "Squashing Containment Layer", - "position": [10, 10] + "position": [10, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='grey'", "position": [12, 512], "bounds": [100, 800], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='spacer')", "position": [12, 2512], - "bounds": [5000, 1000], - "drawsContent": true + "bounds": [5000, 1000] }, { "name": "Overflow Controls Host Layer", "position": [12, 512], - "bounds": [204, 204] + "bounds": [204, 204], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [14, 707], - "bounds": [193, 7] + "bounds": [193, 7], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [207, 514], - "bounds": [7, 193] + "bounds": [7, 193], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [207, 707], - "bounds": [7, 7], - "drawsContent": true + "bounds": [7, 7] }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [404, 404] + "bounds": [404, 404], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [403, 10], - "bounds": [7, 400] + "bounds": [7, 400], + "drawsContent": false } ] }
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 4b538f3a..0a230b1 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
@@ -7,24 +7,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], - "bounds": [180, 180], - "drawsContent": true + "bounds": [180, 180] } ] } @@ -35,24 +34,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], "bounds": [260, 260], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", @@ -80,24 +78,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], "bounds": [260, 260], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", @@ -121,24 +118,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='C' class='overlap3')", "position": [300, 300], "bounds": [100, 100], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", @@ -180,24 +176,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='B' class='overlap2')", "position": [220, 220], "bounds": [180, 180], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", @@ -247,24 +242,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], "bounds": [180, 180], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt index 1cde9e5..80aaeb3 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt
@@ -4,19 +4,19 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Ancestor Clipping Layer", "position": [8, 8], - "bounds": [200, 10] + "bounds": [200, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='inner'", "position": [8, 8], "bounds": [200, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#F5F5F5" }, { @@ -24,7 +24,6 @@ "position": [8, 0], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#90EE90" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt index 44ad382..3b134bbf 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
@@ -3,65 +3,68 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [800, 408], - "drawsContent": true + "bounds": [800, 408] }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 100], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 408], - "drawsContent": true + "bounds": [800, 408] }, { "name": "LayoutBlockFlow DIV", "position": [108, 100], - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] }, { "name": "Scrolling Layer", "position": [108, 100], - "bounds": [285, 300] + "bounds": [285, 300], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [108, 100], - "bounds": [285, 1000] + "bounds": [285, 1000], + "drawsContent": false }, { "name": "Overflow Controls Host Layer", "position": [108, 100], - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [393, 100], - "bounds": [15, 300] + "bounds": [15, 300], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV", "position": [108, 100], - "bounds": [285, 1000] + "bounds": [285, 1000], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV)", "position": [108, 100], - "bounds": [285, 1000], - "drawsContent": true + "bounds": [285, 1000] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt index 181aff3..efbccb730 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt
@@ -5,13 +5,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='composited-container'", "position": [8, 8], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt index cc73f75..55fc4812 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame (positioned) IFRAME", "bounds": [104, 104], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { @@ -18,7 +17,6 @@ "position": [50, 50], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt index b87dbd9..15860c5 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt
@@ -4,30 +4,28 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutVideo (positioned) VIDEO", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "LayoutFlexibleBox (relative positioned) DIV", - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "LayoutFlexibleBox (relative positioned) DIV", - "bounds": [100, 58] + "bounds": [100, 58], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [50, 50], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt index 2b1a222..1fd9e527 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt
@@ -4,21 +4,19 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "LayoutIFrame (positioned) IFRAME", "bounds": [104, 104], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" } ]
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 817c93f..d8e593f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='chip'",
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt index da22cfc..e3281e4 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box'", "position": [10, 10], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box')", "position": [10, 10], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt index bf707a7..9a77462 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt
@@ -6,32 +6,30 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='background'", "position": [8, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='host'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')", "position": [8, 8], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt index 6ad5f0b..01cb1001 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt
@@ -4,31 +4,29 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='trysquashed'", "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='trysquashed')", "position": [50, 50], - "bounds": [50, 50], - "drawsContent": true + "bounds": [50, 50] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt index 93dff79..7be9f4d 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
@@ -4,34 +4,32 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='fixedpos'", "position": [0, 50], "bounds": [800, 550], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "Child Containment Layer", "position": [0, 50], - "bounds": [800, 550] + "bounds": [800, 550], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='compositedlayer'", "position": [400, 40], "bounds": [24, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "LayoutBlockFlow (positioned) DIV class='notsquashedelement'", "bounds": [800, 60], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt index 62c9e12..2a1d45d 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -4,10 +4,11 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='target' class='composited box opaque'", @@ -15,14 +16,12 @@ "bounds": [100, 100], "opacity": 0.5, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='squashed')", "position": [16, 4], - "bounds": [40, 90], - "drawsContent": true + "bounds": [40, 90] } ] }
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 39c476f..a1b871c0 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
@@ -5,24 +5,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [50, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [130, 130], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] } @@ -33,24 +32,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [50, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [130, 130], "bounds": [100, 100], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='inner'",
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 d9b826db..531085e 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
@@ -9,32 +9,30 @@ "name": "LayoutView #document", "bounds": [785, 1400], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited background'", "position": [100, 150], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-b' class='overlapping lime'", "position": [0, 100], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan')", "position": [0, 200], - "bounds": [200, 300], - "drawsContent": true + "bounds": [200, 300] } ] } @@ -45,7 +43,7 @@ "name": "LayoutView #document", "bounds": [785, 1400], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'", @@ -79,18 +77,17 @@ "position": [100, 230], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'", "position": [0, 200], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FFFF", "paintInvalidations": [ { @@ -109,7 +106,6 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')", "position": [0, 300], "bounds": [200, 300], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'", @@ -175,32 +171,30 @@ "name": "LayoutView #document", "bounds": [785, 1400], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited background'", "position": [100, 270], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'", "position": [0, 200], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FFFF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')", "position": [0, 300], - "bounds": [200, 300], - "drawsContent": true + "bounds": [200, 300] } ] } @@ -211,7 +205,7 @@ "name": "LayoutView #document", "bounds": [785, 1400], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'", @@ -245,18 +239,17 @@ "position": [100, 320], "bounds": [300, 300], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'", "position": [0, 300], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00", "paintInvalidations": [ { @@ -275,7 +268,6 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan')", "position": [0, 400], "bounds": [200, 300], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'",
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt index 0c95f92..e2de19b 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt
@@ -7,13 +7,12 @@ "name": "LayoutView #document", "bounds": [785, 4050], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed'", "bounds": [400, 200], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#0000FF" }, @@ -21,7 +20,6 @@ "name": "LayoutBlockFlow DIV id='compositedInsideFixed'", "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000" }, @@ -30,7 +28,6 @@ "position": [100, 50], "bounds": [200, 4000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FFFF" } ] @@ -42,14 +39,13 @@ "name": "LayoutView #document", "bounds": [785, 4050], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed'", "position": [0, 80], "bounds": [400, 200], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#0000FF" }, @@ -58,7 +54,6 @@ "position": [0, 80], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000" }, @@ -67,7 +62,6 @@ "position": [100, 50], "bounds": [200, 4000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FFFF" } ]
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 c004800..b6d6443 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
@@ -9,13 +9,12 @@ "name": "LayoutView #document", "bounds": [785, 4100], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { @@ -23,7 +22,6 @@ "position": [100, 100], "bounds": [100, 4000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -31,7 +29,6 @@ "position": [100, 150], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -39,7 +36,6 @@ "position": [200, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00" } ] @@ -51,14 +47,13 @@ "name": "LayoutView #document", "bounds": [785, 4100], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", "position": [0, 10], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { @@ -66,7 +61,6 @@ "position": [100, 100], "bounds": [100, 4000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -74,7 +68,6 @@ "position": [100, 160], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -82,7 +75,6 @@ "position": [200, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00" } ] @@ -94,21 +86,19 @@ "name": "LayoutView #document", "bounds": [785, 4100], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", "position": [0, 110], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "LayoutBlockFlow (positioned) DIV id='container'", "position": [100, 100], "bounds": [200, 4000], - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -123,7 +113,6 @@ "position": [100, 260], "bounds": [200, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt index f71f1212..5267cdb 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt
@@ -7,29 +7,29 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited'", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [180, 180], - "bounds": [260, 260], - "drawsContent": true + "bounds": [260, 260] } ] } @@ -40,37 +40,36 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited'", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [180, 180], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle2')", "position": [260, 260], - "bounds": [180, 180], - "drawsContent": true + "bounds": [180, 180] } ] } @@ -81,46 +80,45 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited'", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle2'", "position": [260, 260], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [340, 340], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ] } @@ -131,36 +129,35 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited'", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [180, 180], - "bounds": [180, 180], - "drawsContent": true + "bounds": [180, 180] }, { "name": "LayoutBlockFlow (positioned) DIV class='box top'", "position": [340, 340], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ] @@ -172,29 +169,29 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited'", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [180, 180], - "bounds": [260, 260], - "drawsContent": true + "bounds": [260, 260] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt index 47b57bf..56b1460b 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='squashing'", "position": [-33554430, 0], "bounds": [1, 1], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='squashed')", "position": [600, 0], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt index 5eee243d..3cbb803 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [125, 125], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [40, 40], - "bounds": [180, 190], - "drawsContent": true + "bounds": [180, 190] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt index 021df647..9b6955c 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt
@@ -4,25 +4,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='compositedAndRotated box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [20, 20], - "bounds": [260, 260], - "drawsContent": true + "bounds": [260, 260] } ], "transforms": [
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 447ba4a4..e587592 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
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], "bounds": [100, 5000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { @@ -19,7 +18,6 @@ "position": [8, 25], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { @@ -27,7 +25,6 @@ "position": [8, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000", "paintInvalidations": [ { @@ -51,14 +48,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], "bounds": [100, 5000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { @@ -66,7 +62,6 @@ "position": [8, 25], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { @@ -74,7 +69,6 @@ "position": [8, 50], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt index 78836224..b4e415f 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt
@@ -4,20 +4,20 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='transform-parent'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 }, { "name": "Squashing Containment Layer", "position": [8, 8], + "drawsContent": false, "transform": 1 }, { @@ -25,7 +25,6 @@ "position": [8, 8], "bounds": [1, 1], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "transform": 1 }, @@ -33,7 +32,6 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='squashed')", "position": [-92, 8], "bounds": [200, 200], - "drawsContent": true, "transform": 1 } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt index 8c1f595..13e1daf7 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [20, 20], - "bounds": [260, 260], - "drawsContent": true + "bounds": [260, 260] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt index 1e95b63..c7b2c4a 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [40, 40], - "bounds": [180, 190], - "drawsContent": true + "bounds": [180, 190] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt index fd3040a..c97414c8 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt
@@ -4,33 +4,31 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [20, 20], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00", "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [
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 3ab270b..a7d7851 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
@@ -5,33 +5,31 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [20, 20], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00", "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [ @@ -54,25 +52,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [20, 20], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -86,8 +83,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [ @@ -116,25 +112,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [20, 20], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -153,8 +148,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [
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 de9753f..5c65b7e 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
@@ -5,33 +5,31 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [20, 20], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00", "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [ @@ -54,25 +52,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [20, 20], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -86,8 +83,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [ @@ -116,25 +112,24 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle'", "position": [20, 20], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -153,8 +148,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [180, 180], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "transforms": [
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 db96d72..2c79b9e5 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
@@ -7,24 +7,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='forceComposited' class='composited underneath'", "position": [60, 60], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], - "bounds": [260, 260], - "drawsContent": true + "bounds": [260, 260] } ] } @@ -35,7 +34,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
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 617e460..e8e842b 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt
@@ -7,24 +7,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], - "bounds": [260, 260], - "drawsContent": true + "bounds": [260, 260] } ] } @@ -35,24 +34,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], "bounds": [260, 260], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", @@ -76,24 +74,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], "bounds": [260, 260], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", @@ -126,24 +123,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], "bounds": [260, 260], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", @@ -176,24 +172,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], "bounds": [260, 260], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt index 4697097b..e006f987 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt
@@ -4,32 +4,33 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "Child Transform Layer", + "drawsContent": false, "transform": 1 }, { "name": "Squashing Containment Layer", + "drawsContent": false, "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV", "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00008B", "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", - "drawsContent": true, "transform": 1 } ],
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt index b65eaca..556c6cd 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
@@ -4,41 +4,39 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [60, 60], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#808080" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [140, 140], - "bounds": [10, 10], - "drawsContent": true + "bounds": [10, 10] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", "position": [220, 220], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='C' class='overlap3')", "position": [220, 300], - "bounds": [25, 10], - "drawsContent": true + "bounds": [25, 10] } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt index 305343e..349215b 100644 --- a/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -16,7 +16,6 @@ "name": "LayoutBlockFlow DIV class='scroller'", "position": [8, 8], "bounds": [102, 102], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintMask", @@ -28,6 +27,7 @@ "name": "Scrolling Layer", "position": [9, 9], "bounds": [85, 85], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -39,7 +39,6 @@ "name": "Scrolling Contents Layer", "position": [9, 9], "bounds": [85, 120], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintForeground", "GraphicsLayerPaintOverflowContents", @@ -50,6 +49,7 @@ "name": "Overflow Controls Host Layer", "position": [8, 8], "bounds": [102, 102], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -61,6 +61,7 @@ "name": "Horizontal Scrollbar Layer", "position": [9, 94], "bounds": [85, 15], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -72,6 +73,7 @@ "name": "Vertical Scrollbar Layer", "position": [94, 9], "bounds": [15, 85], + "drawsContent": false, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground", @@ -83,7 +85,6 @@ "name": "Scroll Corner Layer", "position": [94, 94], "bounds": [15, 15], - "drawsContent": true, "paintingPhases": [ "GraphicsLayerPaintBackground", "GraphicsLayerPaintForeground",
diff --git a/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt index df5dcb1..7f6759ec 100644 --- a/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt
@@ -4,26 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", - "bounds": [200, 200], - "drawsContent": true - }, - { - "name": "Child Containment Layer", "bounds": [200, 200] }, { + "name": "Child Containment Layer", + "bounds": [200, 200], + "drawsContent": false + }, + { "name": "LayoutBlockFlow DIV class='composited box'", - "bounds": [10, 10] + "bounds": [10, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow PRE id='layer-tree'", "bounds": [800, 16], - "opacity": 0, - "drawsContent": true + "opacity": 0 } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt index a1508e5..affc440 100644 --- a/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='willChangeOpacity' class='shouldComposite'", "position": [12, 42], "bounds": [30, 30], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -19,7 +18,6 @@ "position": [12, 76], "bounds": [30, 30], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -27,7 +25,6 @@ "position": [12, 144], "bounds": [30, 30], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -35,7 +32,6 @@ "position": [12, 212], "bounds": [30, 30], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -43,7 +39,6 @@ "position": [12, 280], "bounds": [30, 30], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -51,7 +46,6 @@ "position": [12, 348], "bounds": [30, 30], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -59,7 +53,6 @@ "position": [12, 416], "bounds": [30, 30], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt b/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt index f942244b..ae4cc71 100644 --- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt
@@ -3,25 +3,24 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] }, { "name": "LayoutBlockFlow (positioned) DIV class='accelerated stacking-context'", "position": [8, 8], "bounds": [160, 90], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] } ] }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt index 122f3517..b39aec62 100644 --- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
@@ -3,18 +3,18 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] }, { "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'", "position": [8, 8], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -23,7 +23,6 @@ "bounds": [160, 90], "isolate": true, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { @@ -31,23 +30,21 @@ "position": [8, 8], "bounds": [160, 90], "blendMode": "multiply", - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutImage IMG class='accelerated'", "position": [8, 8], - "bounds": [160, 90] + "bounds": [160, 90], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='stacking-context' (foreground) Layer", - "position": [8, 8], - "drawsContent": true + "position": [8, 8] }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] } ] }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt index 624b51f..176d1921 100644 --- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt
@@ -3,18 +3,18 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] }, { "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'", "position": [8, 8], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -23,25 +23,23 @@ "bounds": [160, 90], "isolate": true, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutImage IMG class='accelerated blended'", "position": [8, 8], "bounds": [160, 90], - "blendMode": "multiply" + "blendMode": "multiply", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='stacking-context' (foreground) Layer", - "position": [8, 8], - "drawsContent": true + "position": [8, 8] }, { "name": "LayoutBlockFlow (positioned) DIV class='accelerated stacking-context'", "position": [8, 8], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -50,24 +48,22 @@ "bounds": [160, 90], "isolate": true, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutImage IMG class='accelerated blended'", "position": [8, 8], "bounds": [160, 90], - "blendMode": "multiply" + "blendMode": "multiply", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='accelerated stacking-context' (foreground) Layer", - "position": [8, 8], - "drawsContent": true + "position": [8, 8] }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] } ] }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt index e780de2..b5cf5d6d 100644 --- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt
@@ -3,12 +3,13 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] }, { "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'", @@ -16,19 +17,18 @@ "bounds": [160, 90], "isolate": true, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutImage IMG class='accelerated blended'", "position": [8, 8], "bounds": [160, 90], - "blendMode": "multiply" + "blendMode": "multiply", + "drawsContent": false }, { "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 600], - "drawsContent": true + "bounds": [800, 600] } ] }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt index 12f9e2e..b4dbe141 100644 --- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='accelerated-stacking-context'", @@ -12,7 +12,6 @@ "bounds": [784, 90], "isolate": true, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -20,7 +19,6 @@ "position": [8, 8], "bounds": [784, 90], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }, @@ -28,7 +26,8 @@ "name": "LayoutImage IMG class='accelerated blended'", "position": [8, 8], "bounds": [160, 90], - "blendMode": "multiply" + "blendMode": "multiply", + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt index 486c3c4d..d9b9ec7 100644 --- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-layer' class='final-drop-shadow'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt index 028a5be..b7df888 100644 --- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt index 9ea7780dd..69f1e37 100644 --- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'", "position": [250, 250], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ] @@ -22,14 +21,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'", "position": [250, 250], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -37,7 +35,6 @@ "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#000000" } ]
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt index 9ea7780dd..69f1e37 100644 --- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'", "position": [250, 250], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ] @@ -22,14 +21,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'", "position": [250, 250], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -37,7 +35,6 @@ "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#000000" } ]
diff --git a/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt index 4cd10a9..cc187eb 100644 --- a/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt
@@ -4,20 +4,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='filtered box'", "position": [8, 8], - "bounds": [144, 144], - "drawsContent": true + "bounds": [144, 144] }, { "name": "LayoutBlockFlow DIV class='compositing box'", "position": [22, 22], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000", "transform": 1 }
diff --git a/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt index 95b1f90..c1757ed3 100644 --- a/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/editing/assert_selection.html b/third_party/WebKit/LayoutTests/editing/assert_selection.html index 9445f2ac..7cab89e 100644 --- a/third_party/WebKit/LayoutTests/editing/assert_selection.html +++ b/third_party/WebKit/LayoutTests/editing/assert_selection.html
@@ -60,66 +60,64 @@ '|<table><tbody><tr><td>foo</td></tr></tbody></table>^'); }, 'markers around table'); -test(() => { - assert_selection( - '<div>foo</div>', - selection => { - let doc = selection.document; - doc.documentElement.replaceChild( - doc.createTextNode('baz'), doc.body); - }, - '<html><head></head>baz</html>', - 'Serialize document element instead of document.body when it is null.'); -}, 'result with out body'); +selection_test( + '<div>foo</div>', + selection => { + let doc = selection.document; + doc.documentElement.replaceChild( + doc.createTextNode('baz'), doc.body); + }, + '<html><head></head>baz</html>', + 'Serialize document element instead of document.body when it is null.'); // Tests for TEXTAREA -test(() => assert_selection( +selection_test( '<div>|<textarea>foo</textarea></div>', 'noop', - '<div>|<textarea>foo</textarea></div>'), + '<div>|<textarea>foo</textarea></div>', 'We can place caret before TEXTAREA'); -test(() => assert_selection( +selection_test( '<div><textarea>foo</textarea>|</div>', 'noop', - '<div><textarea>foo</textarea>|</div>'), + '<div><textarea>foo</textarea>|</div>', 'We can place caret after TEXTAREA'); -test(() => assert_selection( +selection_test( '<div>^<textarea>foo</textarea>|</div>', 'noop', - '<div>^<textarea>foo</textarea>|</div>'), + '<div>^<textarea>foo</textarea>|</div>', 'We can select TEXTAREA'); -test(()=> assert_selection( +selection_test( '<div><textarea>f|oo</textarea></div>', selection => { const textarea = selection.document.querySelector('textarea'); textarea.value = 'bar'; }, - '<div><textarea>bar|</textarea></div>'), + '<div><textarea>bar|</textarea></div>', 'TEXTAREA is serialized with value property'); -test(() => assert_selection( +selection_test( '<div><textarea>01234|56789</textarea></div>', selection => { const textarea = selection.document.querySelector('textarea'); textarea.setSelectionRange(3, 7); }, - '<div><textarea>012^3456|789</textarea></div>'), + '<div><textarea>012^3456|789</textarea></div>', 'HTMLTextArea#setSelectionRange()'); -test(() => assert_selection( +selection_test( '<textarea>0123^456|789</textarea>', selection => { const textarea = selection.document.querySelector('textarea'); assert_equals(textarea.selectionStart, 4, 'selectionStart'); assert_equals(textarea.selectionEnd, 7, 'selectionEnd'); }, - '<textarea>0123^456|789</textarea>'), + '<textarea>0123^456|789</textarea>', 'range selection'); -test(() => assert_selection( +selection_test( '<textarea>0123|456^789</textarea>', selection => { const textarea = selection.document.querySelector('textarea'); @@ -127,21 +125,21 @@ assert_equals(textarea.selectionEnd, 7, 'selectionEnd'); assert_equals(textarea.selectionDirection, 'backward', 'selectionEnd'); }, - '<textarea>0123|456^789</textarea>'), + '<textarea>0123|456^789</textarea>', 'backward range selection'); -test(() => assert_selection( +selection_test( '<textarea>01234|56789</textarea>', selection => { const textarea = selection.document.querySelector('textarea'); assert_equals(textarea.selectionStart, 5, 'selectionStart'); assert_equals(textarea.selectionEnd, 5, 'selectionEnd'); }, - '<textarea>01234|56789</textarea>'), + '<textarea>01234|56789</textarea>', 'caret selection'); // Shadow DOM -test(() => assert_selection( +selection_test( [ '<div id="host">', '<b id="abc">abc</b>', @@ -171,9 +169,9 @@ '<span id="mno">mno</span>', '</div>', ], - {dumpAs: 'flattree'}), 'dump flat tree for shadow DOM V0'); + {dumpAs: 'flattree'}, 'dump flat tree for shadow DOM V0'); -test(() => assert_selection( +selection_test( [ '<div id="host">', '<b id="abc" slot="abc">abc</b>', @@ -203,9 +201,9 @@ '<span id="mno">mno</span>', '</div>', ].join(''), - {dumpAs: 'flattree'}), 'dump flat tree for shadow DOM V1'); + {dumpAs: 'flattree'}, 'dump flat tree for shadow DOM V1'); -test(() => assert_selection( +selection_test( '<br>', selection => { selection.document.documentElement.prepend('Pre-HEAD'); @@ -213,8 +211,8 @@ selection.document.documentElement.append('Post-BODY'); }, '<html>Pre-HEAD<head></head>Pre-BODY<body><br></body>Post-BODY</html>', - {dumpFromRoot: true} -), 'Serialize with dumpFromRoot option'); + {dumpFromRoot: true}, + 'Serialize with dumpFromRoot option'); test(() => { assert_equals(checked_assert_selection('fo|o', 'noop', 'fo|o'), @@ -271,12 +269,11 @@ `\t sameupto fo`); }, 'Compare result'); -test(() => { - assert_selection( - '<div contenteditable><p>^test|</p></div>', - 'insertHTML <span style="color: green">green</span>', - '<div contenteditable><p><span style="color: green">green|</span></p></div>'); -}, 'multiple spaces in function'); +selection_test( + '<div contenteditable><p>^test|</p></div>', + 'insertHTML <span style="color: green">green</span>', + '<div contenteditable><p><span style="color: green">green|</span></p></div>', + 'multiple spaces in function'); test(() => { assert_selection(
diff --git a/third_party/WebKit/LayoutTests/editing/assert_selection.js b/third_party/WebKit/LayoutTests/editing/assert_selection.js index 54327a8..2fbfd96 100644 --- a/third_party/WebKit/LayoutTests/editing/assert_selection.js +++ b/third_party/WebKit/LayoutTests/editing/assert_selection.js
@@ -977,7 +977,24 @@ `\t sameupto ${commonPrefixOf(expectedText, actualText)}`); } +/** + * @param {string} inputText + * @param {function(!Selection)|string} tester + * @param {string} expectedText + * @param {Object=} opt_options + * @param {string=} opt_description + */ +function selectionTest(inputText, tester, expectedText, opt_options, + opt_description) { + const description = typeof(opt_options) === 'string' ? opt_options + : opt_description; + const options = typeof(opt_options) === 'string' ? undefined : opt_options; + test(() => assertSelection(inputText, tester, expectedText, options), + description); +} + // Export symbols window.Sample = Sample; window.assert_selection = assertSelection; +window.selection_test = selectionTest; })();
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index c009094f2..7c7dac6 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -3649,6 +3649,12 @@ {} ] ], + "payment-request/updateWith-method-pmi-handling-manual.https.html": [ + [ + "/payment-request/updateWith-method-pmi-handling-manual.https.html", + {} + ] + ], "pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html": [ [ "/pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html", @@ -68976,11 +68982,21 @@ {} ] ], + "XMLHttpRequest/resources/access-control-preflight-denied.py": [ + [ + {} + ] + ], "XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py": [ [ {} ] ], + "XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py": [ + [ + {} + ] + ], "XMLHttpRequest/resources/auth1/auth.py": [ [ {} @@ -93831,6 +93847,11 @@ {} ] ], + "css/motion-1/OWNERS": [ + [ + {} + ] + ], "css/motion-1/animation/resources/interpolation-testcommon.js": [ [ {} @@ -112706,11 +112727,6 @@ {} ] ], - "payment-request/payment-request-constructor.https-expected.txt": [ - [ - {} - ] - ], "payment-request/payment-request-ctor-pmi-handling.https-expected.txt": [ [ {} @@ -130724,6 +130740,24 @@ {} ] ], + "XMLHttpRequest/access-control-basic-preflight-denied.htm": [ + [ + "/XMLHttpRequest/access-control-basic-preflight-denied.htm", + {} + ] + ], + "XMLHttpRequest/access-control-preflight-async-header-denied.htm": [ + [ + "/XMLHttpRequest/access-control-preflight-async-header-denied.htm", + {} + ] + ], + "XMLHttpRequest/access-control-preflight-credential-async.htm": [ + [ + "/XMLHttpRequest/access-control-preflight-credential-async.htm", + {} + ] + ], "XMLHttpRequest/access-control-preflight-credential-sync.htm": [ [ "/XMLHttpRequest/access-control-preflight-credential-sync.htm", @@ -130742,6 +130776,18 @@ {} ] ], + "XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm": [ + [ + "/XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm", + {} + ] + ], + "XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm": [ + [ + "/XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm", + {} + ] + ], "XMLHttpRequest/allow-lists-starting-with-comma.htm": [ [ "/XMLHttpRequest/allow-lists-starting-with-comma.htm", @@ -192981,6 +193027,18 @@ "4db804485282525ce98ef71c2824ade7fdb0f357", "testharness" ], + "XMLHttpRequest/access-control-basic-preflight-denied.htm": [ + "36a1951a7b814d7594e7474646ee9d03108208c6", + "testharness" + ], + "XMLHttpRequest/access-control-preflight-async-header-denied.htm": [ + "f69a2fdd41df78f29187bfa848e88c5c39b60736", + "testharness" + ], + "XMLHttpRequest/access-control-preflight-credential-async.htm": [ + "ae93b44faf45f95927a1ee82052a414273333e61", + "testharness" + ], "XMLHttpRequest/access-control-preflight-credential-sync.htm": [ "fa393dd9f33c2c7f151f00f034ae0f23a5bbf74a", "testharness" @@ -192993,6 +193051,14 @@ "1f3beb7047a0f4828d44f67664a977469af75263", "testharness" ], + "XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm": [ + "e59e2de75149869531b056b53501b92302fdee04", + "testharness" + ], + "XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm": [ + "a59b9c8f77991992faade11e955061078b9d9623", + "testharness" + ], "XMLHttpRequest/allow-lists-starting-with-comma.htm": [ "5e7870a6d66c475c2f96fd64a146ea751b08f4b1", "testharness" @@ -193410,7 +193476,7 @@ "support" ], "XMLHttpRequest/resources/access-control-basic-denied.py": [ - "f34648df5e659fdafca55dd036f2feca2451d13e", + "35e7b6c552caf55e8ea7d34ec51d354c8eb2bc6e", "support" ], "XMLHttpRequest/resources/access-control-basic-options-not-supported.py": [ @@ -193437,10 +193503,18 @@ "529883eed380c4505c1ddbc87ae5885254756626", "support" ], + "XMLHttpRequest/resources/access-control-preflight-denied.py": [ + "b41ba9f1e3fcad508d575331e0f3f43bc75c07b9", + "support" + ], "XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py": [ "3f39f2f6bdda8c167df09525b8d23d04c16b2462", "support" ], + "XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py": [ + "c572b1e3d79f66df0a40766e6e4c3cc785458d0e", + "support" + ], "XMLHttpRequest/resources/auth1/auth.py": [ "cbe9305740f7e0a9e8c7be9dbfcb606f8abb2758", "support" @@ -238773,6 +238847,10 @@ "13d88ccf8c2f03db7e1db7f6fc704ba46a06e0e1", "support" ], + "css/motion-1/OWNERS": [ + "0e64fd27bc1ba213549d690a4a502451fd7dbcb6", + "support" + ], "css/motion-1/animation/offset-anchor-interpolation.html": [ "30eb3ea68aa502d93125d4e54ff15c0a96458cfa", "testharness" @@ -246810,7 +246888,7 @@ "support" ], "fetch/api/abort/general.any.js": [ - "69e4ceb672265f67535e2cc98f24b1cb47b66b5c", + "825ca882bce4fe9f231c29d44cc820ae8158b330", "testharness" ], "fetch/api/abort/general.any.worker-expected.txt": [ @@ -273969,12 +274047,8 @@ "9983391839ed64c41f9a7ecfb48a9b4abe6b497c", "testharness" ], - "payment-request/payment-request-constructor.https-expected.txt": [ - "bf77ee055cc407c7d806f3ae6b630df8b22ca960", - "support" - ], "payment-request/payment-request-constructor.https.html": [ - "7690d1931eac63274286fee76a993522bf6ad717", + "3ecb26e134b45fd0f0238c8552d096ea5e154793", "testharness" ], "payment-request/payment-request-ctor-currency-code-checks.https.html": [ @@ -273982,11 +274056,11 @@ "testharness" ], "payment-request/payment-request-ctor-pmi-handling.https-expected.txt": [ - "8be59852aafdd4d3e90e4d4f19955f114780ce61", + "d013c7f44aee49a1ffc9541ab1d36c4d23e89592", "support" ], "payment-request/payment-request-ctor-pmi-handling.https.html": [ - "9582172cb0d7e771cf836f3322dbb2c8fc913565", + "6fb8d6c72f5222e90a7621aa3e1a179a9dea803e", "testharness" ], "payment-request/payment-request-id-attribute.https.html": [ @@ -274061,6 +274135,10 @@ "cb2d1d6dfb668a40bb0822ce2a097d327bf4dfe7", "manual" ], + "payment-request/updateWith-method-pmi-handling-manual.https.html": [ + "5e254b412285a6154004aeff98357c6aa55e62c6", + "manual" + ], "performance-timeline/OWNERS": [ "117a9d08c8413d908bd157018e5dfe848e38c0d7", "support" @@ -289374,7 +289452,7 @@ "testharness" ], "webrtc/RTCPeerConnection-createOffer.html": [ - "16f2f914ca31cd0b7606e60b07552e8badf82c10", + "5b3d38072afd9bbb3e95925c3959ff3f4268a347", "testharness" ], "webrtc/RTCPeerConnection-generateCertificate-expected.txt": [ @@ -289418,7 +289496,7 @@ "testharness" ], "webrtc/RTCPeerConnection-helper.js": [ - "411a29bdf09c19c4807f581d37f20479fde7e88a", + "a89f8545bb5a5e832d4efa9674abbf55551344b2", "support" ], "webrtc/RTCPeerConnection-iceConnectionState-expected.txt": [ @@ -289514,7 +289592,7 @@ "support" ], "webrtc/RTCPeerConnection-setRemoteDescription-offer.html": [ - "f6bdebeffff366eb58102cd6fa7556366ce92c37", + "91a70d6ec4387e88e779621a72baf282bd74d21c", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html": [ @@ -289698,7 +289776,7 @@ "support" ], "webrtc/RTCTrackEvent-constructor.html": [ - "4b9e3d6e2498b56cd027bbb6ccf25d05dcdc4a39", + "a73dde79625035cdd40d5abd8856cd44161dfdf9", "testharness" ], "webrtc/coverage/RTCDTMFSender.txt": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/historical.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/historical.https-expected.txt deleted file mode 100644 index f8ff3a2..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/historical.https-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -This is a testharness.js-based test. -PASS "toNativeLineEndings" should not be supported -PASS "FileError" should not be supported -PASS "FileException" should not be supported -PASS Blob should not support slice prefixed -PASS BlobBuilder should not be supported. -PASS createFor method should not be supported -FAIL Blob.close() should not be supported assert_false: close in b expected false got true -PASS Service worker test setup -PASS "FileReaderSync" should not be supported in service workers -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/fixed-layout-excess-width-distribution-001-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/fixed-layout-excess-width-distribution-001-expected.txt new file mode 100644 index 0000000..503b52fc --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/fixed-layout-excess-width-distribution-001-expected.txt
@@ -0,0 +1,12 @@ +This is a testharness.js-based test. +FAIL #theTable 1 assert_equals: +<table id="theTable"> + <tbody><tr> + <td data-expected-width="180"></td> + <td data-expected-width="90"></td> + <td data-expected-width="30"></td> + </tr> +</tbody></table> +width expected 180 but got 100 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/fixed-layout-excess-width-distribution-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/fixed-layout-excess-width-distribution-001.html new file mode 100644 index 0000000..a9a78bd5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/fixed-layout-excess-width-distribution-001.html
@@ -0,0 +1,43 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/check-layout-th.js"></script> +<link rel="author" title="David Grogan" href="dgrogan@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-tables-3/#distributing-width-to-columns"> + +<style> +table { + width: 300px; + border-collapse: collapse; + table-layout: fixed; + height: 20px; +} + +td { + padding: 0px; + background: lime; + outline: 1px solid blue; +} + +td:nth-child(1) { width: 20px; } +td:nth-child(2) { width: 10px; } +td:nth-child(3) { width: 10%; } +</style> + +<h2>Fixed layout tables with excess width and no auto columns</h2> + +FF/Edge give excess only to fixed columns, in proportion to their relative +widths. This is what the spec dictates. +<br>Chrome (62) gives excess to ALL columns, in proportion to their +contribution to total width. +<table id=theTable> + <tr> + <td data-expected-width=180></td> + <td data-expected-width=90></td> + <td data-expected-width=30></td> + </tr> +</table> + +<script> +checkLayout('#theTable') +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/support/check-layout-th.js b/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/support/check-layout-th.js new file mode 100644 index 0000000..07f7d5d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-tables-3/support/check-layout-th.js
@@ -0,0 +1,190 @@ +(function() { +// Test is initiated from body.onload, so explicit done() call is required. +setup({ explicit_done: true }); + +function checkSubtreeExpectedValues(t, parent, prefix) +{ + var checkedLayout = checkExpectedValues(t, parent, prefix); + Array.prototype.forEach.call(parent.childNodes, function(node) { + checkedLayout |= checkSubtreeExpectedValues(t, node, prefix); + }); + return checkedLayout; +} + +function checkAttribute(output, node, attribute) +{ + var result = node.getAttribute && node.getAttribute(attribute); + output.checked |= !!result; + return result; +} + +function assert_tolerance(actual, expected, message) +{ + if (isNaN(expected) || Math.abs(actual - expected) >= 1) { + assert_equals(actual, Number(expected), message); + } +} + +function checkExpectedValues(t, node, prefix) +{ + var output = { checked: false }; + + var expectedWidth = checkAttribute(output, node, "data-expected-width"); + if (expectedWidth) { + assert_tolerance(node.offsetWidth, expectedWidth, prefix + "width"); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-height"); + if (expectedHeight) { + assert_tolerance(node.offsetHeight, expectedHeight, prefix + "height"); + } + + var expectedOffset = checkAttribute(output, node, "data-offset-x"); + if (expectedOffset) { + assert_tolerance(node.offsetLeft, expectedOffset, prefix + "offsetLeft"); + } + + var expectedOffset = checkAttribute(output, node, "data-offset-y"); + if (expectedOffset) { + assert_tolerance(node.offsetTop, expectedOffset, prefix + "offsetTop"); + } + + var expectedWidth = checkAttribute(output, node, "data-expected-client-width"); + if (expectedWidth) { + assert_tolerance(node.clientWidth, expectedWidth, prefix + "clientWidth"); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-client-height"); + if (expectedHeight) { + assert_tolerance(node.clientHeight, expectedHeight, prefix + "clientHeight"); + } + + var expectedWidth = checkAttribute(output, node, "data-expected-scroll-width"); + if (expectedWidth) { + assert_tolerance(node.scrollWidth, expectedWidth, prefix + "scrollWidth"); + } + + var expectedHeight = checkAttribute(output, node, "data-expected-scroll-height"); + if (expectedHeight) { + assert_tolerance(node.scrollHeight, expectedHeight, prefix + "scrollHeight"); + } + + var expectedOffset = checkAttribute(output, node, "data-total-x"); + if (expectedOffset) { + var totalLeft = node.clientLeft + node.offsetLeft; + assert_tolerance(totalLeft, expectedOffset, prefix + + "clientLeft+offsetLeft (" + node.clientLeft + " + " + node.offsetLeft + ")"); + } + + var expectedOffset = checkAttribute(output, node, "data-total-y"); + if (expectedOffset) { + var totalTop = node.clientTop + node.offsetTop; + assert_tolerance(totalTop, expectedOffset, prefix + + "clientTop+offsetTop (" + node.clientTop + " + " + node.offsetTop + ")"); + } + + var expectedDisplay = checkAttribute(output, node, "data-expected-display"); + if (expectedDisplay) { + var actualDisplay = getComputedStyle(node).display; + assert_equals(actualDisplay, expectedDisplay, prefix + "display"); + } + + var expectedPaddingTop = checkAttribute(output, node, "data-expected-padding-top"); + if (expectedPaddingTop) { + var actualPaddingTop = getComputedStyle(node).paddingTop; + // Trim the unit "px" from the output. + actualPaddingTop = actualPaddingTop.slice(0, -2); + assert_equals(actualPaddingTop, expectedPaddingTop, prefix + "padding-top"); + } + + var expectedPaddingBottom = checkAttribute(output, node, "data-expected-padding-bottom"); + if (expectedPaddingBottom) { + var actualPaddingBottom = getComputedStyle(node).paddingBottom; + // Trim the unit "px" from the output. + actualPaddingBottom = actualPaddingBottom.slice(0, -2); + assert_equals(actualPaddingBottom, expectedPaddingBottom, prefix + "padding-bottom"); + } + + var expectedPaddingLeft = checkAttribute(output, node, "data-expected-padding-left"); + if (expectedPaddingLeft) { + var actualPaddingLeft = getComputedStyle(node).paddingLeft; + // Trim the unit "px" from the output. + actualPaddingLeft = actualPaddingLeft.slice(0, -2); + assert_equals(actualPaddingLeft, expectedPaddingLeft, prefix + "padding-left"); + } + + var expectedPaddingRight = checkAttribute(output, node, "data-expected-padding-right"); + if (expectedPaddingRight) { + var actualPaddingRight = getComputedStyle(node).paddingRight; + // Trim the unit "px" from the output. + actualPaddingRight = actualPaddingRight.slice(0, -2); + assert_equals(actualPaddingRight, expectedPaddingRight, prefix + "padding-right"); + } + + var expectedMarginTop = checkAttribute(output, node, "data-expected-margin-top"); + if (expectedMarginTop) { + var actualMarginTop = getComputedStyle(node).marginTop; + // Trim the unit "px" from the output. + actualMarginTop = actualMarginTop.slice(0, -2); + assert_equals(actualMarginTop, expectedMarginTop, prefix + "margin-top"); + } + + var expectedMarginBottom = checkAttribute(output, node, "data-expected-margin-bottom"); + if (expectedMarginBottom) { + var actualMarginBottom = getComputedStyle(node).marginBottom; + // Trim the unit "px" from the output. + actualMarginBottom = actualMarginBottom.slice(0, -2); + assert_equals(actualMarginBottom, expectedMarginBottom, prefix + "margin-bottom"); + } + + var expectedMarginLeft = checkAttribute(output, node, "data-expected-margin-left"); + if (expectedMarginLeft) { + var actualMarginLeft = getComputedStyle(node).marginLeft; + // Trim the unit "px" from the output. + actualMarginLeft = actualMarginLeft.slice(0, -2); + assert_equals(actualMarginLeft, expectedMarginLeft, prefix + "margin-left"); + } + + var expectedMarginRight = checkAttribute(output, node, "data-expected-margin-right"); + if (expectedMarginRight) { + var actualMarginRight = getComputedStyle(node).marginRight; + // Trim the unit "px" from the output. + actualMarginRight = actualMarginRight.slice(0, -2); + assert_equals(actualMarginRight, expectedMarginRight, prefix + "margin-right"); + } + + return output.checked; +} + +window.checkLayout = function(selectorList, outputContainer) +{ + if (!selectorList) { + console.error("You must provide a CSS selector of nodes to check."); + return; + } + var nodes = document.querySelectorAll(selectorList); + var testNumber = 0; + nodes = Array.prototype.slice.call(nodes); + nodes.reverse(); + var checkedLayout = false; + Array.prototype.forEach.call(nodes, function(node) { + test(function(t) { + var container = node.parentNode.className == 'container' ? node.parentNode : node; + var prefix = "\n" + container.outerHTML + "\n"; + var passed = false; + try { + checkedLayout |= checkExpectedValues(t, node.parentNode, prefix); + checkedLayout |= checkSubtreeExpectedValues(t, node, prefix); + passed = true; + } finally { + checkedLayout |= !passed; + } + }, selectorList + ' ' + String(++testNumber)); + }); + if (!checkedLayout) { + console.error("No valid data-* attributes found in selector list : " + selectorList); + } + done(); +}; + +})();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome-ref.html index eb5b15d..32ce9ada 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome-ref.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome-ref.html
@@ -1,10 +1,11 @@ <!DOCTYPE html> -<html> +<html class="reftest-wait"> <!-- Submitted from TestTWF Paris --> <head> <title>CSS Reference File</title> <link rel="author" title="Marc Bourlon" href="mailto:marc@bourlon.com"> + <script src="/common/reftest-wait.js"></script> <style type="text/css"> @@ -15,6 +16,19 @@ </style> <script type="text/javascript"> + 'use strict'; + + // We must not capture the screen until the frameTest + // and testBoxWithVhOnly elements have finished changing height. + var elementsPending = 2; + function receiveMessage() { + if (--elementsPending === 0) { + takeScreenshot(); + } + } + + window.addEventListener('message', receiveMessage, false); + var height = 200; function resizeReference() { @@ -34,6 +48,7 @@ // uncomment the next line to see how a width resize triggers a layout recalculation //frameTest.style.width = (parseInt(window.getComputedStyle(document.getElementById('frameTest'))['width'], 10) + 1) + "px"; + window.postMessage('frameTest', '*'); } }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome_iframe-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome_iframe-ref.html index d69465b0..5e35f62 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome_iframe-ref.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/reference/vh_not_refreshing_on_chrome_iframe-ref.html
@@ -32,6 +32,7 @@ <div id="referenceBoxGrownHorizontallyByJS"></div> <script type="text/javascript"> + 'use strict'; // In case this file was opened by mistake, redirects to proper test if (window.top.location.href === document.location.href) { @@ -63,7 +64,11 @@ setDimension('referenceBoxGrownHorizontallyByJS', 'width', referenceDimension); setDimension('referenceBoxGrownHorizontallyByJS', 'height', referenceDimension); - setTimeout(animate, 20); + if (referenceDimension < 60) { + setTimeout(animate, 20); + } else { + parent.postMessage('testBoxWithVhOnly', '*'); + } } setTimeout(animate, 20);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/support/vh_not_refreshing_on_chrome_iframe.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/support/vh_not_refreshing_on_chrome_iframe.html index 99fe34d..c58ec57 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/support/vh_not_refreshing_on_chrome_iframe.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/support/vh_not_refreshing_on_chrome_iframe.html
@@ -18,7 +18,7 @@ /* third box, changed by using CSS transition */ #testBoxWithTransition { background: #FF0; width: 20vh; height: 40px; float: left; transition-property: width, height; - transition-duration: 1.5s; + transition-duration: 0.3s; transition-delay: 0; } @@ -42,6 +42,7 @@ <div id="referenceBoxGrownHorizontallyByJS"></div> <script type="text/javascript"> + 'use strict'; // In case this file was opened by mistake, redirects to proper test if (window.top.location.href === document.location.href) { @@ -68,11 +69,18 @@ setDimension('referenceBoxGrownHorizontallyByJS', 'height', referenceDimension); - setTimeout(animate, 20); + if (referenceDimension < 60) { + setTimeout(animate, 20); + } else { + parent.postMessage('referenceBoxGrownHorizontallyByJS', '*'); + } } setTimeout(animate, 20); + addEventListener('transitionend', function() { + parent.postMessage('testBoxWithTransition', '*'); + }, false); var transitionedTestBoxStyle = document.getElementById('testBoxWithTransition').style; transitionedTestBoxStyle.height = "60px"; </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/vh_not_refreshing_on_chrome.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/vh_not_refreshing_on_chrome.html index 086e37e..b4e0a41 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/vh_not_refreshing_on_chrome.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-values-3/vh_not_refreshing_on_chrome.html
@@ -1,6 +1,6 @@ <!-- Submitted from TestTWF Paris --> <!DOCTYPE html> -<html> +<html class="reftest-wait"> <head> <title>CSS Values and Units Test: vh-based dimension doesn't change when the element's other dimension doesn't change.</title> <link rel="author" title="Marc Bourlon" href="mailto:marc@bourlon.com"> @@ -8,6 +8,7 @@ <link rel="match" href="reference/vh_not_refreshing_on_chrome-ref.html"> <meta name="assert" content="vh-based dimension doesn't change when the element's other dimension doesn't change."> <!-- This test exhibits a bug for Chrome 19.0.1084.56 / Mac OS X 10.6.8 --> + <script src="/common/reftest-wait.js"></script> <style type="text/css"> @@ -18,6 +19,19 @@ </style> <script type="text/javascript"> + 'use strict'; + + // We must not capture the screen until the frameTest, referenceBoxGrownHorizontallyByJS + // and testBoxWithTransition elements have finished changing height. + var elementsPending = 3; + function receiveMessage() { + if (--elementsPending === 0) { + takeScreenshot(); + } + } + + window.addEventListener('message', receiveMessage, false); + var height = 200; function resizeReference() { @@ -37,6 +51,7 @@ // uncomment the next line to see how a width resize triggers a layout recalculation //frameTest.style.width = (parseInt(window.getComputedStyle(document.getElementById('frameTest'))['width'], 10) + 1) + "px"; + window.postMessage('frameTest', '*'); } }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/motion-1/OWNERS b/third_party/WebKit/LayoutTests/external/wpt/css/motion-1/OWNERS new file mode 100644 index 0000000..812e93d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/motion-1/OWNERS
@@ -0,0 +1 @@ +ericwilligers@chromium.org
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general.any.js b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general.any.js index df77d56..2bc1578 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general.any.js +++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/abort/general.any.js
@@ -440,6 +440,10 @@ const signal = controller.signal; const response = await fetch(`../resources/empty.txt`, { signal }); + + // Read whole response to ensure close signal has sent. + await response.clone().text(); + const reader = response.body.getReader(); controller.abort();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/hr-time/timeOrigin.html b/third_party/WebKit/LayoutTests/external/wpt/hr-time/timeOrigin.html index 415d7452..20aea75 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/hr-time/timeOrigin.html +++ b/third_party/WebKit/LayoutTests/external/wpt/hr-time/timeOrigin.html
@@ -9,10 +9,11 @@ const windowOrigin = performance.timeOrigin; test(() => { + // Use a 30ms cushion when comparing with Date() to account for inaccuracy. const startTime = Date.now(); - assert_greater_than_equal(startTime + 1, windowOrigin, 'Date.now() should be at least as large as the window timeOrigin.'); + assert_greater_than_equal(startTime + 30, windowOrigin, 'Date.now() should be at least as large as the window timeOrigin.'); const startNow = performance.now(); - assert_less_than_equal(startTime, windowOrigin + startNow + 1, 'Date.now() should be close to window timeOrigin.'); + assert_less_than_equal(startTime, windowOrigin + startNow + 30, 'Date.now() should be close to window timeOrigin.'); }, 'Window timeOrigin is close to Date.now() when there is no system clock adjustment.'); const workerScript = 'postMessage({timeOrigin: performance.timeOrigin})';
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/checked-type-change.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/checked-type-change.html new file mode 100644 index 0000000..661d9e4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/checked-type-change.html
@@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Selector: pseudo-class :checked input type change</title> +<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#pseudo-classes"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + span { color: red } + :checked + span { color: green } +</style> +<input id="checked" type="text" checked> +<span id="sibling">This text should be green.</span> +<script> + test(() => { + assert_equals(getComputedStyle(sibling).color, "rgb(255, 0, 0)", + "Not matching :checked for type=text"); + + checked.type = "radio"; + + assert_equals(getComputedStyle(sibling).color, "rgb(0, 128, 0)", + "Matching :checked for type=radio"); + }, "Evaluation of :checked changes on input type change."); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/indeterminate-type-change.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/indeterminate-type-change.html new file mode 100644 index 0000000..b3e4cce --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/indeterminate-type-change.html
@@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Selector: pseudo-class :indeterminate input type change</title> +<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#pseudo-classes"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + span { color: red } + :indeterminate + span { color: green } +</style> +<input id="indeterminate" type="text"> +<span id="sibling">This text should be green.</span> +<script> + test(() => { + assert_equals(getComputedStyle(sibling).color, "rgb(255, 0, 0)", + "Not matching :indeterminate for type=text"); + + indeterminate.type = "radio"; + + assert_equals(getComputedStyle(sibling).color, "rgb(0, 128, 0)", + "Matching :indeterminate for type=radio"); + }, "Evaluation of :indeterminate changes on input type change."); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/inrange-outofrange-type-change.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/inrange-outofrange-type-change.html new file mode 100644 index 0000000..9c1be9ca --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/selectors/pseudo-classes/inrange-outofrange-type-change.html
@@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Selector: pseudo-classes (:in-range, :out-of-range) input type change</title> +<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#pseudo-classes"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + span { + color: red; + } + #t1:in-range + span { + color: green; + } + #t2:out-of-range + span { + color: green; + } +</style> +<input id="t1" type="text" min="0" max="10" value="5"> +<span id="sibling1">This text should be green.</span> +<input id="t2" type="text" min="0" max="10" value="50"> +<span id="sibling2">This text should be green.</span> +<script> + test(() => { + assert_equals(getComputedStyle(sibling1).color, "rgb(255, 0, 0)", + "Not matching :in-range for type=text"); + + t1.type = "number"; + + assert_equals(getComputedStyle(sibling1).color, "rgb(0, 128, 0)", + "Matching :in-range for type=number"); + }, "Evaluation of :in-range changes for input type change."); + + test(() => { + assert_equals(getComputedStyle(sibling2).color, "rgb(255, 0, 0)", + "Not matching :out-of-range for type=text"); + + t2.type = "number"; + + assert_equals(getComputedStyle(sibling2).color, "rgb(0, 128, 0)", + "Matching :in-range for type=number"); + }, "Evaluation of :out-of-range changes for input type change."); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-constructor.https.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-constructor.https.html index 6c8e3df..5568c18 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-constructor.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-constructor.https.html
@@ -529,17 +529,6 @@ assert_throws(new TypeError(), () => { new PaymentRequest(defaultMethods, modifiedDetails); }); - assert_throws(new TypeError(), () => { - const modifiedDetails = Object.assign({}, defaultDetails, { - modifiers: [ - { - supportedMethods: "https://wpt.fyi/payment-request", - data: function() {}, - }, - ], - }); - new PaymentRequest(defaultMethods, modifiedDetails); - }); }, "Rethrow any exceptions of JSON-serializing modifier.data"); //Setting ShippingType attribute during construction
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt index b8f69eb..98958a6 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt
@@ -1,6 +1,13 @@ This is a testharness.js-based test. -FAIL Constructor MUST throw if given an invalid payment method identifier assert_throws: expected RangeError processing invalid PMI "[object Object]" function "() => { - new PaymentRequest([invalidMethod], defaultDetails); +PASS Must support valid standard URL PMIs +PASS Must not throw on syntactically valid standardized payment method identifiers, even if they are not supported +FAIL Test for validity of payment method identifiers during construction assert_throws: expected RangeError processing invalid standardized PMI "basic-💳" function "() => { + const methods = [{ supportedMethods: invalidMethod }]; + new PaymentRequest(methods, defaultDetails); + }" did not throw +FAIL Constructor MUST throw if given an invalid URL-based payment method identifier assert_throws: expected RangeError processing invalid URL PMI "https://username@example.com/pay" function "() => { + const methods = [{ supportedMethods: invalidMethod }]; + new PaymentRequest(methods, defaultDetails); }" did not throw Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https.html index c9330c7..8173929 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-ctor-pmi-handling.https.html
@@ -7,58 +7,130 @@ <script src="/resources/testharnessreport.js"></script> <script> "use strict"; -const testMethod = Object.freeze({ - supportedMethods: "https://wpt.fyi/payment-request", -}); -const defaultMethods = Object.freeze([testMethod]); -const defaultAmount = Object.freeze({ +const validAmount = Object.freeze({ currency: "USD", value: "1.0", }); -const defaultTotal = Object.freeze({ +const validTotal = Object.freeze({ label: "Default Total", - amount: defaultAmount, + amount: validAmount, }); const defaultDetails = Object.freeze({ - total: defaultTotal, + total: validTotal, }); -// Avoid false positives, this should always pass -function smokeTest() { - new PaymentRequest(defaultMethods, defaultDetails); -} +test(() => { + const validMethods = [ + "https://wpt", + "https://wpt.fyi/", + "https://wpt.fyi/payment", + "https://wpt.fyi/payment-request", + "https://wpt.fyi/payment-request?", + "https://wpt.fyi/payment-request?this=is", + "https://wpt.fyi/payment-request?this=is&totally", + "https://wpt.fyi:443/payment-request?this=is&totally", + "https://wpt.fyi:443/payment-request?this=is&totally#fine", + "https://:@wpt.fyi:443/payment-request?this=is&totally#👍", + " \thttps://wpt\n ", + "https://xn--c1yn36f", + "https://點看", + ]; + for (const validMethod of validMethods) { + try { + const methods = [{ supportedMethods: validMethod }]; + new PaymentRequest(methods, defaultDetails); + } catch (err) { + assert_unreached( + `Unexpected exception with valid standardized PMI: ${validMethod}. ${err}` + ); + } + } +}, "Must support valid standard URL PMIs"); test(() => { - smokeTest(); + const validMethods = [ + "e", + "n6jzof05mk2g4lhxr-u-q-w1-c-i-pa-ty-bdvs9-ho-ae7-p-md8-s-wq3-h-qd-e-q-sa", + "a-b-q-n-s-pw0", + "m-u", + "s-l5", + "k9-f", + "m-l", + "u4-n-t", + "i488jh6-g18-fck-yb-v7-i", + "x-x-t-t-c34-o", + "basic-card", + ]; + for (const validMethod of validMethods) { + try { + const methods = [{ supportedMethods: validMethod }]; + new PaymentRequest(methods, defaultDetails); + } catch (err) { + assert_unreached( + `Unexpected exception with valid standardized PMI: ${validMethod}. ${err}` + ); + } + } +}, "Must not throw on syntactically valid standardized payment method identifiers, even if they are not supported"); + +test(() => { const invalidMethods = [ - { - supportedMethods: "http://username:password@example.com/pay", - }, - { - supportedMethods: "http://foo.com:100000000/pay", - }, - { - supportedMethods: "basic-💳", - }, - { - supportedMethods: "not-https://wpt.fyi/payment-request", - }, - { - supportedMethods: "¡basic-*-card!", - }, - { - supportedMethods: "Basic-Card", - }, + "basic-💳", + "¡basic-*-card!", + "Basic-Card", + "0", + "-", + "--", + "a--b", + "-a--b", + "a-b-", + "0-", + "0-a", + "a0--", + "A-", + "A-B", + "A-b", + "a-0", + "a-0b", + " a-b", + "\t\na-b", + "a-b ", + "a-b\n\t", ]; for (const invalidMethod of invalidMethods) { assert_throws( new RangeError(), () => { - new PaymentRequest([invalidMethod], defaultDetails); + const methods = [{ supportedMethods: invalidMethod }]; + new PaymentRequest(methods, defaultDetails); }, - `expected RangeError processing invalid PMI "${invalidMethod}"` + `expected RangeError processing invalid standardized PMI "${invalidMethod}"` ); } -}, "Constructor MUST throw if given an invalid payment method identifier"); +}); + +test(() => { + const invalidMethods = [ + "https://username@example.com/pay", + "https://:password@example.com/pay", + "https://username:password@example.com/pay", + "http://username:password@example.com/pay", + "http://foo.com:100000000/pay", + "not-https://wpt.fyi/payment-request", + "../realitive/url", + "/absolute/../path?", + "https://", + ]; + for (const invalidMethod of invalidMethods) { + assert_throws( + new RangeError(), + () => { + const methods = [{ supportedMethods: invalidMethod }]; + new PaymentRequest(methods, defaultDetails); + }, + `expected RangeError processing invalid URL PMI "${invalidMethod}"` + ); + } +}, "Constructor MUST throw if given an invalid URL-based payment method identifier"); </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/updateWith-method-pmi-handling-manual.https.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/updateWith-method-pmi-handling-manual.https.html new file mode 100644 index 0000000..36a23b5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/updateWith-method-pmi-handling-manual.https.html
@@ -0,0 +1,127 @@ +<!DOCTYPE html> +<!-- Copyright © 2017 Mozilla and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> +<meta charset="utf-8"> +<title>Test for validity of payment method identifiers when calling updateWith() method</title> +<link rel="help" href="https://www.w3.org/TR/payment-request/#updatewith()-method"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +"use strict"; +setup({ explicit_done: true, explicit_timeout: true }); +const validMethod = Object.freeze({ + supportedMethods: "https://:@wpt.fyi:443/payment-request", +}); + +const validMethods = Object.freeze([validMethod]); + +const validAmount = Object.freeze({ + currency: "USD", + value: "1.0", +}); + +const validTotal = Object.freeze({ + label: "Default Total", + amount: validAmount, +}); + +const validShippingOption = Object.freeze({ + id: "standard", + label: "Shipping option", + amount: validAmount, + selected: true, +}); + +const validDetails = Object.freeze({ + total: validTotal, + shippingOptions: [validShippingOption], +}); + +const validModifier = Object.freeze({ + supportedMethods: "basic-card", + total: validTotal, +}); + +test(() => { + try { + new PaymentRequest(validMethods, validDetails); + } catch (err) { + done(); + throw err; + } +}, "smoke test"); + +function manualTest(button, { invalidMethod }) { + button.disabled = true; + promise_test(async t => { + const request = new PaymentRequest( + [{ supportedMethods: "basic-card" }], + validDetails, + { requestShipping: true } + ); + const listener = ev => { + const invalidModifier = Object.assign({}, validModifier, { + supportedMethods: invalidMethod, + }); + const invalidDetails = Object.assign({}, validDetails, { + modifiers: [validModifier, invalidModifier], + }); + ev.updateWith(invalidDetails); + }; + // We test against a valid and an invalid modifier + request.addEventListener("shippingaddresschange", listener, { once: true }); + const showPromise = request.show(); + await promise_rejects(t, new RangeError(), showPromise); + }, button.textContent.trim()); +} +</script> +<h2>updateWith() method: test validity of payment method identifiers.</h2> +<p> + When shown a payment sheet, select a different address. +</p> +<ol> + <li> + <button onclick="manualTest(this, {invalidMethod: 'https://:password@example.com'});"> + Must throw if the URL has a password. + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: 'https://username@example.com'});"> + Must throw if the URL has a username. + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: 'https://username:password@example.com/pay'});"> + Must throw if the URL has a username and a password. + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: 'http://username:password@example.com/pay'});"> + Must throw if it's http, and has a username and password. + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: 'http://foo.com:100000000/pay'});"> + Must throw if the URL is invalid (port range). + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: 'basic-💳'});"> + Must throw if the PMI contains characters that are out of range. + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: 'not-https://wpt.fyi/payment-request'});"> + Must throw if not https. + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: '¡basic-*-card!'});"> + Must throw if the standardized PMI contains characters outside the ascii range. + </button> + </li> + <li> + <button onclick="manualTest(this, {invalidMethod: 'Basic-Card'}); done();"> + Must throw if standardized PMI has uppercase characters. + </button> + </li> +</ol>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer.html index 8711cb41..dfa4bdc 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer.html +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-createOffer.html
@@ -48,7 +48,7 @@ return pc.createOffer({ offerToReceiveAudio: true }) .then(offer => pc.setLocalDescription(offer) - .then(offer => { + .then(() => { assert_equals(pc.signalingState, 'have-local-offer'); assert_session_desc_equals(pc.localDescription, offer); assert_session_desc_equals(pc.pendingLocalDescription, offer);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js index 8d086e1..1963df1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-helper.js
@@ -69,7 +69,7 @@ assert_true(typeof(sessionDesc.type) === 'string', 'Expect sessionDescription.type to be a string'); - assert_true(typeof(sessionDesc.type) === 'string', + assert_true(typeof(sessionDesc.sdp) === 'string', 'Expect sessionDescription.sdp to be a string'); }
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer.html index 65f4730..7dbcb3a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer.html +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-offer.html
@@ -58,7 +58,7 @@ return generateOffer({ data: true }) .then(offer => pc.setRemoteDescription(offer) - .then(offer => { + .then(() => { assert_equals(pc.signalingState, 'have-remote-offer'); assert_session_desc_equals(pc.remoteDescription, offer); assert_session_desc_equals(pc.pendingRemoteDescription, offer); @@ -127,9 +127,9 @@ return pc.createOffer() .then(offer => pc.setLocalDescription(offer)) .then(() => generateOffer()) - .then(offer => + .then(offer2 => promise_rejects(t, 'InvalidStateError', - pc.setRemoteDescription(offer))); + pc.setRemoteDescription(offer2))); }, 'Calling setRemoteDescription(offer) from have-local-offer state should reject with InvalidStateError'); </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCTrackEvent-constructor.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCTrackEvent-constructor.html index 7948442..d5c5f62 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCTrackEvent-constructor.html +++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/RTCTrackEvent-constructor.html
@@ -43,9 +43,9 @@ assert_array_equals(trackEvent.streams, []); assert_equals(trackEvent.transceiver, transceiver); - assert_equals(event.type, 'track'); - assert_false(event.bubbles); - assert_false(event.cancelable); + assert_equals(trackEvent.type, 'track'); + assert_false(trackEvent.bubbles); + assert_false(trackEvent.cancelable); }, `new RTCTrackEvent() with valid receiver, track, transceiver should succeed`);
diff --git a/third_party/WebKit/LayoutTests/fast/backgrounds/repeat/margin-shorthand-expected.txt b/third_party/WebKit/LayoutTests/fast/backgrounds/repeat/margin-shorthand-expected.txt index 6189732..ea408ce6 100644 --- a/third_party/WebKit/LayoutTests/fast/backgrounds/repeat/margin-shorthand-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/backgrounds/repeat/margin-shorthand-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 12: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 12: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. This layouttest was initially there to test that shorthand property value is correct even if background-repeat property is declared before it in the style declaration. It used to test regression described in this bug. Now that access to non author stylesheet is blocked, we should instead get null when accessing the css rules on that object. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt index eb82c478b..e89c93d 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -4,37 +4,36 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='outer'", "position": [50, 50], - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] }, { "name": "Child Containment Layer", "position": [50, 50], "bounds": [300, 300], + "drawsContent": false, "maskLayer": [ { "name": "Child Clipping Mask Layer", - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] } ] }, { "name": "Ancestor Clipping Layer", "position": [50, 50], - "bounds": [285, 300] + "bounds": [285, 300], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='content'", "position": [50, 50], "bounds": [285, 1000], - "contentsOpaque": true, - "drawsContent": true + "contentsOpaque": true } ] }
diff --git a/third_party/WebKit/LayoutTests/fast/css-grid-layout/changing-content-property-on-nested-grid-should-not-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/css-grid-layout/changing-content-property-on-nested-grid-should-not-crash-expected.txt new file mode 100644 index 0000000..790457b --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css-grid-layout/changing-content-property-on-nested-grid-should-not-crash-expected.txt
@@ -0,0 +1,3 @@ +This test PASSES if it does NOT CRASH. + +
diff --git a/third_party/WebKit/LayoutTests/fast/css-grid-layout/changing-content-property-on-nested-grid-should-not-crash.html b/third_party/WebKit/LayoutTests/fast/css-grid-layout/changing-content-property-on-nested-grid-should-not-crash.html new file mode 100644 index 0000000..9d20f2aa --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css-grid-layout/changing-content-property-on-nested-grid-should-not-crash.html
@@ -0,0 +1,22 @@ +<!DOCTYPE html> +<script> +if (window.testRunner) + testRunner.dumpAsText(); +</script> +<style> +.grid { display: grid; } +.lastBaseline { justify-self: baseline; } +.verticalLR { writing-mode: vertical-rl; } +.content { content: ""; } +</style> +<p>This test PASSES if it does NOT CRASH.</p> +<div class="grid"> + <div class="grid"> + <div id="item" class="lastBaseline verticalLR"></div> + </div> +</div> +<script> +document.body.offsetLeft; +item.classList.add("content"); +</script> +
diff --git a/third_party/WebKit/LayoutTests/fast/css-intrinsic-dimensions/block-min-width-and-max-width.html b/third_party/WebKit/LayoutTests/fast/css-intrinsic-dimensions/block-min-width-and-max-width.html new file mode 100644 index 0000000..98fd61e --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css-intrinsic-dimensions/block-min-width-and-max-width.html
@@ -0,0 +1,15 @@ +<!DOCTYPE html> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../../resources/check-layout-th.js"></script> + +<p>There should be a hotpink <em>square</em> below.</p> +<div id="container" style="display:flow-root;"> + <div data-expected-width="300" style="float:left; background:hotpink;"> + <div style="height:300px; min-width:300px; max-width:10px;"></div> + </div> +</div> + +<script> + checkLayout("#container"); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/css/border-radius-property-value-expected.txt b/third_party/WebKit/LayoutTests/fast/css/border-radius-property-value-expected.txt index bcc7104..245fc05 100644 --- a/third_party/WebKit/LayoutTests/fast/css/border-radius-property-value-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/css/border-radius-property-value-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 18: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 18: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. Test for Bug: 80736 - CSSStyleDeclaration.getPropertyValue() for 'border-radius' returns null when value is set On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/css/modify-ua-rules-from-javascript-expected.txt b/third_party/WebKit/LayoutTests/fast/css/modify-ua-rules-from-javascript-expected.txt index cb72787..d83b5b46 100644 --- a/third_party/WebKit/LayoutTests/fast/css/modify-ua-rules-from-javascript-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/css/modify-ua-rules-from-javascript-expected.txt
@@ -1,2 +1,2 @@ -CONSOLE WARNING: line 11: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 11: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. PASS
diff --git a/third_party/WebKit/LayoutTests/fast/css/word-break-user-modify-allowed-values-expected.txt b/third_party/WebKit/LayoutTests/fast/css/word-break-user-modify-allowed-values-expected.txt index 1090eb4..bd4bb6c 100644 --- a/third_party/WebKit/LayoutTests/fast/css/word-break-user-modify-allowed-values-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/css/word-break-user-modify-allowed-values-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 7: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 7: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. This page tests that invalid values for the word-break and -webkit-user-modify properties are rejected by the CSS parser. PASS
diff --git a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-parent-rule-without-wrapper-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-parent-rule-without-wrapper-expected.txt index f9eab41f..9a5d0d6f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-parent-rule-without-wrapper-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-parent-rule-without-wrapper-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 1: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 1: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. Test that detached CSSOM subtrees keeps a reference to CSS stylesheets lacking wrappers. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper-expected.txt index 79d3b37..0d59600 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 15: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 15: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. Test that detached CSSOM subtrees keeps a reference to CSS stylesheets lacking wrappers. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-media-rule-deleted-parent-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-media-rule-deleted-parent-crash-expected.txt index 96f3115..e522029 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-media-rule-deleted-parent-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-media-rule-deleted-parent-crash-expected.txt
@@ -1,2 +1,2 @@ -CONSOLE WARNING: line 16: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 16: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. PASS
diff --git a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash-expected.txt index 96f3115..e522029 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash-expected.txt
@@ -1,2 +1,2 @@ -CONSOLE WARNING: line 16: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 16: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. PASS
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules-expected.txt index db811eb..69caa0036 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-nested-rules-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 1: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 1: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. getMatchedCSSRules with nested CSS rules On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-null-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-null-crash-expected.txt index 10b7e12..63606d86 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-null-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-null-crash-expected.txt
@@ -1,2 +1,2 @@ -CONSOLE WARNING: line 4: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 4: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. SUCCESS (getMatchedCSSRule(null, ...) did not crash).
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets-expected.txt index 1e2d687..994b5bf 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 16: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 16: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. getMatchedCSSRules returns CSSStyleRules with correct parent stylesheet. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements-expected.txt index d86273a..dbc85e56 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 1: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 1: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. getMatchedCSSRules with invalid Pseudo Elements On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex-expected.txt index d0226f7..e881f58 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-complex-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 83: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 83: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. Test for WebKit bug 78595: CollectingRules and QueryingRules modes of SelectorChecker miss some complex selectors with pseudo elements
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-expected.txt index 1b15985..79793b6 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 20: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 20: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. Test for getMatchedCSSRules for Pseudo Elements On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone-expected.txt index 74448e3..aab6f28 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone-expected.txt
@@ -7,8 +7,6 @@ PASS: 'postMessage(uint8Array)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': An ArrayBuffer is neutered and could not be cloned. PASS: 'postMessage(window)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': #<Window> could not be cloned. PASS: 'postMessage(({get a() { throw "x" }}))' threw x -PASS: 'postMessage(blob.close(); blob)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': A Blob object has been closed, and could therefore not be cloned. -PASS: 'postMessage(constructedFile.close(); constructedFile)' threw DataCloneError: Failed to execute 'postMessage' on 'Window': A File object has been closed, and could therefore not be cloned. PASS: 'postMessage((function() {return {get a() { throw "accessor-exn"; }};})())' threw accessor-exn PASS: 'postMessage((function() {var obja = {get p() { throw "accessor-exn"; }}; return {get a() { return obja; }};})())' threw accessor-exn PASS: lastIndex initially correct: was 3
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone.html b/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone.html index 006e7f5..2fb4cf7 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone.html +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/window-postmessage-clone.html
@@ -83,17 +83,13 @@ for (var i = 0; i < imageData.data.length * 4; i++) mutatedImageData.data[i] = 0; -// Test close() special case for Blob (and File.) - var blob = new Blob(["Hello"]); var blobSize = blob.size; tryPostMessage('blob', false, "evalThunk", function(v) { doPassFail(v.size === blobSize, "Cloned Blob size equal to the original size."); }); -tryPostMessage('blob.close(); blob', true, null, DOMException.DATA_CLONE_ERR); var constructedFile = new File(["Hello"], "test"); var fileSize = constructedFile.size; tryPostMessage('constructedFile', false, "evalThunk", function(v) { doPassFail(v.size === fileSize, "Cloned File size equal to the original size."); }); -tryPostMessage('constructedFile.close(); constructedFile', true, null, DOMException.DATA_CLONE_ERR); function thunk(s) { return "(function() {" + s + "})()";
diff --git a/third_party/WebKit/LayoutTests/fast/dom/script-module-inline-error-gc-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/script-module-inline-error-gc-expected.txt index caea5e41..4e30633 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/script-module-inline-error-gc-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/script-module-inline-error-gc-expected.txt
@@ -1,2 +1,2 @@ -CONSOLE ERROR: line 11: Uncaught SyntaxError: Unexpected token % +CONSOLE ERROR: line 12: Uncaught SyntaxError: Unexpected token % This test pass if no crash.
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-matched-css-rules-with-dirty-dirstibution-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-matched-css-rules-with-dirty-dirstibution-crash-expected.txt index 344e8bf5f..c4866050 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-matched-css-rules-with-dirty-dirstibution-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-matched-css-rules-with-dirty-dirstibution-crash-expected.txt
@@ -1,3 +1,3 @@ -CONSOLE WARNING: line 8: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 8: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. Tests that getMatchedCSSRules with dirty distribution doesn't crash.
diff --git a/third_party/WebKit/LayoutTests/fast/files/blob-close-expected.txt b/third_party/WebKit/LayoutTests/fast/files/blob-close-expected.txt deleted file mode 100644 index 90bdb53..0000000 --- a/third_party/WebKit/LayoutTests/fast/files/blob-close-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -Test the Blob.close() method, basic functionality. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -PASS blob instanceof window.Blob is true -PASS blob.size is 5 -PASS blob.isClosed is false -PASS blob.close(); blob.size is 0 -PASS blob.isClosed is true -PASS blob.type is "text/plain" -PASS sliced1.size is 3 -PASS blob.isClosed is false -PASS blob.close(); blob.size is 0 -PASS blob.isClosed is true -PASS blob.type is "text/plain" -PASS sliced1.size is 3 -PASS sliced2.size is 1 -PASS blob.slice(2) threw exception InvalidStateError: Failed to execute 'slice' on 'Blob': Blob has been closed.. -PASS blob.close() threw exception InvalidStateError: Failed to execute 'close' on 'Blob': Blob has been closed.. -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/fast/files/blob-close-read-expected.txt b/third_party/WebKit/LayoutTests/fast/files/blob-close-read-expected.txt deleted file mode 100644 index 7d53ff0..0000000 --- a/third_party/WebKit/LayoutTests/fast/files/blob-close-read-expected.txt +++ /dev/null
@@ -1,26 +0,0 @@ -Test the Blob.close() method, reading. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -Testing that the reading of closed Blobs fail. -PASS blob.close(); blob.size is 0 -PASS reader.readAsArrayBuffer(blob) threw exception InvalidStateError: Failed to execute 'readAsArrayBuffer' on 'FileReader': Blob has been closed.. -PASS reader.readAsBinaryString(blob) threw exception InvalidStateError: Failed to execute 'readAsBinaryString' on 'FileReader': Blob has been closed.. -PASS reader.readAsText(blob) threw exception InvalidStateError: Failed to execute 'readAsText' on 'FileReader': Blob has been closed.. -PASS reader.readAsDataURL(blob) threw exception InvalidStateError: Failed to execute 'readAsDataURL' on 'FileReader': Blob has been closed.. -Testing that ongoing async reads aren't interrupted by close() -PASS reader2.readAsArrayBuffer(blob) threw exception InvalidStateError: Failed to execute 'readAsArrayBuffer' on 'FileReader': Blob has been closed.. -PASS blob.size is 0 -PASS FileReader loaded: 0123456789abcdef -PASS readAsText() completed -PASS blob.size is 0 -Testing that sliced reads aren't affected by close() on 'parent' Blob. -PASS sliced.size is 14 -PASS result is "23456789abcdef" -PASS readAsText() completed -PASS sliced.size is 14 -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/fast/files/blob-close-read.html b/third_party/WebKit/LayoutTests/fast/files/blob-close-read.html deleted file mode 100644 index bd17f0c..0000000 --- a/third_party/WebKit/LayoutTests/fast/files/blob-close-read.html +++ /dev/null
@@ -1,95 +0,0 @@ -<!doctype html> -<script src="../../resources/js-test.js"></script> -<script src="resources/read-common.js"></script> -<script> -description("Test the Blob.close() method, reading."); - -window.jsTestIsAsync = true; - -var blobContents = ['0123456789abcdef']; - -var blob; -var sliced; -var reader; -var reader2; -var result; - -function testReadAfterClose() -{ - debug("Testing that the reading of closed Blobs fail."); - blob = new Blob(blobContents); - shouldBe("blob.close(); blob.size", "0"); - reader = new FileReader(); - shouldThrow("reader.readAsArrayBuffer(blob)"); - shouldThrow("reader.readAsBinaryString(blob)"); - shouldThrow("reader.readAsText(blob)"); - shouldThrow("reader.readAsDataURL(blob)"); - runNextTest(); -} - -function testSlicedReadAfterClose() -{ - debug("Testing that sliced reads aren't affected by close() on 'parent' Blob."); - blob = new Blob(blobContents); - sliced = blob.slice(2); - shouldBe("sliced.size", "14"); - blob.close(); - var reader = new FileReader(); - reader.onload = function(event) { - result = event.target.result; - shouldBeEqualToString("result", blobContents[0].slice(2)); - } - reader.onloadend = function() { - testPassed("readAsText() completed"); - shouldBe("sliced.size", "14"); - runNextTest(); - } - reader.onerror = function(event) { - testFailed("Received error event: " + event.target.error.code); - }; - reader.readAsText(sliced); -} - -function testContinuedReadAfterClose() -{ - debug("Testing that ongoing async reads aren't interrupted by close()"); - blob = new Blob(blobContents); - var reader = new FileReader(); - reader.onloadstart = function(event) { - // Close the Blob being read. - blob.close(); - reader2 = new FileReader(); - shouldThrow("reader2.readAsArrayBuffer(blob)"); - shouldBe("blob.size", "0"); - } - reader.onload = function(event) { - testPassed("FileReader loaded: " + event.target.result); - } - reader.onloadend = function() { - testPassed("readAsText() completed"); - shouldBe("blob.size", "0"); - runNextTest(); - } - reader.onerror = function(event) { - testFailed("Received error event: " + event.target.error.code); - runNextTest(); - }; - reader.readAsText(blob); -} - -var tests = [ - testReadAfterClose, - testContinuedReadAfterClose, - testSlicedReadAfterClose ]; - -function runNextTest() -{ - if (!tests.length) { - finishJSTest(); - return; - } - tests.shift()(); -} - -runNextTest(); -</script>
diff --git a/third_party/WebKit/LayoutTests/fast/files/blob-close-revoke-expected.txt b/third_party/WebKit/LayoutTests/fast/files/blob-close-revoke-expected.txt deleted file mode 100644 index 3b565eae..0000000 --- a/third_party/WebKit/LayoutTests/fast/files/blob-close-revoke-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -Test the Blob.close() method, revoking. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -Test that dereferencing URLs referring to closed Blobs fail. -PASS Error triggered on loading image from closed Blob. -Test that dereferencing URLs referring to closed Blobs fail, workers. -PASS Worker loaded. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -PASS Error triggered on starting Worker from a closed Blob. -Test creating object URLs on closed Blobs -PASS window.URL.createObjectURL(blob); threw exception InvalidStateError: Failed to execute 'createObjectURL' on 'URL': Blob has been closed.. -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/fast/files/blob-close-revoke.html b/third_party/WebKit/LayoutTests/fast/files/blob-close-revoke.html deleted file mode 100644 index 5a1f562..0000000 --- a/third_party/WebKit/LayoutTests/fast/files/blob-close-revoke.html +++ /dev/null
@@ -1,118 +0,0 @@ -<!doctype html> -<script src="../../resources/js-test.js"></script> -<script src="resources/read-common.js"></script> -<script> -description("Test the Blob.close() method, revoking."); - -window.jsTestIsAsync = true; - -function base64ToUint8Array(a) -{ - var binary = window.atob(a); - var buffer = new Uint8Array(binary.length); - for (var i = 0; i < binary.length; i++) - buffer[i] = binary.charCodeAt(i); - - return buffer; -} - -var pngBase64 = "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR42u3QMQEAAAgDoGlyo1vBzwciUJlw1ApkyZIlS5YsBbJkyZIlS5YCWbJkyZIlS4EsWbJkyZKlQJYsWbJkyVIgS5YsWbJkKZAlS5YsWbIUyJIlS5YsWQpkyZIlS5YsBbJkyZIlS5YCWbJkyZIlS4EsWbJkyZKlQJYsWbJkyVIgS5YsWbJkKZAlS5YsWbIUyJIlS5YsWQpkyfq2MosBSIeKONMAAAAASUVORK5CYII="; - -var blobContents = [base64ToUint8Array(pngBase64)]; - -var blob; -var blobURL1; -var blobURL2; -var img; -var worker; -var blobURLs = []; - -function testRevokeAfterCloseWorkers() -{ - debug("Test that dereferencing URLs referring to closed Blobs fail, workers."); - blob = new Blob(["postMessage('FAIL');"], {type: "application/javascript"}); - for (var i = 0; i < 10; i++) - blobURLs.push(window.URL.createObjectURL(blob)); - - // First check that the Blob URL can be used by a Worker, - // then close it and verify that the rest cannot. - - function onNonClosedError() { - testFailed("Worker failed to load from Blob."); - blob.close(); - testNextWorker(); - } - function onNonClosedMessage() { - testPassed("Worker loaded."); - blob.close(); - testNextWorker(); - } - function onClosedError() { - testPassed("Error triggered on starting Worker from a closed Blob."); - testNextWorker(); - } - function onClosedMessage() { - testFailed("Worker loaded."); - testNextWorker(); - } - - function testNextWorker(onerror, onmessage) { - var u = blobURLs.shift(); - if (u) { - worker = new Worker(u); - worker.onerror = onerror ? onerror : onClosedError; - worker.onmessage = onmessage ? onmessage : onClosedMessage; - } else { - runNextTest(); - } - } - testNextWorker(onNonClosedError, onNonClosedMessage); -} - -function testRevokeAfterClose() -{ - debug("Test that dereferencing URLs referring to closed Blobs fail."); - blob = new Blob(blobContents, {type: "image/png"}); - img = document.createElement("img"); - img.onerror = function (e) { - testPassed("Error triggered on loading image from closed Blob."); - runNextTest(); - }; - img.onload = function () { - testFailed("Image loaded"); - runNextTest(); - }; - blobURL1 = window.URL.createObjectURL(blob); - // create some more Blob URLs. - for (var i = 0; i < 10; i++) - window.URL.createObjectURL(blob); - // Make them all inaccessible. - blob.close(); - img.src = blobURL1; -} - -function testCreateAfterClose() -{ - debug("Test creating object URLs on closed Blobs"); - blob = new Blob(["body{background: green}"], {type: "text/css"}); - blob.close(); - shouldThrow("window.URL.createObjectURL(blob);"); - runNextTest(); -} - -var tests = [ - testRevokeAfterClose, - testRevokeAfterCloseWorkers, - testCreateAfterClose ]; - -function runNextTest() -{ - if (!tests.length) { - finishJSTest(); - return; - } - tests.shift()(); -} -</script> -<body onload="runNextTest()"> -</body>
diff --git a/third_party/WebKit/LayoutTests/fast/files/blob-close.html b/third_party/WebKit/LayoutTests/fast/files/blob-close.html deleted file mode 100644 index cbda205..0000000 --- a/third_party/WebKit/LayoutTests/fast/files/blob-close.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!doctype html> -<script src="../../resources/js-test.js"></script> -<script src="resources/read-common.js"></script> -<script> -description("Test the Blob.close() method, basic functionality."); - -var blobContents = ['hello']; -var blob = new Blob(blobContents); -shouldBeTrue("blob instanceof window.Blob"); -shouldBe("blob.size", "5"); -shouldBe("blob.isClosed", "false"); -shouldBe("blob.close(); blob.size", "0"); -shouldBe("blob.isClosed", "true"); - -blob = new Blob(blobContents, {type: "text/plain"}); -shouldBeEqualToString("blob.type", "text/plain"); -var sliced1 = blob.slice(2); -shouldBe("sliced1.size", "3"); -shouldBe("blob.isClosed", "false"); -shouldBe("blob.close(); blob.size", "0"); -shouldBe("blob.isClosed", "true"); -shouldBeEqualToString("blob.type", "text/plain"); -shouldBe("sliced1.size", "3"); -var sliced2 = sliced1.slice(2); -shouldBe("sliced2.size", "1"); -shouldThrow("blob.slice(2)"); -shouldThrow("blob.close()"); -</script>
diff --git a/third_party/WebKit/LayoutTests/fast/imagecapture/MediaStreamTrack-applyConstraints.html b/third_party/WebKit/LayoutTests/fast/imagecapture/MediaStreamTrack-applyConstraints.html index af1e92b..94781a23 100644 --- a/third_party/WebKit/LayoutTests/fast/imagecapture/MediaStreamTrack-applyConstraints.html +++ b/third_party/WebKit/LayoutTests/fast/imagecapture/MediaStreamTrack-applyConstraints.html
@@ -21,11 +21,26 @@ assert_equals(stream.getVideoTracks().length, 1); var videoTrack = stream.getVideoTracks()[0]; - assert_equals(typeof videoTrack.applyConstraints, 'function'); - return videoTrack.applyConstraints(); }, 'MediaStreamTrack.applyConstraints()'); +// This test verifies that MediaStreamTrack.applyConstraints() exists and that, +// when called with an empty advanced constraint set, returns a Promise that is +// resolved. +promise_test(function(t) { +var canvas = document.getElementById('canvas'); +var context = canvas.getContext("2d"); +context.fillStyle = "red"; +context.fillRect(0, 0, 10, 10); + +var stream = canvas.captureStream(); +assert_equals(stream.getAudioTracks().length, 0); +assert_equals(stream.getVideoTracks().length, 1); + +var videoTrack = stream.getVideoTracks()[0]; +return videoTrack.applyConstraints({advanced: []}); +}, 'MediaStreamTrack.applyConstraints({advanced: []})'); + // This test verifies that applyConstraints() rejects the returned Promise if // passed a non-supported image-capture constraint (https://crbug.com/711694). promise_test(function(t) {
diff --git a/third_party/WebKit/LayoutTests/fast/inspector-support/style-expected.txt b/third_party/WebKit/LayoutTests/fast/inspector-support/style-expected.txt index ede151a..8f5375f 100644 --- a/third_party/WebKit/LayoutTests/fast/inspector-support/style-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/inspector-support/style-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 15: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 15: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. Note that background is buggy right now! Test background-image: initial
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/multicol/composited-layer-expected.txt index 940997b6..15b06e6d 100644 --- a/third_party/WebKit/LayoutTests/fast/multicol/composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/multicol/composited-layer-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, -"drawsContent": true +"backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='multicol'", "position": [8, 8], -"bounds": [200, 100], -"drawsContent": true +"bounds": [200, 100] } ] }
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/block-with-border-overflow-expected.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/block-with-border-overflow-expected.html new file mode 100644 index 0000000..f9a2fca --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/block-with-border-overflow-expected.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<div style="display:inline-block; overflow:hidden; border:1.25px solid black;"> + <div style="background-color:green; width:200px; height:100.5px;"> + Should neither overflow nor display a scrollbar. + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/block-with-border-overflow.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/block-with-border-overflow.html new file mode 100644 index 0000000..ee5701a --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/block-with-border-overflow.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<div style="display:inline-block; overflow:auto; border:1.25px solid black;"> + <div style="background-color:green; width:200px; height:100.5px;"> + Should neither overflow nor display a scrollbar. + </div> +</div>
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 695029d..997b531c 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
@@ -5,13 +5,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='container'", "position": [11, 0], "bounds": [100, 50], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'", @@ -40,13 +39,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='container'", "position": [11, 0], "bounds": [100, 50], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'", @@ -75,13 +73,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='container'", "position": [10, 0], "bounds": [100, 50], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'", @@ -110,13 +107,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='container'", "position": [11, 0], "bounds": [100, 50], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'", @@ -145,13 +141,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='container'", "position": [10, 0], "bounds": [100, 50], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt index d6be07fb0..f1025cfa 100644 --- a/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt
@@ -5,12 +5,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [18, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -21,12 +22,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [18, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -37,12 +39,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [18, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -53,12 +56,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [18, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -69,12 +73,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -85,12 +90,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -101,12 +107,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -117,12 +124,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -133,12 +141,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -149,12 +158,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -165,12 +175,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -181,12 +192,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -197,12 +209,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -213,12 +226,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [19, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -229,12 +243,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [20, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -245,12 +260,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [20, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -261,12 +277,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [20, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -277,12 +294,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [20, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -293,12 +311,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [20, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -309,12 +328,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [20, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] } @@ -325,12 +345,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", "position": [20, 8], - "bounds": [100, 50] + "bounds": [100, 50], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-capitalize-expected.html b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-capitalize-expected.html new file mode 100644 index 0000000..623c447c --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-capitalize-expected.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<style> +</style> +<p>This Is A Somewhat<br>long HTML<br>paragraph.</p> +<script> +
diff --git a/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-capitalize.html b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-capitalize.html new file mode 100644 index 0000000..32646b2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-capitalize.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<style> +p { width: 140px } +p::first-line { text-transform: capitalize; } +</style> +<p>This is a somewhat long HTML paragraph.</p>
diff --git a/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-expected.html b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-expected.html new file mode 100644 index 0000000..2950ab7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-expected.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<style> +</style> +<p>THIS IS A SOMEWHAT<br>long HTML<br>paragraph.</p> +<script> +
diff --git a/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-lowercase-expected.html b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-lowercase-expected.html new file mode 100644 index 0000000..88fcf061 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-lowercase-expected.html
@@ -0,0 +1,2 @@ +<!DOCTYPE html> +<p>this is a somewhat<br>long HTML<br>paragraph.</p>
diff --git a/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-lowercase.html b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-lowercase.html new file mode 100644 index 0000000..3854cc0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line-lowercase.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<style> +p { width: 140px } +p::first-line { text-transform: lowercase; } +</style> +<p>This is a somewhat long HTML paragraph.</p>
diff --git a/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line.html b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line.html new file mode 100644 index 0000000..204eca8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text/transform-text-first-line.html
@@ -0,0 +1,7 @@ +<!DOCTYPE html> +<style> +p { width: 140px } +p::first-line { text-transform: uppercase; } +</style> +<p>This is a somewhat long HTML paragraph.</p> +
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 d7af0c1..db9aae52 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-display-block-to-none-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-display-block-to-none-expected.txt index 50ead87..ace68e23 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-display-block-to-none-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-display-block-to-none-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-change-containing-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-change-containing-block-expected.txt index b07d34ae..8931b38 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-change-containing-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-change-containing-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-moved-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-moved-expected.txt index 703f4852..c6bf24f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-moved-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/absolute-position-moved-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/add-table-overpaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/add-table-overpaint-expected.txt index 6bd32049..8a21707 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/add-table-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/add-table-overpaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-items-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-items-change-expected.txt index 5166dec..1b883bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-items-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-self-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-self-change-expected.txt index 5166dec..1b883bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/align-self-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-currentColor-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-currentColor-repaint-expected.txt index e3a0c79..f07fc53 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-currentColor-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-currentColor-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div2'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-misaligned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-misaligned-expected.txt index 81413d3a..18c8de5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-misaligned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-misaligned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-resize-height-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-resize-height-expected.txt index 3c4c583..2cf0cc6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-resize-height-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background-resize-height-expected.txt
@@ -4,14 +4,14 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='test image'", "position": [8, 8], "bounds": [560, 144], - "contentsOpaque": false, - "drawsContent": true, + "backfaceVisibility": "hidden", + "backgroundColor": "#000000", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='test generated repeat-round'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt index 20ba6ebb..9978d87c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
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 05093c3..7c8bec58f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'La la la la'",
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 df0d08a..4359928 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='half'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/body-background-image-expected.txt deleted file mode 100644 index e3eebb9..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/body-background-image-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "rect": [8, 240, 784, 288], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/body-background-not-propagated-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/body-background-not-propagated-expected.txt deleted file mode 100644 index a331a42..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/body-background-not-propagated-expected.txt +++ /dev/null
@@ -1,28 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "rect": [8, 8, 600, 100], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-outline-0-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-outline-0-expected.txt index 6965a08..54e4acc5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-outline-0-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-outline-0-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='border-image'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-radius-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-radius-repaint-2-expected.txt index 6890805..bbd88f3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-radius-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-radius-repaint-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [874, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#3F3F3F", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-repaint-glitch-expected.txt index 0c9ec5e..779cf276 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/border-repaint-glitch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-inline-resize-expected.txt index 1f81cbe..5b6271d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-inline-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Chromium'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-sizing-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-sizing-expected.txt index 7d428241..b6b4604 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-sizing-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box-sizing-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'",
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 9a36f9b..24159fd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='im'",
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 212aa8b..a71a0b8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Hello'",
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 bb36407..99d9231e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6388-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6388-expected.txt index e4bdf2f..913d4c27 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6388-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6388-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
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 92e4747e..19213601 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) P",
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 7397a7eb..807d8e8d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-contenteditable-content-after-expected.txt index c34103f..7da30c7bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-contenteditable-content-after-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='editor'",
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 9e743f41..ca40e9b2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "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 d90a0c32..67849d0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-with-transformation-expected.txt index 954a7d6..caff741 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-with-transformation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "Caret",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-text-content-and-background-color-expected.txt index 92593029..2d901d5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-text-content-and-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) INPUT id='input'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-transform-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-transform-expected.txt index 2e83406..2d634955 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/change-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='square'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-unclip-and-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-unclip-and-change-expected.txt index 40f8c71..91de9ff 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-unclip-and-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-unclip-and-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-with-layout-delta-expected.txt index 658357e..181c36e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip-with-layout-delta-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clipped-relative-expected.txt index 570bf580..0512f20 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clipped-relative-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG",
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 47823c2..7f6dbcd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV id='float'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/containing-block-position-change-expected.txt index ba171650..c198708 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/containing-block-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/containing-block-position-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/content-into-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/content-into-overflow-expected.txt index 5f9191a3..7bb10a730 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/content-into-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/content-into-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/control-clip-expected.txt index 2f63dde..b5bb31d0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/control-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'SUCCESS'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-2-expected.txt index 8a690c7..34f53ec 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
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 cde8904e5..c985560 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep_child'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-4-expected.txt index f4e420eb..1232638 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-4-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-4-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-expected.txt index 39382ba..06b166b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-clip-change-stacking-child-expected.txt index 6f433408..943f859a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-clip-change-stacking-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 3a64a27..52e0eb5c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'three'", @@ -17,13 +17,13 @@ "reason": "appeared" }, { - "object": "InlineTextBox 'two'", - "rect": [8, 147, 28, 20], + "object": "InlineTextBox 'one'", + "rect": [8, 127, 27, 20], "reason": "disappeared" }, { - "object": "InlineTextBox 'one'", - "rect": [8, 127, 27, 20], + "object": "InlineTextBox 'two'", + "rect": [8, 147, 24, 20], "reason": "disappeared" }, {
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 4817955..033e571 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/erase-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/erase-overflow-expected.txt index fcd189ca..1b45a672 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/erase-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/erase-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filter-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filter-invalidation-after-display-expected.txt index 7676c842..d1a5e10 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filter-invalidation-after-display-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filter-invalidation-after-display-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box' class='green drop-shadowed box'",
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 5fc88ad..f2dcdc4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='before box'",
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 ff44330..7b2050ee 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box before'",
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 2a35d91b..efb4a12 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box before'",
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 4d15d0b..1a9b467 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box before'",
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 e830390..77bd6a0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
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 cb77f71..4bef6d9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML",
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 fdf4e56..3eeca4d1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-expected.txt index d1e1ce6..a09eee4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='outer'", @@ -472,8 +472,7 @@ "name": "LayoutBlockFlow (floating) DIV", "position": [59, 426], "bounds": [64, 97], - "contentsOpaque": false, - "drawsContent": true, + "backgroundColor": "#ADD8E6", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-right-expected.txt index cc14f0af..7d0522c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-overflow-right-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='outer'", @@ -472,8 +472,7 @@ "name": "LayoutBlockFlow (floating) DIV", "position": [677, 426], "bounds": [64, 97], - "contentsOpaque": false, - "drawsContent": true, + "backgroundColor": "#ADD8E6", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-continuations-expected.txt index 5e16de52..2fb0bd3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-enable-continuations-expected.txt index eacd06df..6ae7770 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-enable-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt index 69df868..cde0514 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN",
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 0bea246..1c328c4b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton BUTTON",
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 2678298..49f7a86 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSlider INPUT",
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 6a0e4d64..da3952e1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton INPUT",
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 d626117..978c619 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='box4' class='box'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/hover-pseudo-borders-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/hover-pseudo-borders-expected.txt deleted file mode 100644 index c40943e3..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/hover-pseudo-borders-expected.txt +++ /dev/null
@@ -1,37 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) \u003Cpseudo:after\u003E", - "rect": [138, 8, 100, 100], - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='hitregion'", - "rect": [8, 8, 100, 100], - "reason": "style change" - } - ] - } - ], - "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/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 fae4c0e..f21af3f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutIFrame IFRAME id='iframe'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-scrollbar-hover-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-scrollbar-hover-expected.txt index 27072d5..0391dabc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-scrollbar-hover-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-scrollbar-hover-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "VerticalScrollbar",
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 ae762b58..4cd8551 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
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 593506e..69ad3ae6c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineFlowBox",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-2-expected.txt index 2437747..4f7a71f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-2-expected.txt
@@ -4,8 +4,7 @@ "name": "LayoutView #document", "position": [0, -5], "bounds": [800, 605], - "contentsOpaque": false, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-expected.txt index f27bb30f..45d0db5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-outline-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='test'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-overflow-expected.txt index b960409..69d55a1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'A\u00A0\u00A0B'",
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 ae45675..6adcf83 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'A A A A A AA AA'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-relative-positioned-expected.txt index d495092..599a895 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-relative-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'a'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-lr-overflow-expected.txt index b1984167..f41644e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-lr-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'A\u00A0\u00A0B'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-rl-overflow-expected.txt index 85460b7..907e2fc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-vertical-rl-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'A\u00A0\u00A0B'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/input-overflow-in-table-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/input-overflow-in-table-expected.txt index de89491..9aca4ab 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/input-overflow-in-table-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/input-overflow-in-table-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
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 63554274..33805ab 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-clip-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-clip-expected.txt index 70001d8..d850086 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-expected.txt index a1cfad5..0c851cb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/intermediate-layout-position-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt index de6ee5a00..d8f0e24 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineFlowBox",
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 0da1bc5..5dbeac07 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='root' class='editing'",
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 9cb2e74..55ec79c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ], "objectPaintInvalidations": [
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 0f8b873e..46ad1bd1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML",
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 f730811a..4256039 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-relative-expected.txt index 7ad4b37..7a73d812 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-relative-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'PASS'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset-expected.txt index 82eb0fb..87ac73e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'before'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset2-expected.txt index bc04889..51e660fa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'before'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset3-expected.txt index ad5adbb..7a244ed 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layout-state-scrolloffset3-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'before'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index f32dc1b..9a847fc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-in-scrolled-clipped-block-expected.txt index 262f9d47..846b05b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-in-scrolled-clipped-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-in-scrolled-clipped-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' FAIL .'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-overflow-expected.txt index 4ada816..4c05419 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/line-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' eleifend'",
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 56b95e7..6dc9fe86 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'PASS'",
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 a65e73f..2deb2638 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG id='target'",
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 f8211a9a..dde93693 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'about all the stuff'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/mask-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/mask-clip-change-stacking-child-expected.txt index f11b48b..29f61d96 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/mask-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/mask-clip-change-stacking-child-expected.txt
@@ -4,21 +4,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [500, 500], - "contentsOpaque": false, - "drawsContent": true + "backgroundColor": "#ADD8E6" }, { "name": "LayoutBlockFlow (positioned) DIV id='target'", "position": [8, 8], "bounds": [300, 200], - "contentsOpaque": false, - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 9a9e113..22f0d81 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'PASSED'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-relpos-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-relpos-with-abspos-expected.txt index 4375e70c..47bd446 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-relpos-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-relpos-with-abspos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-with-abspos-expected.txt index 5953db4..8b97750c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol-with-abspos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'PASS'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/negative-shadow-box-shrink-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/negative-shadow-box-shrink-expected.txt index 56af3fdf..fe9a0792b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/negative-shadow-box-shrink-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/negative-shadow-box-shrink-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outer'",
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 4937ab4..63333a9d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' text is invalidated and '",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-change-invalidation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-change-invalidation-expected.txt index 5d5346f..3819250a3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-change-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-change-invalidation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow A id='link'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-child-repaint-expected.txt index e001accd..4ba0d53 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-child-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-child-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='outlined'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-clip-change-expected.txt index ef9ece2..1a48ca1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-clip-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-continuations-expected.txt index 6cfda16..b696393 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-delete-line-expected.txt index 13da917..ac626c8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-delete-line-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Lorem ipsu'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt index 79389ffc..03b5ee6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='innerWrapper'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hide-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hide-expected.txt index cbe2965..aee8e6a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hide-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-hide-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-into-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-into-content-expected.txt index f5c68cf..0b8ebc7f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-into-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-into-content-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-show-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-show-expected.txt index 20e3233..8dfdac5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-show-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow-show-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='relative green'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-content-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-content-size-expected.txt index f419e23..0a322bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-content-size-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-visual-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-visual-size-expected.txt index 6758b023..10876b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-visual-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/padding-keeping-visual-size-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
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 04825bb..e767763 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "Caret",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position-change-keeping-geometry-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position-change-keeping-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position-change-keeping-geometry-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-document-element-expected.txt index e78cf794..d7efdd3c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-document-element-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#008000", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-list-offset-change-repaint-expected.txt index 9c1bda0..b53829e6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/positioned-list-offset-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG",
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 b07897e..19707d06 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "RootInlineBox",
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 ba0c56e..88955bb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'quote 2'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection-repaint-test-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection-repaint-test-expected.txt index de037eb..e739d7c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection-repaint-test-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection-repaint-test-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/relative-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/relative-margin-change-repaint-expected.txt index d8e6cbc..68222d7e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/relative-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/relative-margin-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-block-after-layout-expected.txt index 325a70c9..9627971 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-block-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-block-after-layout-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 8efc46d..6afe45f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'This span should disappear.\n'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt index 905cffdc..8e00169 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inline-block-2' class='item'",
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 2af4cdf2..f4b94063 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 a053359..7572c38 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-resized-overflow-expected.txt index c9c6c17..c4d48f8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-resized-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-table-row-in-composited-document-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-table-row-in-composited-document-expected.txt index fd3d3d44..44627867 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-table-row-in-composited-document-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-table-row-in-composited-document-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index 23b7f3f9..d88bb7b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG",
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 a756173..067eab24d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [500, 400], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-scrollable-div-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-scrollable-div-expected.txt index 386c026..2b82051 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-scrollable-div-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-scrollable-div-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-with-border-expected.txt index f4ed6995..8429077 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-with-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='div'",
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 545d1c5..010436ed 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'b'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-clipped-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-clipped-layer-expected.txt index 1a3156c..c280ca4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-clipped-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-clipped-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-transformed-layer-expected.txt index 55766da..a11484a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-transformed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-in-transformed-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt index 392a26fc..4ea7439 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt index 66fd6fb9..1469901c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt index 02ca92aa..86fdf17 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
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 6bbd037..f8caeb14 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/select-option-background-color-expected.txt index 279f4414..ed1f4325 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/select-option-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/select-option-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutListBox SELECT",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selected-replaced-expected.txt index 09eec4b..d4b3f6d6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selected-replaced-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage (relative positioned) IMG id='test' class='moved'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-after-delete-expected.txt index b74c6577..8a317a8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-after-delete-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' '",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt index f177df55..2cf382e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Bazz'", @@ -111,6 +111,14 @@ { "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-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt index 8715f384..35407cd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
@@ -4,12 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Second cell'", - "rect": [11, 35, 77, 19], - "reason": "geometry" + "rect": [11, 35, 74, 19], + "reason": "selection" }, { "object": "InlineTextBox 'First cell'", @@ -50,11 +50,11 @@ }, { "object": "LayoutText #text", - "reason": "geometry" + "reason": "selection" }, { "object": "InlineTextBox 'Second cell'", - "reason": "geometry" + "reason": "selection" } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-rl-expected.txt index fcf99df..eae85c8d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection-rl-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Testing both hit testing'",
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 ef88878..81bdf307 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'xx'",
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 52f24c7..830b4cd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'xx'",
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 f4abc4b0..6d5c531 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'xx'",
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 6e523a4..3144db5 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
@@ -4,12 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'b'", - "rect": [8, 24, 16, 17], - "reason": "selection" + "rect": [8, 24, 32, 17], + "reason": "geometry" }, { "object": "InlineTextBox 'a'", @@ -55,11 +55,11 @@ }, { "object": "LayoutText #text", - "reason": "selection" + "reason": "geometry" }, { "object": "InlineTextBox 'b'", - "reason": "selection" + "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 11fb4a3..ff8172f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox '\u1EA6\u1EA4\u1EAA\u1EA8\u1EB0'",
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 a87502f..c8b591a 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
@@ -4,14 +4,14 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='outer'", "position": [278, 278], "bounds": [100, 100], - "contentsOpaque": false, - "drawsContent": true, + "backfaceVisibility": "hidden", + "backgroundColor": "#008000", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='outer'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/static-to-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/static-to-positioned-expected.txt index 32f0eab..cfeb0b5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/static-to-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/static-to-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subpixel-offset-scaled-transform-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subpixel-offset-scaled-transform-expected.txt index bd5967f3..a88ffa9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subpixel-offset-scaled-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subpixel-offset-scaled-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='child scale'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-layoutstate-transform-expected.txt index 01ebe44..b5264bda 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-layoutstate-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-layoutstate-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='layoutroot'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-2-expected.txt index 3e9d2376..e6a9caa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-3-expected.txt index e73e25c..109957ba 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-3-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-expected.txt index 22eae45..90e3af7c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
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 ac9f6f17..afe540b3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'PASS'",
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 375dd5a..0677859e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 30a77d25..8baeb15 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot (positioned) svg",
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 478016e..215b551 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
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 70aab79..6f251648 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' '",
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 deleted file mode 100644 index ea8502b..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/circle-move-invalidation-expected.txt +++ /dev/null
@@ -1,29 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutSVGEllipse circle id='c1'", - "rect": [196, 196, 76, 76], - "reason": "full" - }, - { - "object": "LayoutSVGEllipse circle id='c1'", - "rect": [46, 46, 76, 76], - "reason": "full" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle id='c1'", - "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 deleted file mode 100644 index ea1bedb2..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt +++ /dev/null
@@ -1,33 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutSVGEllipse circle", - "rect": [8, 8, 80, 80], - "reason": "style change" - }, - { - "object": "LayoutSVGEllipse circle", - "rect": [8, 8, 80, 80], - "reason": "style change" - } - ] - } - ], - "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 9f83886..8599633 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGViewportContainer svg id='mover'",
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 6f7bdfd..5c0a593 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 03cb8fbe8..fb40c86 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 906fa2d7..484dec1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 906fa2d7..484dec1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 aad1a02..49028e36 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 906fa2d7..484dec1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 74d764c7..1c47cceb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 c4ece62..b5f9919 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 c85d021..6def153 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGViewportContainer svg id='inner'",
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 029d9cf..ada07216 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 fd8cb22..9cf0fb2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 58eb6ab4..116f7e9f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 81c92c52..7252134 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg id='svg-root'",
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 e69fd79..a749c9b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Gradient on fill'",
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 a430528..d1349097 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 f529ab1..0384fc9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg id='svg-root'",
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 ecfaf2f..83672a2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Pattern on fill'",
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 de92cb9a..3842fc85 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 a09a292..675bd78 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 182ba04..68066e8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 c6e87f28..4c2dd0b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon id='polygon'",
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 c9bdce0..9abb5b1e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon id='polygon'",
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 45cac4ab..1b986a9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 292b460..9c4d312 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 8d4ff95a..0046be0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 8d4ff95a..0046be0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 a7772f8..576122a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 c970d09..c4d3ceba 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='go'",
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 59a1417..71854c4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='move'",
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 5e55498..9afeaf9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' '",
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 3a643b0..46c1b985 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' B C'",
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 3bd67c4..291a53bc 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 74f96179..f8c2d097 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Foo'",
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 558effc3..29ee3381 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg id='svg'",
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 9d42caf3..be5115e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='shape'",
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 9af9b7b..baba78b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 b4b9bf8..5e7a0f8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 e78652a8..2b0a39d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 9d2ab1e..b83de76 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 7877a43..f6c8bb6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 f8667fc..cb0be6f8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 48b9741a..4cb34bff 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 518d5bf..2389cd1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 faa11dbc..0c6aa40 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 3914539..1f2e95e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 acb07020..43d788c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot (positioned) svg",
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 4d8de5f..22a2978 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' '",
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 b7e0895a..95a3e415 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox ' '",
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 0825a73..5985cd8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
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 933a84d3..870c022 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Hello'",
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 933a84d3..870c022 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Hello'",
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 3eb554d0..e6db5bf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGImage image id='target'",
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 4fdf38b..f3cfaa1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='hp'",
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 057342a..9cd952f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 b0a9dd1b..884ae1a9e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGEllipse circle",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-background-partial-redraw-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-background-partial-redraw-expected.txt index 460deab..b4e37b4c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-background-partial-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-background-partial-redraw-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
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 bdaec06d..281767e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 f63b372..745a0ab 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'This should not be visible'",
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 836a6e8..26a23f4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'X'",
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 012e50b..9cdae1d5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'X'",
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 a91f0c1..eab97c8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGText text id='bounce'",
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 59f9832..87a65ad5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'PASS '",
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 dbb4b40..bf8c05f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 3d8b2c7..9cfe745 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGText text",
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 0ea105b..86361a7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'This text should be at visible at 200,200'",
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 66dd3ba..e78d2ff 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Y'",
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 96aadba0..67bff5f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer use",
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 b8caaa2..e40f0c6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
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 4f26a5de..96f4342 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGEllipse svg:circle id='circle'",
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 e31923b..f981e6b6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='bigWindow'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-move-expected.txt index 48a42bf..3a54d27 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-overflow-expected.txt index 31c1983a..b2e8366 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-cell-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-expected.txt index 3c9591e..9951379 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-offset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-offset-expected.txt index 0f441572..88f473b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-col-background-offset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-collapsed-border-expected.txt index 9da0834..960121ca 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-collapsed-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='r2'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-outer-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-outer-border-expected.txt index dfbd879..648eac2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-outer-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-outer-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-row-expected.txt index c1cb78b..76850d3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-row-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target' class='green'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-overflow-expected.txt index 69c61737..43da41e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-repaint-expected.txt index ee62eeb..7df437c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-section-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-two-pass-layout-overpaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-two-pass-layout-overpaint-expected.txt index c2aca03..e02f20a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-two-pass-layout-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table-two-pass-layout-overpaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE",
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 ff5fe2d..8bad2af 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 baaef3f7..30778c87 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 deleted file mode 100644 index e194c1a..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-69296-expected.txt +++ /dev/null
@@ -1,33 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutTableRow TR id='row1'", - "rect": [20, 20, 160, 51], - "reason": "style change" - }, - { - "object": "LayoutTableRow TR id='row1'", - "rect": [20, 20, 160, 51], - "reason": "style change" - } - ] - } - ], - "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 69e5cf6..34f292f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='row'",
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 864156a8..cfc55d8f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 e3552e45..04f32c1b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 b95ed67..fa6fbe51 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 a417d95..60b24f4c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 85efadf..c498c63 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 8f0807f2..2472353 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 335152d..9729c5d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 9cf3973..b3a1bcc 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='row'",
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 64fb1ac..4f665e4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 aefe91b..6d7dd58 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 635dea00..69d91e0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 5da5d3e..7e0d312 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 e9d4a6f..afa88338 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 01f85057..3d03901 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY", @@ -16,9 +16,7 @@ { "name": "LayoutTableCell TD", "position": [96, 118], - "bounds": [10, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [10, 19] } ], "objectPaintInvalidations": [
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 3bc837f..f837dbe6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY", @@ -16,9 +16,7 @@ { "name": "LayoutTableCell TD", "position": [96, 118], - "bounds": [10, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [10, 19] } ], "objectPaintInvalidations": [
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 9928d6e..6711175 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY", @@ -16,16 +16,12 @@ { "name": "LayoutTableCell TD", "position": [96, 118], - "bounds": [10, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [10, 19] }, { "name": "LayoutTableCell TD", "position": [157, 118], - "bounds": [9, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [9, 19] } ], "objectPaintInvalidations": [
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 a62327a6..76045c1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY", @@ -16,16 +16,12 @@ { "name": "LayoutTableCell TD", "position": [96, 118], - "bounds": [10, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [10, 19] }, { "name": "LayoutTableCell TD", "position": [157, 118], - "bounds": [9, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [9, 19] } ], "objectPaintInvalidations": [
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 f255d22..6feba65 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY", @@ -16,9 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [96, 118], - "bounds": [10, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [10, 19] } ], "objectPaintInvalidations": [
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 2b77eef1..917b2367 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY", @@ -16,9 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [96, 118], - "bounds": [10, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [10, 19] } ], "objectPaintInvalidations": [
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 4be70bb..f77e8838 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
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [186, 134], - "contentsOpaque": false, - "drawsContent": true, + "backgroundColor": "#ADD8E6", "paintInvalidations": [ { "object": "LayoutTableSection TBODY id='target'", @@ -23,16 +22,12 @@ { "name": "LayoutTableRow TR", "position": [34, 118], - "bounds": [132, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [132, 19] }, { "name": "LayoutTableCell TD", "position": [96, 118], - "bounds": [10, 19], - "contentsOpaque": false, - "drawsContent": true + "bounds": [10, 19] } ], "objectPaintInvalidations": [
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 4a2ab599..6503bb96 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 c9da9a68..8e386930 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'MIDDLE'",
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 16e0b7c7..204592b2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'MIDDLE'",
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 cd4392aa..9724a2f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'",
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 6643170..9ba381b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Curabitur a velit'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-in-relative-positioned-inline-expected.txt index 4d7df09..b0cb34d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-in-relative-positioned-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-in-relative-positioned-inline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'ab'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt index fcea650..8b7c3ae 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Should have blue, not gray, highlight'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-expected.txt index ce4ca344..71474db 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-selection-rect-in-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "InlineTextBox 'Should have green background'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt index 0e475d25..10c7891 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-resize-property-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-resize-property-change-expected.txt index d005d50..a7dd9d8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-resize-property-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-resize-property-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-set-disabled-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-set-disabled-expected.txt index 380908f..5338c079 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-set-disabled-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/textarea-set-disabled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl TEXTAREA",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt index d206cba..d52f4581f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-absolute-child-expected.txt index 0985147..3ada020e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-absolute-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-absolute-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-disable-layoutstate-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-disable-layoutstate-expected.txt index 0bd91205..f982d25 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-disable-layoutstate-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-disable-layoutstate-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-inline-layered-child-expected.txt index d5142d3..c17d83a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-inline-layered-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline (relative positioned) SPAN id='child'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-layout-repaint-expected.txt index 58c43aab..ec2570a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-layout-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-relative-position-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-relative-position-expected.txt index 9cb974ed..3c41809 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-relative-position-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-relative-position-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-translate-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-translate-expected.txt index d2ad5d6..253aa41 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-translate-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform-translate-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
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 8ede4da..8973810 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
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 3105b9a..a16cee30 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='other'",
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 b60671b0..395738e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
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 bfaa692..565cd80 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='other'",
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 763c25e..dfb0834 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
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='target'", "position": [528, 8], "bounds": [80, 340], - "contentsOpaque": false, - "drawsContent": true, + "backfaceVisibility": "hidden", "paintInvalidations": [ { "object": "InlineTextBox 'Lorem ipsum dolor'",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/view-background-from-body-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/view-background-from-body-2-expected.txt index 7f0f4ec..6225413 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/view-background-from-body-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/view-background-from-body-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#0000FF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/viewport-gradient-background-html-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/viewport-gradient-background-html-resize-expected.txt index a37c5fa..088e020 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/viewport-gradient-background-html-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/viewport-gradient-background-html-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize-media-query-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize-media-query-expected.txt deleted file mode 100644 index 5e3ebd4..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize-media-query-expected.txt +++ /dev/null
@@ -1,93 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [600, 250], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutView #document", - "rect": [0, 250, 600, 250], - "reason": "incremental" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } - ] -} -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [400, 250], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutView #document", - "rect": [400, 0, 200, 250], - "reason": "incremental" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } - ] -} -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [400, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutView #document", - "rect": [0, 250, 400, 350], - "reason": "incremental" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } - ] -} -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutView #document", - "rect": [400, 0, 400, 600], - "reason": "incremental" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/raw-response-headers-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/raw-response-headers-expected.txt new file mode 100644 index 0000000..fb71abb --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/raw-response-headers-expected.txt
@@ -0,0 +1,5 @@ +Tests that raw response headers are correctly reported in case of revalidation. +Response status: 304 Not Modified +Response headers text present: true +Content-Length present: false +
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/raw-response-headers.js b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/raw-response-headers.js new file mode 100644 index 0000000..03aa16e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/raw-response-headers.js
@@ -0,0 +1,16 @@ +(async function(testRunner) { + var {page, session, dp} = await testRunner.startURL( + '../resources/test-page.html', + `Tests that raw response headers are correctly reported in case of revalidation.`); + + dp.Network.enable(); + session.protocol.Page.reload(); + const response = (await dp.Network.onceResponseReceived()).params.response; + + const haveContentLength = Object.keys(response.headers).indexOf('Content-Length') >= 0; + testRunner.log(`Response status: ${response.status} ${response.statusText}`); + testRunner.log(`Response headers text present: ${!!response.headersText.length}`); + testRunner.log(`Content-Length present: ${haveContentLength}`); + + testRunner.completeTest(); +}) \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/sources/inline-module-export-error-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/sources/inline-module-export-error-expected.txt deleted file mode 100644 index 1390045..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/sources/inline-module-export-error-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -CONSOLE ERROR: line 5: Uncaught SyntaxError: The requested module does not provide an export named 'x' -CONSOLE ERROR: line 5: Uncaught SyntaxError: The requested module does not provide an export named 'x' -Tests lineNumber for import error inside of inline module. - -Script execution paused. -line 4, content: <script type="module"> -Script execution resumed. -
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/sources/inline-module-export-error.html b/third_party/WebKit/LayoutTests/http/tests/inspector/sources/inline-module-export-error.html deleted file mode 100644 index 1bab34f..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/sources/inline-module-export-error.html +++ /dev/null
@@ -1,40 +0,0 @@ -<html> -<head> -<script src="../inspector-test.js"></script> -<script src="../debugger-test.js"></script> -<script type="module"> -import {x} from "./resources/empty-module.js"; -</script> -<script> - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions); - SourcesTestRunner.waitUntilPaused(step2); - TestRunner.reloadPage(); - } - - function step2() { - var callFrames = TestRunner.debuggerModel.callFrames; - var frame = callFrames[0]; - var uiLocation = Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(frame.location()); - SourcesTestRunner.showUISourceCode(uiLocation.uiSourceCode, dumpCallFrameLine); - - function dumpCallFrameLine(sourceFrame) { - var resourceText = sourceFrame._textEditor.text(); - var lines = resourceText.split('\n'); - var lineNumber = uiLocation.lineNumber; - TestRunner.addResult('line ' + lineNumber + ', content: ' + lines[lineNumber]); - SourcesTestRunner.completeDebuggerTest(); - } - } -}; - -</script> -</head> -<body onload="runTest()"> -<p>Tests lineNumber for import error inside of inline module.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/performance-timing/longtask-v2/longtask-executescript-expected.txt b/third_party/WebKit/LayoutTests/http/tests/performance-timing/longtask-v2/longtask-executescript-expected.txt new file mode 100644 index 0000000..73003247 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/performance-timing/longtask-v2/longtask-executescript-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Performance longtask entries with execute-script attribute are observable. assert_false: expected false got true +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/http/tests/performance-timing/longtask-v2/longtask-executescript.html b/third_party/WebKit/LayoutTests/http/tests/performance-timing/longtask-v2/longtask-executescript.html new file mode 100644 index 0000000..2ff665d3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/performance-timing/longtask-v2/longtask-executescript.html
@@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>LongTask Timing: validate the long task attributes for execute-script</title> +<body> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<h1>Long Task Attributes for Execute-Script</h1> +<div id="log"></div> +<script> + async_test(function (t) { + const observer = new PerformanceObserver( + t.step_func(function (entryList) { + const entries = entryList.getEntries(); + assert_equals(entries.length, 1, + 'Exactly one entry is expected.'); + const longtask = entries[0]; + assert_equals(longtask.entryType, 'longtask'); + assert_equals(longtask.name, 'self'); + assert_greater_than(longtask.duration, 50); + assert_greater_than_equal(longtask.startTime, 0); + const currentTime = performance.now(); + assert_less_than_equal(longtask.startTime, currentTime); + + const exist = longtask.attribution.find(function(it) { + return it.name === 'script-run' && + it.duration >= 51 && + it.startTime === 0 && + it.entryType === 'taskattribution' && + it.containerId === '' && + it.containerName === '' && + it.containerSrc === ''; + }); + assert_false(!exist); + observer.disconnect(); + t.done(); + }) + ); + observer.observe({entryTypes: ['longtask']}); + + /* Generate a slow task. */ + const begin = window.performance.now(); + while (window.performance.now() < begin + 51); + +}, 'Performance longtask entries with execute-script attribute are observable.'); +</script> + +</body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-leak-path-on-redirect-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-leak-path-on-redirect-expected.txt index 4dce236..6c3b169 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-leak-path-on-redirect-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-leak-path-on-redirect-expected.txt
@@ -7,7 +7,6 @@ HTTP_CACHE_CONTROL = max-age=0 HTTP_CONNECTION = keep-alive HTTP_HOST = 127.0.0.1:8000 -HTTP_ORIGIN = http://127.0.0.1:8000 HTTP_REFERER = http://127.0.0.1:8000/security/contentSecurityPolicy/1.1/form-action-leak-path-on-redirect.html HTTP_UPGRADE_INSECURE_REQUESTS = 1
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-allowed-with-redirect-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-allowed-with-redirect-expected.txt index 6e56cbd..ada4c163 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-allowed-with-redirect-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-allowed-with-redirect-expected.txt
@@ -7,7 +7,6 @@ HTTP_CACHE_CONTROL = max-age=0 HTTP_CONNECTION = keep-alive HTTP_HOST = 127.0.0.1:8000 -HTTP_ORIGIN = http://127.0.0.1:8000 HTTP_REFERER = http://127.0.0.1:8000/security/contentSecurityPolicy/1.1/form-action-src-allowed-with-redirect.html HTTP_UPGRADE_INSECURE_REQUESTS = 1
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect-expected.txt index 0103e8b..8fff341 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect-expected.txt
@@ -7,7 +7,6 @@ HTTP_CACHE_CONTROL = max-age=0 HTTP_CONNECTION = keep-alive HTTP_HOST = 127.0.0.1:8000 -HTTP_ORIGIN = http://127.0.0.1:8000 HTTP_REFERER = http://127.0.0.1:8000/security/contentSecurityPolicy/1.1/form-action-src-default-ignored-with-redirect.html HTTP_UPGRADE_INSECURE_REQUESTS = 1
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-allowed-with-redirect-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-allowed-with-redirect-expected.txt index e43ebdf..bd4a1e0 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-allowed-with-redirect-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/1.1/form-action-src-get-allowed-with-redirect-expected.txt
@@ -7,7 +7,6 @@ HTTP_CACHE_CONTROL = max-age=0 HTTP_CONNECTION = keep-alive HTTP_HOST = 127.0.0.1:8000 -HTTP_ORIGIN = http://127.0.0.1:8000 HTTP_REFERER = http://127.0.0.1:8000/security/contentSecurityPolicy/1.1/form-action-src-get-allowed-with-redirect.html HTTP_UPGRADE_INSECURE_REQUESTS = 1
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules-expected.txt index 5aa34382..adbfdeb 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 32: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 32: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. This test whether a script can read the rules from a cross-origin style sheet using getMatchedCSSRules. Test begins.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules2-expected.txt index d968d27..b5ae96b 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules2-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/cross-origin-getMatchedCSSRules2-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 13: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 13: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. ALERT: PASS DIV
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index bdbabd1e..ff43306 100644 --- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -48,10 +48,8 @@ method detect interface Blob attribute @@toStringTag - getter isClosed getter size getter type - method close method constructor method slice interface BroadcastChannel : EventTarget
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/resources/rect-100x100-delayed-304.php b/third_party/WebKit/LayoutTests/http/tests/svg/resources/rect-100x100-delayed-304.php new file mode 100644 index 0000000..03642bc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/svg/resources/rect-100x100-delayed-304.php
@@ -0,0 +1,12 @@ +<?php +if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) { + usleep(20000); + header("HTTP/1.0 304 Not Modified"); + exit(); +} + +header('Cache-Control: max-age=0, must-revalidate'); +header('Content-Type: image/svg+xml'); +header('Last-Modified: Mon, 31 Jul 2017 23:59:59 GMT'); +echo(file_get_contents("rect-100x100.svg")); +?>
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/resources/rect-100x100.svg b/third_party/WebKit/LayoutTests/http/tests/svg/resources/rect-100x100.svg new file mode 100644 index 0000000..71d1adc94 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/svg/resources/rect-100x100.svg
@@ -0,0 +1,4 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"> + <rect width="100" height="100" fill="green" /> +</svg>
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/svgimage-revalidation-expected.html b/third_party/WebKit/LayoutTests/http/tests/svg/svgimage-revalidation-expected.html new file mode 100644 index 0000000..3f7ce8d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/svg/svgimage-revalidation-expected.html
@@ -0,0 +1,3 @@ +<div style="position: absolute;"> +<img style="width: 100%;" src='resources/rect-100x100.svg' /> +</div>
diff --git a/third_party/WebKit/LayoutTests/http/tests/svg/svgimage-revalidation.html b/third_party/WebKit/LayoutTests/http/tests/svg/svgimage-revalidation.html new file mode 100644 index 0000000..ce52caf --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/svg/svgimage-revalidation.html
@@ -0,0 +1,20 @@ +<div style="position: absolute;"> +<img style="width: 100%;" src='resources/rect-100x100-delayed-304.php' /> +</div> +<script> +if (window.testRunner) + testRunner.waitUntilDone(); + +window.onload = function() { + if (sessionStorage.getItem("svgimageRevalidation")) { + sessionStorage.removeItem("svgimageRevalidation"); + if (window.testRunner) + testRunner.notifyDone(); + } else { + sessionStorage.setItem("svgimageRevalidation", "true"); + setTimeout(function() { + location.reload(); + }, 0); + } +} +</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/post-formdata-expected.txt b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/post-formdata-expected.txt index 20c3a56a..296dc7b 100644 --- a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/post-formdata-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/post-formdata-expected.txt
@@ -5,13 +5,9 @@ PASS echoResult is "string=string value" PASS echoResult is "bareBlob=blob:application/octet-stream:blob-value" -PASS echoResult is "bareBlob=blob:application/octet-stream:" -PASS echoResult is "bareBlob=blob:application/octet-stream:" PASS echoResult is "mimeBlob=blob:text/html:blob-value" PASS echoResult is "namedBlob=blob-file.txt:application/octet-stream:blob-value" PASS echoResult is "bareFile=file-name.txt:application/octet-stream:file-value" -PASS echoResult is "bareFile=file-name.txt:application/octet-stream:" -PASS echoResult is "bareFile=file-name.txt:application/octet-stream:" PASS echoResult is "mimeFile=file-name.html:text/html:file-value" PASS echoResult is "renamedFile=file-name-override.html:text/html:file-value" PASS successfullyParsed is true
diff --git a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/resources/post-formdata.js b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/resources/post-formdata.js index 16565599..fcad512 100644 --- a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/resources/post-formdata.js +++ b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/resources/post-formdata.js
@@ -9,14 +9,6 @@ data: { bareBlob: new Blob(['blob-value']) }, result: 'bareBlob=blob:application/octet-stream:blob-value' }, { - data: { bareBlob: new Blob(['blob-value']) }, - beforeConstruct: function (t) { t.data.bareBlob.close(); }, - result: 'bareBlob=blob:application/octet-stream:' -}, { - data: { bareBlob: new Blob(['blob-value']) }, - beforeSend: function (t) { t.data.bareBlob.close(); }, - result: 'bareBlob=blob:application/octet-stream:' -}, { data: { mimeBlob: new Blob(['blob-value'], { type: 'text/html' }) }, result: 'mimeBlob=blob:text/html:blob-value' }, { @@ -31,14 +23,6 @@ data: { bareFile: new File(['file-value'], 'file-name.txt') }, result: 'bareFile=file-name.txt:application/octet-stream:file-value' }, { - data: { bareFile: new File(['file-value'], 'file-name.txt') }, - beforeConstruct: function (t) { t.data.bareFile.close(); }, - result: 'bareFile=file-name.txt:application/octet-stream:' -}, { - data: { bareFile: new File(['file-value'], 'file-name.txt') }, - beforeSend: function (t) { t.data.bareFile.close(); }, - result: 'bareFile=file-name.txt:application/octet-stream:' -}, { data: { mimeFile: new File(['file-value'], 'file-name.html', { type: 'text/html' }) },
diff --git a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/workers/post-formdata-expected.txt b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/workers/post-formdata-expected.txt index 2c29319..8c4544c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/workers/post-formdata-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/xmlhttprequest/workers/post-formdata-expected.txt
@@ -6,13 +6,9 @@ Starting worker: ./resources/post-formdata-worker.js PASS [Worker] echoResult is "string=string value" PASS [Worker] echoResult is "bareBlob=blob:application/octet-stream:blob-value" -PASS [Worker] echoResult is "bareBlob=blob:application/octet-stream:" -PASS [Worker] echoResult is "bareBlob=blob:application/octet-stream:" PASS [Worker] echoResult is "mimeBlob=blob:text/html:blob-value" PASS [Worker] echoResult is "namedBlob=blob-file.txt:application/octet-stream:blob-value" PASS [Worker] echoResult is "bareFile=file-name.txt:application/octet-stream:file-value" -PASS [Worker] echoResult is "bareFile=file-name.txt:application/octet-stream:" -PASS [Worker] echoResult is "bareFile=file-name.txt:application/octet-stream:" PASS [Worker] echoResult is "mimeFile=file-name.html:text/html:file-value" PASS [Worker] echoResult is "renamedFile=file-name-override.html:text/html:file-value" PASS successfullyParsed is true
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt b/third_party/WebKit/LayoutTests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt index b79b4355..7db7ef6 100644 --- a/third_party/WebKit/LayoutTests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector-protocol/accessibility/accessibility-ignoredNodes-expected.txt
@@ -152,6 +152,7 @@ *GenericContainer text "Div in list isn't presentational" checkbox "Content within label refers to label container" + text GenericContainer combobox { @@ -337,6 +338,7 @@ text "List item also presentational" GenericContainer checkbox "Content within label refers to label container" + text GenericContainer *combobox MenuListPopup
diff --git a/third_party/WebKit/LayoutTests/media/media-document-audio-repaint.html b/third_party/WebKit/LayoutTests/media/media-document-audio-repaint.html new file mode 100644 index 0000000..a43b445 --- /dev/null +++ b/third_party/WebKit/LayoutTests/media/media-document-audio-repaint.html
@@ -0,0 +1,41 @@ +<script src="../resources/run-after-layout-and-paint.js"></script> +<script> + // Disable under-invalidation checking because we allow short period of + // under-invalidation of buffered ranges. + if (window.internals) + internals.runtimeFlags.paintUnderInvalidationCheckingEnabled = false; + + if (window.testRunner) + testRunner.waitUntilDone(); + + function onPause() + { + var videoElement = document.getElementById("fr").contentDocument.querySelector("video"); + runAfterLayoutAndPaint(function() { + videoElement.currentTime = videoElement.duration * 0.50; + }); + } + + function onSeeked() + { + if (window.testRunner) + testRunner.notifyDone(); + } + + function frameLoaded() + { + var videoElement = document.getElementById("fr").contentDocument.querySelector("video"); + videoElement.addEventListener("pause", onPause, false); + videoElement.addEventListener("seeked", onSeeked, false); + // The MediaDocument has AUTOPLAY set, make sure we're paused. + videoElement.pause(); + } +</script> +<p> + This tests that in a standalone media document with audio content, the media element repaints correctly + while playing. +</p> +<iframe src="content/silence.wav" id="fr" width=380 height=330 onload="frameLoaded()"></iframe> +<script>// To produce the same layout as before iframe was moved down to avoid rebaselines of different platforms. +// https://bugs.webkit.org/show_bug.cgi?id=54942 +</script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/mojo/bind-interface.html b/third_party/WebKit/LayoutTests/mojo/bind-interface.html index 26c4867..08298c63 100644 --- a/third_party/WebKit/LayoutTests/mojo/bind-interface.html +++ b/third_party/WebKit/LayoutTests/mojo/bind-interface.html
@@ -5,6 +5,21 @@ <script src="file:///gen/content/test/data/mojo_layouttest_test.mojom.js"></script> <script> +const kTestReply = "hehe got ya"; + +// An impl of the test interface which replies to reverse() with a fixed +// message rather than the normally expected value. +class TestHelperImpl { + constructor() { + this.binding_ = + new mojo.Binding(content.mojom.MojoLayoutTestHelper, this); + } + bindRequest(request) { this.binding_.bind(request); } + reverse(message) { + return Promise.resolve({ reversed: kTestReply }); + } +} + promise_test(() => { let helper = new content.mojom.MojoLayoutTestHelperPtr; Mojo.bindInterface(content.mojom.MojoLayoutTestHelper.name, @@ -27,21 +42,6 @@ }, "bindInterface failure closes the request pipe"); promise_test(() => { - const kTestReply = "hehe got ya"; - - // An impl of the test interface which replies to reverse() with a fixed - // message rather than the normally expected value. - class TestHelperImpl { - constructor() { - this.binding_ = - new mojo.Binding(content.mojom.MojoLayoutTestHelper, this); - } - bindRequest(request) { this.binding_.bind(request); } - reverse(message) { - return Promise.resolve({ reversed: kTestReply }); - } - } - let helperImpl = new TestHelperImpl; let interceptor = new MojoInterfaceInterceptor(content.mojom.MojoLayoutTestHelper.name); @@ -61,6 +61,29 @@ }, "can intercept calls to bindInterface"); promise_test(() => { + // Intercept this interface at "context" scope to check that it is being + // requested at "process" scope. + let helperImpl = new TestHelperImpl; + let interceptor = + new MojoInterfaceInterceptor(content.mojom.MojoLayoutTestHelper.name); + interceptor.oninterfacerequest = e => { + helperImpl.bindRequest(e.handle); + }; + interceptor.start(); + + let helper = new content.mojom.MojoLayoutTestHelperPtr; + Mojo.bindInterface(content.mojom.MojoLayoutTestHelper.name, + mojo.makeRequest(helper).handle, + "process"); + + const kTestMessage = "hello world."; + const kExpectedReply = ".dlrow olleh"; + return helper.reverse(kTestMessage).then(reply => { + assert_equals(reply.reversed, kExpectedReply); + }); +}, "can request interfaces at process scope"); + +promise_test(() => { const kTestInterfaceName = "foo::mojom::Ba1r"; let a = new MojoInterfaceInterceptor(kTestInterfaceName); let b = new MojoInterfaceInterceptor(kTestInterfaceName);
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-display-block-to-none-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-display-block-to-none-expected.txt index 9abd06f..17f2728 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-display-block-to-none-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-display-block-to-none-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-margin-change-repaint-expected.txt index b7f32d3..998d67b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-margin-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-change-containing-block-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-change-containing-block-expected.txt index b7e4583..88205486 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-change-containing-block-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-change-containing-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-changed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-changed-expected.txt index fe83ccf..8b05801 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-changed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-changed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-moved-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-moved-expected.txt index a57d8a8..8123f013 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-moved-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/absolute-position-moved-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/add-table-overpaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/add-table-overpaint-expected.txt index 2bf62fd..e2cbc63 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/add-table-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/add-table-overpaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-expected.txt index 948474c..76120b2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-keeping-geometry-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-keeping-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-keeping-geometry-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-no-flex-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-no-flex-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-no-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-change-no-flex-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-distribution-change-grid-expected.txt index 8a6045a5..c4d0f10 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-distribution-change-grid-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-position-change-grid-expected.txt index e18f4b6..ac628e9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-content-position-change-grid-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-items-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-items-change-expected.txt index 37352ae..9880c334 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-items-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-items-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-items-overflow-change-expected.txt index ec647e51..6fd42de7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-items-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-items-overflow-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item1'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-expected.txt index 37352ae..9880c334 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-grid-expected.txt index c9b3a0dc..b87d6c6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-grid-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item1'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-grid-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-keeping-geometry-grid-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-no-flex-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-no-flex-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-no-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-change-no-flex-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-overflow-change-expected.txt index ec647e51..6fd42de7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/align-self-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/align-self-overflow-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item1'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-expected.txt index b68ef9c..c8cb8470 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='targetImage'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-expected.txt index c0436ac..94ea085 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-firstline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-firstline-expected.txt index c0436ac..94ea085 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-firstline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-background-offscreen-firstline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-expected.txt index 4623f26..2857f99c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG id='targetImage'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt index c0436ac..94ea085 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt index 8d493bb..cc36b23 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='targetDiv'", "position": [8, 8], "bounds": [2000, 2000], - "drawsContent": true, "transform": 1 } ],
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-background-expected.txt index b68ef9c..c8cb8470 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-background-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='targetImage'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-expected.txt index 4623f26..2857f99c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG id='targetImage'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-offscreen-expected.txt index c0436ac..94ea085 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-png-offscreen-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-background-expected.txt index b68ef9c..c8cb8470 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-background-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='targetImage'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-expected.txt index 4623f26..2857f99c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG id='targetImage'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-offscreen-expected.txt index c0436ac..94ea085 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-webp-offscreen-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-currentColor-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-currentColor-repaint-expected.txt index 9d4ec52..79d8f58d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-currentColor-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-currentColor-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div2'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-generated-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-generated-expected.txt index 5b03e8c..b8a0837 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-generated-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-generated-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-image-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-image-paint-invalidation-expected.txt index b8720c4..2538917e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-image-paint-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-image-paint-invalidation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [808, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-misaligned-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-misaligned-expected.txt index 75765d8..f4fab538 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-misaligned-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-misaligned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-position-no-image-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-position-no-image-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-position-no-image-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-position-no-image-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-resize-height-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-resize-height-expected.txt index f05af0a..0ac3783 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-resize-height-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-resize-height-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='test image'", "position": [8, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -26,7 +25,6 @@ "position": [58, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -41,7 +39,6 @@ "position": [108, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -56,7 +53,6 @@ "position": [158, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -71,7 +67,6 @@ "position": [208, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -86,7 +81,6 @@ "position": [258, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -101,7 +95,6 @@ "position": [308, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -116,7 +109,6 @@ "position": [358, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -130,7 +122,6 @@ "name": "LayoutBlockFlow (positioned) DIV class='test image no-repeat'", "position": [408, 8], "bounds": [60, 44], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -144,7 +135,6 @@ "name": "LayoutBlockFlow (positioned) DIV class='test image repeat-space'", "position": [458, 8], "bounds": [60, 44], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -159,7 +149,6 @@ "position": [508, 8], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -174,7 +163,6 @@ "position": [8, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -189,7 +177,6 @@ "position": [58, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -204,7 +191,6 @@ "position": [108, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -219,7 +205,6 @@ "position": [208, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -234,7 +219,6 @@ "position": [258, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -249,7 +233,6 @@ "position": [308, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -264,7 +247,6 @@ "position": [358, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -278,7 +260,6 @@ "name": "LayoutBlockFlow (positioned) DIV class='test generated no-repeat'", "position": [408, 108], "bounds": [60, 44], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -292,7 +273,6 @@ "name": "LayoutBlockFlow (positioned) DIV class='test generated repeat-space'", "position": [458, 108], "bounds": [60, 44], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ { @@ -307,7 +287,6 @@ "position": [508, 108], "bounds": [60, 44], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-shorthand-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-shorthand-with-gradient-and-height-changes-expected.txt index e56150a..b481c0c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-shorthand-with-gradient-and-height-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-shorthand-with-gradient-and-height-changes-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outer'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background-size-auto-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background-size-auto-with-gradient-and-height-changes-expected.txt index e56150a..b481c0c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background-size-auto-with-gradient-and-height-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background-size-auto-with-gradient-and-height-changes-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outer'",
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 b1d114df..92df863 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target' class='target'",
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 b0474a1..7187f5a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='half'",
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 07d7969..8f61f615 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
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-current-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/border-current-color-expected.txt index 330fd1b6..18f15b7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-current-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/border-current-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='currentColor'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-add-repaint-expected.txt index fbc243a..5a4ef1d8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-add-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-change-repaint-expected.txt index fbc243a..5a4ef1d8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/border-image-outset-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-outline-0-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/border-outline-0-expected.txt index e9bdf80..197ae055 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-outline-0-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/border-outline-0-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='border-image'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-repaint-2-expected.txt index f11ac874..6a3ee2a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-repaint-2-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [874, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#3F3F3F", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-with-outline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-with-outline-expected.txt index a42e78d..d1d9d0f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-with-outline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-with-outline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-without-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-without-border-expected.txt index ae01cd64..0e2a9e5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-without-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/border-radius-without-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target1'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-add-repaint-expected.txt index 639d6eb..f9dfcfa1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-add-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-change-repaint-expected.txt index 8aafab4..95fb7d9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-inset-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-inset-repaint-expected.txt index 5eb0ba73..195ccc4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-inset-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box-shadow-inset-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-border-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-border-keeping-size-expected.txt index 0ba51d1..7ca901c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-border-keeping-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-border-keeping-size-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-expected.txt index d1b55da..f27af93 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-padding-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-padding-keeping-size-expected.txt index 0ba51d1..7ca901c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-padding-keeping-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box-sizing-padding-keeping-size-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/button-inner-no-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/button-inner-no-repaint-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/button-inner-no-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/button-inner-no-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
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 607f2c5..5fe84c0e59 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton BUTTON id='target'",
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 85a989a..44c8777 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-putImageData-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-putImageData-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutHTMLCanvas CANVAS id='canvas'",
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 8e48fe2..6b8cf635 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'",
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 035b4f172..55868f5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/change-transform-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/change-transform-expected.txt index 5a777528..350b2c6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/change-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/change-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='square'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/child-of-sub-pixel-offset-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/child-of-sub-pixel-offset-composited-layer-expected.txt index 018fa71b..496905b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/child-of-sub-pixel-offset-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/child-of-sub-pixel-offset-composited-layer-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [101, 100], "bounds": [14, 14], - "drawsContent": true, "backgroundColor": "#FF0000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip-path-constant-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip-path-constant-repaint-expected.txt index 631cc0f2..d305ecae 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip-path-constant-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip-path-constant-repaint-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='clip'", "position": [8, 8], "bounds": [800, 300], - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000E6", "transform": 1
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip-unclip-and-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip-unclip-and-change-expected.txt index d0ee608..55b0fd5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip-unclip-and-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip-unclip-and-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clipped-overflow-visible-subtree-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clipped-overflow-visible-subtree-expected.txt index 8497e3b..df4fbb9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clipped-overflow-visible-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clipped-overflow-visible-subtree-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/composited-iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/composited-iframe-scroll-repaint-expected.txt index 23928929..ebe7413 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/composited-iframe-scroll-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/composited-iframe-scroll-repaint-expected.txt
@@ -3,14 +3,12 @@ { "name": "LayoutView #document", "bounds": [300, 516], - "drawsContent": true, "backgroundColor": "#EEEEEE" }, { "name": "LayoutBlockFlow BODY", "position": [8, 8], - "bounds": [284, 500], - "drawsContent": true + "bounds": [284, 500] } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-borderbox-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-borderbox-background-expected.txt index 4df77ac..350db86 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-borderbox-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-borderbox-background-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [220, 220], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -24,14 +23,15 @@ { "name": "Scrolling Layer", "position": [18, 18], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [18, 18], "bounds": [185, 300], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#008000", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='scroller'", @@ -43,23 +43,25 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [220, 220] + "bounds": [220, 220], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [18, 203], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [203, 18], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [203, 203], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-local-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-local-background-expected.txt index de043d5d..b82db3a8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-local-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-local-background-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -23,14 +22,15 @@ { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [185, 300], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#008000", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='scroller'", @@ -42,23 +42,25 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-negative-offset-outline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-negative-offset-outline-expected.txt index 91161ddf..d925439 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-negative-offset-outline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/composited-overflow-with-negative-offset-outline-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='scroller'", @@ -22,40 +21,41 @@ { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], - "bounds": [185, 300], - "drawsContent": true + "bounds": [185, 300] }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "Decoration Layer", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='scroller'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/composited-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/composited-vertical-rl-overflow-expected.txt index 1d156a9f2..16360a37 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/composited-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/composited-vertical-rl-overflow-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='div'", "position": [50, 100], "bounds": [150, 100], - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
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 153d6539..b56ee46 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
@@ -4,26 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='container'", "position": [8, 8], "bounds": [400, 400], - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [400, 2000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#0000FF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'", @@ -35,19 +35,18 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 408], - "bounds": [400, 0], - "drawsContent": true + "bounds": [400, 0] }, { "name": "Vertical Scrollbar Layer", "position": [408, 8], - "bounds": [0, 400], - "drawsContent": true + "bounds": [0, 400] } ], "objectPaintInvalidations": [
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 153d6539..b56ee46 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
@@ -4,26 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='container'", "position": [8, 8], "bounds": [400, 400], - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [400, 2000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#0000FF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'", @@ -35,19 +35,18 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 408], - "bounds": [400, 0], - "drawsContent": true + "bounds": [400, 0] }, { "name": "Vertical Scrollbar Layer", "position": [408, 8], - "bounds": [0, 400], - "drawsContent": true + "bounds": [0, 400] } ], "objectPaintInvalidations": [
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 3e146f6..dab48cf0 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
@@ -4,42 +4,44 @@ "name": "LayoutView #document", "bounds": [785, 616], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='clipping-container'", "position": [108, 108], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Child Containment Layer", "position": [108, 108], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='clipped-composited-child'", "position": [8, 8], "bounds": [252, 252], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" }, { "name": "LayoutBlockFlow (positioned) DIV class='clipping-container with-initial-clipping'", "position": [108, 408], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Child Containment Layer", "position": [108, 408], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='clipped-composited-child'", "position": [8, 308], "bounds": [252, 252], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" } ],
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 f558a9b3a..e76737d0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (column spanner) DIV id='target'", @@ -16,13 +16,13 @@ { "name": "LayoutBlockFlow DIV", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV", "position": [8, 8], - "contentsOpaque": true, - "drawsContent": true + "contentsOpaque": true } ], "objectPaintInvalidations": [
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 98bb542..6216850 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
@@ -4,19 +4,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutInline (relative positioned) SPAN", - "position": [108, 108], - "drawsContent": true + "position": [108, 108] }, { "name": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", "position": [58, 58], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
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 98bb542..6216850 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
@@ -4,19 +4,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutInline (relative positioned) SPAN", - "position": [108, 108], - "drawsContent": true + "position": [108, 108] }, { "name": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", "position": [58, 58], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
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 b4d0de4..2f11d38 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='square'",
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 401376bc..79aebd9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='fixed'", @@ -17,7 +17,6 @@ "name": "LayoutBlockFlow (positioned) DIV id='container'", "position": [200, 100], "bounds": [125, 125], - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
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 401376bc..79aebd9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='fixed'", @@ -17,7 +17,6 @@ "name": "LayoutBlockFlow (positioned) DIV id='container'", "position": [200, 100], "bounds": [125, 125], - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
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 73face3..80a33c7 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
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='fixed'", @@ -19,7 +19,6 @@ "position": [200, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
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 73face3..80a33c7 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
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='fixed'", @@ -19,7 +19,6 @@ "position": [200, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt index 047786a6..b45dc22 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [785, 30020], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='compositedBehind'", "position": [8, 8], "bounds": [500, 500], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FFFF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='containerOverlapsComposited')", "position": [20, 20], "bounds": [100, 30000], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt index e65ce1c2..c0a8d80 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
@@ -3,12 +3,13 @@ { "name": "LayoutView #document", "bounds": [785, 2016], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", "bounds": [785, 2016], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV", @@ -27,14 +28,12 @@ "position": [0, 250], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000" }, { "name": "LayoutBlockFlow HTML (foreground) Layer", "bounds": [785, 2016], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
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 00574e1..0c9ac9f4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV id='float'", @@ -15,8 +15,7 @@ }, { "name": "LayoutInline (relative positioned) SPAN", - "position": [108, 108], - "drawsContent": true + "position": [108, 108] } ], "objectPaintInvalidations": [
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 831e032..b358058 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [50, 50], "bounds": [200, 200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'", @@ -35,7 +34,6 @@ "position": [50, 50], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ {
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 ffc0682..7bda11e 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [50, 50], "bounds": [251, 251], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 8dea172..d40c3958 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
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='parent'", "position": [8, 8], "bounds": [400, 400], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ { @@ -26,7 +25,6 @@ "position": [58, 58], "bounds": [75, 75], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
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 cfcac04..d212492 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='chip'",
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 c337c12..84d3fa5 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'", @@ -33,19 +32,18 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 108], - "bounds": [100, 0], - "drawsContent": true + "bounds": [100, 0] }, { "name": "Vertical Scrollbar Layer", "position": [108, 8], - "bounds": [0, 100], - "drawsContent": true + "bounds": [0, 100] }, { "name": "LayoutBlockFlow DIV id='target'", @@ -53,7 +51,6 @@ "bounds": [200, 200], "opacity": 0.5, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/overlap-test-with-filter-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/overlap-test-with-filter-expected.txt index 058961c..a8342fdd2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/overlap-test-with-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/overlap-test-with-filter-expected.txt
@@ -4,46 +4,46 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME", - "bounds": [300, 100], - "drawsContent": true + "bounds": [300, 100] }, { "name": "Frame Overflow Controls Host Layer", - "bounds": [300, 100] + "bounds": [300, 100], + "drawsContent": false }, { "name": "Frame Clipping Layer", - "bounds": [300, 100] + "bounds": [300, 100], + "drawsContent": false }, { - "name": "Frame Scrolling Layer" + "name": "Frame Scrolling Layer", + "drawsContent": false }, { "name": "Content Root Layer", - "bounds": [300, 100] + "bounds": [300, 100], + "drawsContent": false }, { "name": "LayoutView #document", "bounds": [300, 100], - "drawsContent": true, "backgroundColor": "#FFFF00" }, { "name": "LayoutBlockFlow BODY", "position": [8, 8], "bounds": [284, 84], - "drawsContent": true, "backgroundColor": "#FFFF00" }, { "name": "LayoutBlockFlow (positioned) DIV", "bounds": [300, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3", "transform": 1 }
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 1c4b6f6..af83aaf 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
@@ -4,26 +4,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "Ancestor Clipping Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='foo2'", "position": [8, 8], "bounds": [150, 1000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='foo')", "position": [8, 8], "bounds": [100, 1000], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='foo'",
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 7ebfdf18..1da0d1e 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [808, 816], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [800, 800], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [8, 0], "bounds": [592, 600], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='imgElement'",
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 d26cff6..2eb7c4e 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='container')", "position": [50, 50], "bounds": [50, 50], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) SPAN class='child embiggen'",
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 b62c8389..f74ddf59 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='resizing'", "position": [8, 8], "bounds": [402, 207], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='resizing'",
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 e0ba001..09596b1 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
@@ -4,21 +4,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], - "bounds": [500, 500] + "bounds": [500, 500], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [55, 55], "bounds": [500, 500], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt index e25d1b67..499288f7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt
@@ -4,12 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [100, 200], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt index 0e8b900..ff74252 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [100, -200], "bounds": [88, 88], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -19,7 +18,6 @@ "position": [100, 1100], "bounds": [99, 99], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0" } ]
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt index 1891649..7b401a8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='main'", "position": [100, 200], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { @@ -19,7 +18,6 @@ "position": [100, 250], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#90EE90" } ]
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scrolling-without-painting-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scrolling-without-painting-expected.txt index e309e33..943e838e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scrolling-without-painting-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/scrolling-without-painting-expected.txt
@@ -4,39 +4,41 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], - "bounds": [202, 202], - "drawsContent": true + "bounds": [202, 202] }, { "name": "Scrolling Layer", "position": [9, 9], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [9, 9], - "bounds": [185, 1025], - "drawsContent": true + "bounds": [185, 1025] }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [202, 202] + "bounds": [202, 202], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [9, 194], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [194, 9], "bounds": [15, 185], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer", @@ -48,8 +50,7 @@ { "name": "Scroll Corner Layer", "position": [194, 194], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
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 d46a7c6..e06a158 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
@@ -4,16 +4,16 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='container' class='composited box'", - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "LayoutHTMLCanvas (positioned) CANVAS", "bounds": [200, 200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutHTMLCanvas (positioned) CANVAS",
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 76f2957..b5d76b54 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='container'", "position": [8, 8], - "bounds": [400, 300], - "drawsContent": true + "bounds": [400, 300] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [385, 285] + "bounds": [385, 285], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [1000, 1000], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'", @@ -33,12 +32,14 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [400, 300] + "bounds": [400, 300], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 293], "bounds": [385, 15], + "drawsContent": false, "paintInvalidations": [ { "object": "Horizontal Scrollbar Layer", @@ -51,6 +52,7 @@ "name": "Vertical Scrollbar Layer", "position": [393, 8], "bounds": [15, 285], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer", @@ -62,8 +64,7 @@ { "name": "Scroll Corner Layer", "position": [393, 293], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
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 206f4a9..f3a009c9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 1516], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
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 1f4d56c..75dd02b 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
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-box'", "position": [38, 38], "bounds": [20, 70], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000", "paintInvalidations": [ @@ -35,14 +34,14 @@ { "name": "Child Containment Layer", "position": [38, 38], - "bounds": [90, 90] + "bounds": [90, 90], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited child'", "position": [8, 58], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }
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 b902ad0..ab9228b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='overflow2'", @@ -22,21 +22,20 @@ "name": "LayoutBlockFlow DIV class='composited-child'", "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }, { "name": "Ancestor Clipping Layer", "position": [0, 200], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited-child'", "position": [0, 200], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }, @@ -45,21 +44,20 @@ "position": [150, 150], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }, { "name": "Ancestor Clipping Layer", "position": [0, 200], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited-child overflow-child'", "position": [150, 350], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-filter-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-filter-expected.txt index e2ec8d4..5053f9d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-filter-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='composited-box'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-opacity-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-opacity-expected.txt index b172f953..ee887e86b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-opacity-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-opacity-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='composited-box'", @@ -12,7 +12,6 @@ "bounds": [100, 100], "opacity": 0.5, "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt index e9ba4317..63ce703 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-transform-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='composited-box'", "position": [8, 8], "bounds": [102, 102], - "drawsContent": true, "transform": 1 } ],
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-z-index-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-z-index-expected.txt index e2ec8d4..5053f9d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-z-index-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-z-index-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='composited-box'", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000" }
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 0b4e80b..e17a742a 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='target'", "position": [-2, -2], "bounds": [220, 220], - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ { @@ -23,35 +22,38 @@ { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [185, 2000], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#0000FF" }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
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 d8225cb..5329cc980 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [180, 180], "bounds": [262, 200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG id='repaintdiv' class='repaintdiv'",
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 b7afb30..4c76dd3 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
@@ -4,17 +4,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3", "transform": 1 }, @@ -22,7 +22,6 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='target')", "position": [28, 28], "bounds": [100, 100], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 49ca6062..da09902 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
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutInline (relative positioned) SPAN", "position": [58, 58], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt index 095c34f..5242e20 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FA8072" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [8, 8], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] } ], "objectPaintInvalidations": [
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 182a76b..570cdeef 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'",
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 4d0d152..603b187e 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [185, 1200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='indicator'", @@ -33,17 +32,20 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], "bounds": [15, 185], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer", @@ -55,8 +57,7 @@ { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/content-into-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/content-into-overflow-expected.txt index 3d842cc..d68d93c0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/content-into-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/content-into-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/css-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/css-clip-change-stacking-child-expected.txt index e35ad89f..25c0ba16 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/css-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/css-clip-change-stacking-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 991af30..a3d8536 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutGrid DIV class='grid min-content'",
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 8730123..8484e0c9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutGrid DIV class='grid fit-content'",
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 2c34ae8..87cec10 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
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 a287093b..c2b1d2b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
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 3ebea7ec..b56ddf79 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='item2' class='sizedToGridArea green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/destroy-composited-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/destroy-composited-scrollbar-expected.txt index 87b3c29..556ab76 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/destroy-composited-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/destroy-composited-scrollbar-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [0, 100], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/destroy-overlay-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/destroy-overlay-scrollbar-expected.txt index e8e5276..096bc0b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/destroy-overlay-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/destroy-overlay-scrollbar-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/destroy-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/destroy-scrollbar-expected.txt index 531c44a..4e80086 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/destroy-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/destroy-scrollbar-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/do-not-paint-below-image-baseline-expected.txt index 9e0c8ac..d9caeee 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/do-not-paint-below-image-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/do-not-paint-below-image-baseline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/document-flipped-blocks-writing-mode-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/document-flipped-blocks-writing-mode-scroll-expected.txt index 48fece7b..4b7478cb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/document-flipped-blocks-writing-mode-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/document-flipped-blocks-writing-mode-scroll-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [1516, 585], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt index 42f6f4a..895757ef 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt
@@ -4,12 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='target'", "position": [200, 200], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/empty-object-move-and-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/empty-object-move-and-resize-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/empty-object-move-and-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/empty-object-move-and-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/erase-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/erase-overflow-expected.txt index b75cb6c..4b791d9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/erase-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/erase-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='square'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-after-display-expected.txt index c6328f0..e39cccc 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-after-display-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-after-display-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-positioned-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-positioned-child-expected.txt index ab39776f..343f63b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-positioned-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-positioned-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-with-composited-container-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-with-composited-container-change-expected.txt index 5f6ce9a..e5ffd453 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-with-composited-container-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filter-invalidation-with-composited-container-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='box' class='green box blurry'", @@ -18,7 +18,6 @@ "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filter-on-html-element-with-fixed-position-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filter-on-html-element-with-fixed-position-child-expected.txt index 4f56425..c714e0b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filter-on-html-element-with-fixed-position-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filter-on-html-element-with-fixed-position-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 10016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-child-with-filter-child-expected.txt index 9635e55..2ba8e7e4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -4,19 +4,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='blur'", "position": [8, 8], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] }, { "name": "LayoutBlockFlow DIV class='accelerated'", "position": [-4, -4], "bounds": [212, 257], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter-expected.txt index 8664e0d3..3d44275 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter-expected.txt
@@ -4,20 +4,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='blur accelerated'", "position": [8, 8], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] }, { "name": "LayoutBlockFlow DIV id='resize' class='drop-shadow accelerated'", "position": [8, 8], "bounds": [100, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-on-accelerated-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-on-accelerated-layer-expected.txt index 4e1ce644..3ebaf92 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filter-repaint-on-accelerated-layer-expected.txt
@@ -4,20 +4,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='blur'", "position": [8, 8], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] }, { "name": "LayoutBlockFlow DIV id='resize' class='accelerated'", "position": [8, 8], "bounds": [100, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
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 a6098d03..fb09941 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 064c879..b7ef8dd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 1dc6968..44966afb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 064c879..b7ef8dd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 a6098d03..fb09941 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 5f0b3765..272db43 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 91421e8..be82c5d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 be92399b..87c9c3c8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 7e8d8e6..bbcc7c3b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 1283b400..bb4e43cf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 dea83de..ee24533b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 5f0b3765..272db43 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 28f82747..f0590eb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 72426c3f..2272213 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 1d2c8d1..d52843f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
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 67ddd40..1fcf1ba2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-after-scroll-expected.txt index 234b594..0bfcb62a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-after-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-and-absolute-position-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-and-absolute-position-scrolled-expected.txt index f077eef..3220adac 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-and-absolute-position-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-and-absolute-position-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-move-after-scroll-expected.txt index 6ced55d6..d017c13 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-move-after-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 3016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-fixed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-fixed-move-after-scroll-expected.txt index 6ced55d6..d017c13 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-fixed-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-fixed-move-after-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 3016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-move-after-scroll-expected.txt index 573d89b..4f4db09 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-move-after-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 3016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-scrolled-expected.txt index 3b691bc..2c8e269 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-child-of-transformed-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-descendant-of-transformed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-descendant-of-transformed-scrolled-expected.txt index 3b691bc..2c8e269 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-descendant-of-transformed-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-descendant-of-transformed-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-img-src-change-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-img-src-change-after-scroll-expected.txt index b9e42a6..7a1f236 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-img-src-change-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-img-src-change-after-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG id='img'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-margin-change-repaint-expected.txt index b7f32d3..998d67b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-margin-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-move-after-scroll-expected.txt index 6ced55d6..d017c13 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-move-after-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 3016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-position-transparency-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-position-transparency-with-overflow-expected.txt index 0a241bc2d..3f99b98f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-position-transparency-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-position-transparency-with-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scale-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scale-expected.txt index 6ea8c76..9eb612c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scale-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scale-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t' class='green translated'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scroll-simple-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scroll-simple-expected.txt index f5eeffc..af53f600 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scroll-simple-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-scroll-simple-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-cell-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-cell-expected.txt index d04f948..4b71291 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-cell-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable (positioned) TABLE",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-expected.txt index 4aea44a..27a72a55 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable (positioned) TABLE",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-zindex-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-zindex-expected.txt index 45eec58..f6d0f72 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-zindex-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-table-overflow-zindex-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable (positioned) TABLE",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-to-relative-position-with-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-to-relative-position-with-absolute-child-expected.txt index 3d89906..a0b70bcb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-to-relative-position-with-absolute-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-to-relative-position-with-absolute-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-tranformed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-tranformed-expected.txt index 1aefaee..985e1632 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-tranformed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-tranformed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 1000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-absolute-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-absolute-scrolled-expected.txt index 40a60b18..afcec2a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-absolute-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-absolute-scrolled-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [785, 2001], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='absolute'", "position": [0, 400], "bounds": [100, 1601], - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", "paintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-fixed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-fixed-scrolled-expected.txt index 202f735..4a5987f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-fixed-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-under-composited-fixed-scrolled-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed-container'", "position": [0, 400], "bounds": [785, 600], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000", "paintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-with-border-under-composited-absolute-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-with-border-under-composited-absolute-scrolled-expected.txt index f18a2339..4130fca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-with-border-under-composited-absolute-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/fixed-with-border-under-composited-absolute-scrolled-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [785, 2001], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='absolute'", "position": [0, 400], "bounds": [120, 1601], - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", "paintInvalidations": [
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 535fa1d..a340321 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='blue' class='flex-item'",
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 1c29a8e7..e0c1732d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='flex-item-1' class='flex-item width'",
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 1e8fbf7..38f41b5b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV class='state'",
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 c92b1ec..68d7dcb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='child-to-grow' class='child'",
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 be61e87..2c9fdc1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target' class='item'",
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 b1be4244..d1897b33 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flipped-blocks-writing-mode-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flipped-blocks-writing-mode-scroll-expected.txt index 00984ec3..cb88668 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flipped-blocks-writing-mode-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flipped-blocks-writing-mode-scroll-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], - "bounds": [400, 400], - "drawsContent": true + "bounds": [400, 400] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [400, 385] + "bounds": [400, 385], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [10000, 385], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'", @@ -33,12 +32,14 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [400, 400] + "bounds": [400, 400], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 393], "bounds": [400, 15], + "drawsContent": false, "paintInvalidations": [ { "object": "Horizontal Scrollbar Layer",
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 25c1edf..c66b7bf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
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 dba77bde..b8f16e8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/full-viewport-repaint-for-background-attachment-fixed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/full-viewport-repaint-for-background-attachment-fixed-expected.txt index 9d59f13..c79b4e56 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/full-viewport-repaint-for-background-attachment-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/full-viewport-repaint-for-background-attachment-fixed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 5000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-expected.txt index c40943e3..92fb2c1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) \u003Cpseudo:after\u003E",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-whitespace-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-whitespace-expected.txt index a68e08b..64023913 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-whitespace-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/hover-pseudo-borders-whitespace-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div_outline'",
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 b15694a7..95324b8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/iframe-scrollbar-hover-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/iframe-scrollbar-hover-expected.txt index a358f94..525bcd09 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/iframe-scrollbar-hover-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/iframe-scrollbar-hover-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/image-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/image-resize-expected.txt index 6fa7256f..0f315334 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/image-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/image-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG",
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 79561af..94bee32 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/inline-overflow-expected.txt index ae03b321..fc7466a6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/inline-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/inline-relative-positioned-expected.txt index b31892b..05f1af9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/inline-relative-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-lr-overflow-expected.txt index b687b98..9a82acc 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-lr-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-rl-overflow-expected.txt index 49a237c7..59bbf44 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/inline-vertical-rl-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/input-overflow-in-table-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/input-overflow-in-table-expected.txt index 0ecb53d8..89d73e4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/input-overflow-in-table-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/input-overflow-in-table-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
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 ec351ef..430a2960 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/insert-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/insert-frame-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-clip-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-clip-expected.txt index 4283a916..7713eb7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-expected.txt index 41137b3..3c22cd05 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/intermediate-layout-position-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt index d6e42b2..08af6ff 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='scroller'", "position": [300, 300], - "bounds": [200, 200], - "drawsContent": true + "bounds": [200, 200] }, { "name": "Scrolling Layer", "position": [300, 300], - "bounds": [185, 200] + "bounds": [185, 200], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [300, 300], "bounds": [185, 4900], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'", @@ -33,12 +32,14 @@ { "name": "Overflow Controls Host Layer", "position": [300, 300], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [485, 300], "bounds": [15, 200], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-cell-in-row-with-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-cell-in-row-with-offset-expected.txt index 2da38c3..74e2b103 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-cell-in-row-with-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-cell-in-row-with-offset-expected.txt
@@ -4,26 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR", "position": [8, 18], - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutTableRow TR", "position": [8, 28], "bounds": [234, 102], - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "LayoutTableRow TR class='shadow-inset'", "position": [8, 140], "bounds": [234, 102], - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
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 c3813f3c..58e40b03 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
@@ -4,21 +4,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV", "position": [8, 8], "bounds": [784, 52], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='child'", @@ -36,7 +37,6 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow DIV id='target')", "position": [9, 9], "bounds": [100, 100], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='child'",
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 bb8adbdd..022db6f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt index ba25638..a3ed64e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-in-iframe-in-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-in-iframe-in-composited-layer-expected.txt index 36a2403..13fd44c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-in-iframe-in-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-paint-in-iframe-in-composited-layer-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [785, 616], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 408], "bounds": [304, 200], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 b655979f..fd45aeb 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
@@ -4,26 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [300, 300], - "drawsContent": true, + "backgroundColor": "#D3D3D3", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'", @@ -37,14 +37,12 @@ "position": [8, 8], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "LayoutBlockFlow DIV (foreground) Layer", "position": [8, 8], "bounds": [300, 300], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'", @@ -56,23 +54,25 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-scale-transform-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-scale-transform-expected.txt index 9396fbf..e1528ab7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-scale-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-scale-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 3ad6cbd..22b12ad 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='element'",
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 160dfc0..062f12f4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invisible-objects-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invisible-objects-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-change-expected.txt index 728de27..50fdd78a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-distribution-change-grid-expected.txt index f3e4bdc..fa0aec9b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-distribution-change-grid-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-expected.txt index 05cd6e5..61ff6a19 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-grid-expected.txt index 31e5826..9391a2d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-content-position-change-grid-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-change-expected.txt index 93709ba..932b8588 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-legacy-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-legacy-change-expected.txt index c802bf07..d66a5ae 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-legacy-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-legacy-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item2'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-overflow-change-expected.txt index 7afbe36..b08d211c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-items-overflow-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item1'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-expected.txt index f1d92b1..4cc89e2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item1'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-keeping-geometry-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-keeping-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-change-keeping-geometry-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-overflow-change-expected.txt index 2a6df2ff..4657963c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/justify-self-overflow-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='item1'",
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 3d10f8c..c3017f3d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='test' class='selected'",
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 52943728..30118ba 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 4e10c25..d87c010 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/layer-visibility-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/layer-visibility-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/layout-state-only-positioned-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/layout-state-only-positioned-expected.txt index 3ae47e5..10b02f23 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/layout-state-only-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/layout-state-only-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/margin-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/margin-expected.txt index c0b40a3..fa977d1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/margin-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/margin-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/mask-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/mask-clip-change-stacking-child-expected.txt index c0e3c22..7e3cced 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/mask-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/mask-clip-change-stacking-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 1c9d14be..bfbfc30 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-as-paint-container-expected.txt index 74ed26d..706beccf7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-as-paint-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='target'", "position": [8, 8], "bounds": [630, 180], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-relpos-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-relpos-with-abspos-expected.txt index aa23f6d2..49b9748 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-relpos-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-relpos-with-abspos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-resize-with-rule-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-resize-with-rule-expected.txt index 890e0b1a..5cd2a70 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-resize-with-rule-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-resize-with-rule-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnSet (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-inline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-inline-expected.txt index 3fe1d70..f7dc318 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-inline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-overflowing-block-rl-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-overflowing-block-rl-expected.txt index 370c0ce..b72f412 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-overflowing-block-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-overflowing-block-rl-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='elm'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-relpos-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-relpos-expected.txt index 903490e3..2f879a9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-relpos-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol-with-relpos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multiple-backgrounds-style-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multiple-backgrounds-style-change-expected.txt index d40273e..305db14 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multiple-backgrounds-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multiple-backgrounds-style-change-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='test' class='composited box changed'", "position": [8, 8], "bounds": [202, 202], - "drawsContent": true, "transform": 1 } ],
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-expand-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-expand-expected.txt index 3171c51..ee4345ea 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-expand-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-expand-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outer'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-shrink-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-shrink-expected.txt index c21a747..aedba6f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-shrink-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/negative-shadow-box-shrink-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outer'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/negative-text-indent-with-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/negative-text-indent-with-overflow-hidden-expected.txt index c111d111..d9f714e2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/negative-text-indent-with-overflow-hidden-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/negative-text-indent-with-overflow-hidden-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target' class='changed'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/nested-fixed-iframe-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/nested-fixed-iframe-scrolled-expected.txt index 0dff1763..5c5f864 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/nested-fixed-iframe-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/nested-fixed-iframe-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/no-caret-repaint-in-non-content-editable-element-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/no-caret-repaint-in-non-content-editable-element-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/no-caret-repaint-in-non-content-editable-element-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/no-caret-repaint-in-non-content-editable-element-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-add-repaint-expected.txt index cd07d829..dd00ed5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-add-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-continuations-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-continuations-expected.txt index a757139..f605d87 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-offset-expected.txt index 53cbb71b..2ef863d0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-offset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-repaint-expected.txt index cd07d829..dd00ed5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-child-repaint-expected.txt index d6651d16..6733aca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-child-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-child-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='outlined'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-containing-image-in-non-standard-mode-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-containing-image-in-non-standard-mode-expected.txt index d86d386..86fd662 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-containing-image-in-non-standard-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-containing-image-in-non-standard-mode-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-current-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-current-color-expected.txt index 89c17e7..bb44c1b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-current-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-current-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='currentColor'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline-not-affected-by-descendant-expected.txt index 88ec262..188256f6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline-not-affected-by-descendant-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='child'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-auto-in-overflow-auto-scrolled-expected.txt index 5d42637..4cdd7f2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-auto-in-overflow-auto-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-auto-in-overflow-auto-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='innerDiv'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-changed-on-child-of-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-changed-on-child-of-composited-layer-expected.txt index 9d78be1..a015fe8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-changed-on-child-of-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-changed-on-child-of-composited-layer-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='parent'", "position": [27, 19], "bounds": [745, 102], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='parent'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-clip-subtree-layout-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-clip-subtree-layout-expected.txt index c7444b0..2267584 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-clip-subtree-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-clip-subtree-layout-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-block-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-block-expected.txt index 23422df..ee602cc 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-block-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-table-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-table-expected.txt index 23422df..ee602cc 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-table-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-flipped-writing-mode-table-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt index af7f859..b5d95840 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='innerWrapper'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-expected.txt index 35c9ba28..0362d98 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [302, 302], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt index e280dd9..58521f8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hidden-yet-scrolled-with-custom-scrollbar-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [302, 302], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hide-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hide-expected.txt index e2d803d..b9f8afe 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hide-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-hide-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-into-content-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-into-content-expected.txt index 80d8ec9..63e1d74 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-into-content-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-into-content-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-move-after-scroll-expected.txt index 41f2cc3..0c3d8363 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-move-after-scroll-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='scroller' class='scroller'", "position": [10, 60], - "bounds": [700, 400], - "drawsContent": true + "bounds": [700, 400] }, { "name": "Scrolling Layer", "position": [10, 60], - "bounds": [685, 385] + "bounds": [685, 385], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [10, 60], "bounds": [685, 600], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='block'", @@ -38,17 +37,20 @@ { "name": "Overflow Controls Host Layer", "position": [10, 60], - "bounds": [700, 400] + "bounds": [700, 400], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [10, 445], - "bounds": [685, 15] + "bounds": [685, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [695, 60], "bounds": [15, 385], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer", @@ -60,8 +62,7 @@ { "name": "Scroll Corner Layer", "position": [695, 445], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-after-move-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-after-move-expected.txt index 8ca3be8..eaf0b9b9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-after-move-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-after-move-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='scroller'", "position": [10, 60], - "bounds": [300, 400], - "drawsContent": true + "bounds": [300, 400] }, { "name": "Scrolling Layer", "position": [10, 60], - "bounds": [285, 385] + "bounds": [285, 385], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [10, 60], "bounds": [285, 900], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='block'", @@ -38,17 +37,20 @@ { "name": "Overflow Controls Host Layer", "position": [10, 60], - "bounds": [300, 400] + "bounds": [300, 400], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [10, 445], - "bounds": [285, 15] + "bounds": [285, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [295, 60], "bounds": [15, 385], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer", @@ -60,8 +62,7 @@ { "name": "Scroll Corner Layer", "position": [295, 445], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-composited-non-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-composited-non-stacking-child-expected.txt index 9b83239..a871aa88 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-composited-non-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-composited-non-stacking-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='scroller'", @@ -33,24 +33,24 @@ "position": [200, 10], "bounds": [40, 40], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFDDBB" }, { "name": "Ancestor Clipping Layer", "position": [23, 65], - "bounds": [285, 175] + "bounds": [285, 175], + "drawsContent": false }, { "name": "LayoutBlockFlow (relative positioned) DIV class='list'", "position": [43, 35], - "bounds": [180, 250] + "bounds": [180, 250], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='commit')", "position": [43, 35], - "bounds": [180, 250], - "drawsContent": true + "bounds": [180, 250] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled-expected.txt index 5d42637..4cdd7f2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-in-overflow-scroll-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='innerDiv'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-show-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-show-expected.txt index 9e9eca22..0efcd4e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-show-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow-show-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='relative green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/padding-border-keeping-border-box-and-content-box-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/padding-border-keeping-border-box-and-content-box-expected.txt index b7515ca..65e1260 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/padding-border-keeping-border-box-and-content-box-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/padding-border-keeping-border-box-and-content-box-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-content-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-content-size-expected.txt index d9e5da9..d65839f4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-content-size-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-visual-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-visual-size-expected.txt index bdcd9152..3bca85e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-visual-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/padding-keeping-visual-size-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/paged-with-overflowing-block-rl-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/paged-with-overflowing-block-rl-expected.txt index ad502ec..ceffde02 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/paged-with-overflowing-block-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/paged-with-overflowing-block-rl-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='elm'",
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 4126158..a38bf73 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='editable'",
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 e978084..d60cfd3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/percent-size-image-resize-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/percent-size-image-resize-container-expected.txt index 6fa7256f..0f315334 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/percent-size-image-resize-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/percent-size-image-resize-container-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage (positioned) IMG",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position-change-keeping-geometry-expected.txt index 1cc4da76..dd2ee0da 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position-change-keeping-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position-change-keeping-geometry-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-after-display-expected.txt index a750ddc6..d0f9648f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-after-display-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-after-display-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-positioned-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-positioned-child-expected.txt index df98c3c4..ae75179 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-positioned-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection-invalidation-positioned-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection-repaint-test-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection-repaint-test-expected.txt index 652b63e..62ef7733 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection-repaint-test-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection-repaint-test-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/relative-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/relative-margin-change-repaint-expected.txt index 1b0df38d..8045c4d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/relative-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/relative-margin-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/relative-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/relative-positioned-movement-repaint-expected.txt index 20a56dd..336f7cb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/relative-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/relative-positioned-movement-repaint-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='block'", "position": [68, 10], "bounds": [402, 62], - "drawsContent": true, "backfaceVisibility": "hidden" } ]
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt index 2eb1f91..c2b41b23 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/remove-inline-block-descendant-of-flex-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-composited-child-in-scrolled-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-composited-child-in-scrolled-container-expected.txt index ab291cf..6d26ce0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-composited-child-in-scrolled-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-composited-child-in-scrolled-container-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='outer'", @@ -16,14 +16,14 @@ { "name": "Ancestor Clipping Layer", "position": [8, 8], - "bounds": [285, 285] + "bounds": [285, 285], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='container'", "position": [-307, 8], "bounds": [600, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000", "paintInvalidations": [ {
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 8820a90..850bd45 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 ec910f2..89e9f4e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box'",
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 3ffd8c68..62d6f349 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='mask'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-table-row-in-composited-document-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-table-row-in-composited-document-expected.txt index 2c23879..f2ce183 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-table-row-in-composited-document-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-table-row-in-composited-document-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
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 828b5c40..6208ae6 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
@@ -7,7 +7,7 @@ "name": "LayoutView #document", "bounds": [1600, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/resize-child-within-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/resize-child-within-overflow-expected.txt index 879f9ac..cbd77a17 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/resize-child-within-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/resize-child-within-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 1000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='container'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/resize-scrollable-div-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/resize-scrollable-div-expected.txt index db90349..57e6915 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/resize-scrollable-div-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/resize-scrollable-div-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/resize-skewed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/resize-skewed-expected.txt index bab974c..2a5cf23 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/resize-skewed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/resize-skewed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='skewed'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-clipped-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-clipped-expected.txt index 5a064a8..e0ceff9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-clipped-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-clipped-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-expected.txt index 021b4a2..547d39f5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/resize-with-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-absolute-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-absolute-layer-with-reflection-expected.txt index 03eb4e6f..89c7f40 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-absolute-layer-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-absolute-layer-with-reflection-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-no-visible-content-expected.txt index 28ae4a6e..d5db435 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-no-visible-content-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-reflection-expected.txt index 20a9c14c..5a6be28 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-reflection-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer-expected.txt index 7f67f9f0..6ff36df 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-reflected-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-reflected-layer-expected.txt index c9d7cec3..5f7c02d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-reflected-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-fixed-reflected-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='hideMe' class='absolute red'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-clipped-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-clipped-layer-expected.txt index 38ad5852..dab1f43 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-clipped-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-clipped-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-fixed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-fixed-layer-expected.txt index 2319fc1..121ab92 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-fixed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-fixed-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-transformed-layer-expected.txt index 5e4081a..424e7052 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-transformed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-in-transformed-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-inside-table-cell-expected.txt index 794836c..7023638 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-inside-table-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-inside-table-cell-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-relative-table-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-relative-table-inside-table-cell-expected.txt index 7f7d19f..ed72334 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-relative-table-inside-table-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-relative-table-inside-table-cell-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1566, 1781], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt index 4c97c25..b4910e2c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll-with-transformed-parent-layer-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-damage-and-full-viewport-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-damage-and-full-viewport-repaint-expected.txt index 3b0f2dd..8c06e81c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-damage-and-full-viewport-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-damage-and-full-viewport-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1000, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt index 7eb01999..ac836ff 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt index e29248a..a73aa7fe 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-invalidation-on-resize-with-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-parts-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-parts-expected.txt index 2dd16201..0b4dba9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-parts-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scrollbar-parts-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt index 53ce4f5..59e44a8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection-change-in-iframe-with-relative-parent-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection-clear-after-move-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/selection-clear-after-move-expected.txt index 1607e9ee..efa22d9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/selection-clear-after-move-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection-clear-after-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG",
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 fe20478..7aae6b4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/set-text-content-same-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/set-text-content-same-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/set-text-content-same-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/set-text-content-same-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-expected.txt index 04a9d9b..205558d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target1'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-writing-mode-expected.txt index 04a9d9b..205558d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/shadow-box-resize-writing-mode-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target1'",
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 407da6f..8d47fc31 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
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='outer'", "position": [278, 278], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#008000", "paintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-offset-scaled-transform-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-offset-scaled-transform-expected.txt index d634bf19..a3761a4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-offset-scaled-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-offset-scaled-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='child scale'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation-expected.txt index 85e6128..7e5b4a89 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/subpixel-shadow-included-in-invalidation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-2-expected.txt index 879d0b4..1cade56 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-3-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-3-expected.txt index 8246087..4c482dc 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-3-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-3-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-expected.txt index 341ea81..6185292d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/subtree-root-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
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 df6f7c4..6ccecf7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 270ebbe8..a5f89fb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 9d228bf5..5485f3a2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot (positioned) svg",
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 d9ce3366..889a211 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
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 66b04c6..3f2d188 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='newId'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt index c0436ac..94ea085 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt index c0436ac..94ea085 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt index 8d493bb..cc36b23 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animated-svg-as-image-transformed-offscreen-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='targetDiv'", "position": [8, 8], "bounds": [2000, 2000], - "drawsContent": true, "transform": 1 } ],
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 e10b674..b370cb8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg",
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 ea8502b..66e5f80f6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGEllipse circle id='c1'",
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 eb9323e..d00eda73 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 6319097..bde1776 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 eb9323e..d00eda73 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 eb9323e..d00eda73 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 ea1bedb2..481f39d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGEllipse circle",
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 e75973f..a51b74b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 f529b7e..3e63b1e7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 8c61365..119f23ed 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 1bc677b2..07c81d96 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 bd0d6c1..cbbc09e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 c88689cd..1778940 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 bd0d6c1..cbbc09e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 c88689cd..1778940 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 33b1e3c..cd97217 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 67e4e09..cb0c1b64 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 6f301e34..587a763 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 c88689cd..1778940 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 d68b94b..ab4d723 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 8099c5c7..b3ca868 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGEllipse circle",
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 69f28641..c5a1d6b65 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 2bdab9e..ec829f5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 f901862..f839f3a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 f2e0ccd..120b40b2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='div2'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreignObject-crash-on-hover-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreignObject-crash-on-hover-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreignObject-crash-on-hover-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreignObject-crash-on-hover-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
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 5888dbc2..90dd080 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 5888dbc2..90dd080 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 8fb4d0b0..eab261c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 5494d75..921787d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGImage image id='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 c3719b1c..02437aaa 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='g'",
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 0b1196d..7ad97efc 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 0830470..e4959ff 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 11db7d5..2360225 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 b1e3d2cb3..f2a58f4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 16dde98..2b9e62c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 4a7359d89..1ea80a34 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 19bbbe4..35c81cb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 89c287c..d842645 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 c588db4..1c899b5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGEllipse circle id='bounce'",
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 193f53f..5baa4cc4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='group'",
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 4ff7b4c1..beec950 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 9f76e40..d9bf27e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGImage image id='image'",
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 4ff7b4c1..beec950 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 4ff7b4c1..beec950 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 f19c182..76b9c543 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon id='polygon'",
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 6e85540..d64e4c1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon id='polygon'",
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 4ff7b4c1..beec950 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 6a77b83..b4721313 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 fa72ee2..998ab3f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 2415a2e..8b323981 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon id='polygon'",
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 2415a2e..8b323981 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon id='polygon'",
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 4a823f3..83041b2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 4a823f3..83041b2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 82921b8..496fa2b5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 db995165..5b18ca2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='go'",
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 19bbbe4..35c81cb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 f80c336..6f2f098 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='clipper'",
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 40952cc..0803ebc3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='root'",
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 50488e2..37ab577 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='move'",
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 b4b18cf..9e3950b09 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon id='target'",
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 4d6177e..4b8056f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
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 4d6177e..4b8056f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
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 74f12af..5edaeb6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 15b9c5c9..358e87e1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 dd91964..0c46c6f1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot svg id='svg'",
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 55fea2a..4207f11d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer use id='t2'",
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 437f079..1de5e88 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 0b9c9db..e3f04a9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='shape'",
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 cc67d740..809b3fdf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='r'",
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 d8e84657..9ac8e06 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 270ebbe8..a5f89fb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 9d228bf5..5485f3a2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRoot (positioned) svg",
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 9a5c1d6..c3fb50e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2000, 2000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
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 4c6f705..216833e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
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 02daf83e5..a07a199 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGImage image",
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 933d5665..0868b21 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGImage image id='target'",
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 84f26e2c..7f3a8d5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath polygon",
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 f998d6a0..a91a49e8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 c8b47c64..4e4f8b8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 0ed3851..e57f5e9a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='box'",
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 92c3126..fa698bac 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 7b4e50a..ae7250e6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 98a6f62..58a538fe 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 b441e7e..6145b892 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGEllipse circle",
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 1aff83d2..882bcb6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
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 d7f012f..b4aacb6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGImage image",
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 48bd6e0..3160a328 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path id='path'",
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 ed530970..daf69dfa 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGText text",
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 0808eba..a27b9d2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGText text",
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 e5fdcd3..bb3fe477 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-foreign-object-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-foreign-object-expected.txt index 524e40f..72854e3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-foreign-object-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-foreign-object-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 ef7d1ca..22d44347 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 7431d8e..dd57fed 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGTSpan tspan",
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 4227be27..0be0b476 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='use'",
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 4259888e..5d1c538a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer use",
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 4b166e4b4..0ce0eea 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='g'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-cell-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-cell-overflow-expected.txt index eec477b..f7e01d52 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-cell-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-cell-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-expected.txt index 124dd2b..6455326e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='col'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-offset-expected.txt index 212453f..c0f9397 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-col-background-offset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='col'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-extra-bottom-grow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-extra-bottom-grow-expected.txt index f700373f..d60b709 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-extra-bottom-grow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-extra-bottom-grow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-outer-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-outer-border-expected.txt index 9607874..aed56ad 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-outer-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-outer-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE id='table'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled-expected.txt index 41664e6..ae6dae2a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-auto-in-overflow-auto-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='innerDiv'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt index 41664e6..ae6dae2a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='innerDiv'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-row-bg-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-row-bg-change-expected.txt index 2815ca2..09d3b07 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-row-bg-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-row-bg-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='first'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-row-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-row-expected.txt index 8ce3fe2..c499d1d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-row-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target' class='green'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-section-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-section-overflow-expected.txt index 2320daf4..185f0e39 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-section-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-section-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-section-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-section-repaint-expected.txt index ff360d4..4443c9e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-section-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-section-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt index 9723e27..71e0a45 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-two-pass-layout-overpaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table-with-padding-row-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table-with-padding-row-invalidation-expected.txt index 6655594..7a8414c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table-with-padding-row-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table-with-padding-row-invalidation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 b709fdd..79888e78 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='row'",
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 d15af64..f8dc00c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE id='table'",
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 d15af64..f8dc00c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE id='table'",
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 e194c1a..5e847ea0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='row1'",
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 a179df47..64f9eab 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='row'",
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 7b11d248..3b477a1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 5a610a60..b65bbe7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 4938d2f..85ab1dcb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='col'",
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 22b5918..a09d45f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='col'",
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 92a6fd75..46307364 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='colgroup'",
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 d82c28e..52c774a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='colgroup'",
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 07fc4bc..d97d166 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='row'",
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 a70485c89..796d77a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='row'",
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 40e5d56..e1a489e8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE id='tbl'",
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 1e9541c1..93d58b1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE id='tbl'",
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 e6ecc61f..fd1f147e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY id='tbody'",
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 0df4da5..86b5a181 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableSection TBODY id='tbody'",
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 5956654..84af4f8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 ddbd5ae3..d5104d5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt index 10c6cfd..17118eb2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/textarea-appearance-none-resize-handle-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/textarea-resize-property-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/textarea-resize-property-change-expected.txt index 8cf45ba..1740e2a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/textarea-resize-property-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/textarea-resize-property-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/textarea-set-disabled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/textarea-set-disabled-expected.txt index 1fe9d5a..6c80c1c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/textarea-set-disabled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/textarea-set-disabled-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl TEXTAREA",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt index e119a706..b61f8de 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/trailing-floats-root-line-box-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform-absolute-child-expected.txt index ec322e9..76e961a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-absolute-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform-absolute-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='child'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-disable-layoutstate-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform-disable-layoutstate-expected.txt index c679540..784e101 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-disable-layoutstate-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform-disable-layoutstate-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-replaced-shadows-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform-replaced-shadows-expected.txt index 14fb293..9f81115 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-replaced-shadows-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform-replaced-shadows-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutImage IMG id='box' class='smaller'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-rotate-and-remove-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform-rotate-and-remove-expected.txt index 86c601c0..48bf5ed 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-rotate-and-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform-rotate-and-remove-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='rel'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-translate-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform-translate-expected.txt index 3fe93ce87..ec5d9697 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-translate-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform-translate-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-child-expected.txt index 7b76bd2f1..07c84d5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-parent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-parent-expected.txt index 6c2fcd13..9ded0a0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-parent-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-same-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-same-expected.txt index 21cad36d..c6795fe 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-same-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-overflow-same-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='target'",
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 1b359eae..a049214 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='target'", "position": [8, 8], "bounds": [600, 400], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-overflow-expected.txt index 8acdfef..c338f68 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/view-background-from-body-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/view-background-from-body-2-expected.txt index 3bd618e..a89e865 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/view-background-from-body-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/view-background-from-body-2-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/viewport-gradient-background-html-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/viewport-gradient-background-html-resize-expected.txt index b1731ae..05fd10d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/viewport-gradient-background-html-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/viewport-gradient-background-html-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-composited-expected.txt index d8a230a..85e5263 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-composited-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-composited-expected.txt
@@ -3,7 +3,7 @@ { "name": "LayoutView #document", "bounds": [600, 250], - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -25,7 +25,7 @@ { "name": "LayoutView #document", "bounds": [400, 250], - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -47,7 +47,7 @@ { "name": "LayoutView #document", "bounds": [400, 600], - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -69,7 +69,7 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-expected.txt index e403f4133..2c754ce 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-fixed-centered-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -27,7 +27,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -50,7 +50,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -73,7 +73,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-generated-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-generated-expected.txt index e403f4133..2c754ce 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-generated-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-generated-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -27,7 +27,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -50,7 +50,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -73,7 +73,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-non-fixed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-non-fixed-expected.txt index 5e3ebd4..cc37dc5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-non-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-background-image-non-fixed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -27,7 +27,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -50,7 +50,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -73,7 +73,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-centered-inline-under-fixed-pos-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-centered-inline-under-fixed-pos-expected.txt index 0c1a1a15..8ade7e6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-centered-inline-under-fixed-pos-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-centered-inline-under-fixed-pos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='container'", @@ -63,7 +63,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='container'", @@ -117,7 +117,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='container'", @@ -176,7 +176,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='container'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-frameset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-frameset-expected.txt index b66fe1e..03fe8ca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-frameset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-frameset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutFrameSet FRAMESET", @@ -63,7 +63,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutFrameSet FRAMESET", @@ -156,7 +156,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutFrameSet FRAMESET", @@ -215,7 +215,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutFrameSet FRAMESET",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-media-query-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-media-query-expected.txt index 3d6a9e3..17dbc16 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-media-query-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-media-query-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ { @@ -28,7 +27,6 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ { @@ -52,7 +50,6 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ { @@ -76,7 +73,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change1-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change1-expected.txt index 1fbbde5a..a5461e7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change1-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change1-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -14,7 +14,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -24,7 +24,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -34,7 +34,7 @@ "name": "LayoutView #document", "bounds": [2008, 2016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change2-expected.txt index 880730d..a28361f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-no-layout-change2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2008], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -14,7 +14,7 @@ "name": "LayoutView #document", "bounds": [2008, 2008], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -24,7 +24,7 @@ "name": "LayoutView #document", "bounds": [2008, 2008], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -34,7 +34,7 @@ "name": "LayoutView #document", "bounds": [2008, 2008], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-html-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-html-expected.txt index 5513527..4ac6835 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-html-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-html-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -36,7 +36,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -68,7 +68,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -100,7 +100,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-width-height-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-width-height-expected.txt index 8cd53c0..e58fb24dc 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-width-height-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-percent-width-height-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -36,7 +36,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -68,7 +68,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -100,7 +100,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-bottom-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-bottom-expected.txt index 9307ccb..bb4712b8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-bottom-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-bottom-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -41,7 +41,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -64,7 +64,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -101,7 +101,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-percent-top-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-percent-top-expected.txt index 067b753..185e4247 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-percent-top-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-positioned-percent-top-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -41,7 +41,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -64,7 +64,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -101,7 +101,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-viewport-percent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-viewport-percent-expected.txt index 9ba1963..3e9fbab1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-viewport-percent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize-viewport-percent-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [600, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -41,7 +41,7 @@ "name": "LayoutView #document", "bounds": [400, 250], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -64,7 +64,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -101,7 +101,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/pagination/pagination-change-clip-crash-expected.txt b/third_party/WebKit/LayoutTests/paint/pagination/pagination-change-clip-crash-expected.txt index ef1810a..34e96286 100644 --- a/third_party/WebKit/LayoutTests/paint/pagination/pagination-change-clip-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/pagination/pagination-change-clip-crash-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 736], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -16,7 +16,8 @@ { "name": "LayoutBlockFlow DIV id='background'", "position": [8, 428], - "bounds": [769, 300] + "bounds": [769, 300], + "drawsContent": false } ], "objectPaintInvalidations": [
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 f071b9f..6d87a3a 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
@@ -5,21 +5,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='overlap'", "position": [8, 8], - "bounds": [300, 500] + "bounds": [300, 500], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')", "position": [15, 35], "bounds": [100, 210], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutText #text", @@ -58,21 +59,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='overlap'", "position": [8, 8], - "bounds": [300, 500] + "bounds": [300, 500], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')", "position": [15, 35], "bounds": [100, 210], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/composited-during-transition-layertree-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/composited-during-transition-layertree-expected.txt deleted file mode 100644 index fc6e350..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/composited-during-transition-layertree-expected.txt +++ /dev/null
@@ -1,39 +0,0 @@ - - - - -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutImage IMG id='grayscale-box'", - "position": [18, 18], - "bounds": [160, 90], - "drawsContent": true - }, - { - "name": "LayoutImage IMG id='saturate-box'", - "position": [18, 133], - "bounds": [160, 90], - "drawsContent": true - }, - { - "name": "LayoutImage IMG id='invert-box'", - "position": [18, 248], - "bounds": [160, 90], - "drawsContent": true - }, - { - "name": "LayoutImage IMG id='brightness-box'", - "position": [18, 363], - "bounds": [160, 90], - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inspector-support/matchedrules-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/inspector-support/matchedrules-expected.txt index e99f7db..431ece9d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inspector-support/matchedrules-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inspector-support/matchedrules-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 16: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 16: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.png index 44a29f3a..fe0d905f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.txt index 111c3c6..583daaa3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/media/media-document-audio-repaint-expected.txt
@@ -4,22 +4,20 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 LayoutBlockFlow {P} at (0,0) size 784x20 - LayoutText {#text} at (0,0) size 701x19 - text run at (0,0) width 620: "This tests that in a standalone media document with audio content, the media element repaints correctly " - text run at (620,0) width 81: "while playing." + LayoutText {#text} at (0,0) size 741x19 + text run at (0,0) width 651: "This tests that in a standalone media document with audio content, the media element repaints correctly " + text run at (651,0) width 90: "while playing." LayoutBlockFlow (anonymous) at (0,36) size 784x334 LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (0,0) size 0x0 layer at (8,44) size 384x334 LayoutIFrame {IFRAME} at (0,0) size 384x334 [border: (2px inset #EEEEEE)] layer at (0,0) size 380x330 LayoutView at (0,0) size 380x330 layer at (0,0) size 380x330 LayoutBlockFlow {HTML} at (0,0) size 380x330 - LayoutBlockFlow {BODY} at (0,0) size 380x330 [bgcolor=#000000] - LayoutFlexibleBox {DIV} at (0,0) size 380x330 + LayoutBlockFlow {BODY} at (8,8) size 364x314 [bgcolor=#000000] layer at (40,165) size 300x1 - LayoutVideo {VIDEO} at (40,164.50) size 300x1 + LayoutVideo (positioned) {VIDEO} at (40,164.50) size 300x1 layer at (40,165) size 300x1 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 300x1 LayoutBlockFlow {DIV} at (0,-31) size 300x32
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/backgroundSizeRepaint-expected.txt index 5fcf6d8a..e42b74e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/backgroundSizeRepaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/backgroundSizeRepaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt index 28dc52a2..c1c0055 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) SPAN",
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 bfdb1b1..1802431 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/body-background-image-expected.txt deleted file mode 100644 index 97394e1..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/body-background-image-expected.txt +++ /dev/null
@@ -1,25 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "rect": [8, 240, 784, 288], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/border-repaint-glitch-expected.txt deleted file mode 100644 index a42e135..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/border-repaint-glitch-expected.txt +++ /dev/null
@@ -1,51 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "rect": [19, 413, 200, 24], - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "rect": [19, 251, 200, 24], - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "rect": [33, 403, 172, 20], - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "rect": [33, 241, 172, 20], - "reason": "incremental" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box-inline-resize-expected.txt index 65314c26..498b450 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box-inline-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow H2",
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 663e27d..1259054d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 de9c7873..e385ed5b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6473-expected.txt index a087233..4f19f58 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6473-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6473-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='allcontent'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt index 6a05e10..c44c8f4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [785, 933], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { @@ -232,22 +231,22 @@ { "name": "LayoutVideo VIDEO id='video'", "position": [15, 859], - "bounds": [150, 60] + "bounds": [150, 60], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [15, 859], - "bounds": [150, 60], - "drawsContent": true + "bounds": [150, 60] }, { "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [15, 859], - "bounds": [150, 18], - "drawsContent": true + "bounds": [150, 18] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-contenteditable-content-after-expected.txt index 0f0a14e..06aa081 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-contenteditable-content-after-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt index 49ed2f7a..535cc5a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-outside-block-expected.txt deleted file mode 100644 index b8644c03..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-outside-block-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "rect": [791, 8, 1, 19], - "reason": "caret" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-transformation-expected.txt index 5c43925..e5ec759e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-transformation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/change-text-content-and-background-color-expected.txt index 9f52812..fe2c2dc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/change-text-content-and-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) INPUT id='input'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/column-rules-fixed-height-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/column-rules-fixed-height-expected.txt deleted file mode 100644 index ed77b09..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/column-rules-fixed-height-expected.txt +++ /dev/null
@@ -1,33 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutMultiColumnSet (anonymous)", - "rect": [8, 52, 525, 315], - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "rect": [8, 52, 310, 315], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/composited-table-row-expected.txt index 47c3340..1bcc707 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/composited-table-row-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR", "position": [8, 8], "bounds": [74, 24], - "drawsContent": true, "backgroundColor": "#FF0000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt index 586fc21..94cfb14c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [785, 4021], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='abs'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/text-color-change-expected.txt deleted file mode 100644 index b20afec..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/text-color-change-expected.txt +++ /dev/null
@@ -1,352 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutText #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/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 e305a01c..b96855e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 982bb2b..bd42b34 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/control-clip-expected.txt index 75fa8acb..c86abd5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/control-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/create-layer-repaint-expected.txt deleted file mode 100644 index 4c352c66..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/create-layer-repaint-expected.txt +++ /dev/null
@@ -1,33 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test' class='stretchy'", - "rect": [28, 56, 500, 50], - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='test' class='stretchy'", - "rect": [28, 56, 250, 50], - "reason": "subtree" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test' class='stretchy'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='test' class='stretchy'", - "reason": "subtree" - } - ] -} -
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 2d5193df..3fabdb37 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='two'",
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 39b99f249..7e9166c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='details-content'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt deleted file mode 100644 index 2f1876c..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt +++ /dev/null
@@ -1,29 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='fixedTransformed'", - "position": [8, 88], - "contentsOpaque": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='fixedOverlapping'", - "position": [8, 88], - "bounds": [800, 600] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='moveMe'", - "position": [150, 150], - "bounds": [100, 100], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/fixed-expected.txt deleted file mode 100644 index 0bfeedd1..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/fixed-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [785, 2016], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "rect": [8, 84, 100, 100], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "reason": "style change" - } - ] -} -
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 50303dc..a314fbd4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-expected.txt index 9380c0e..6fb3b82 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-right-expected.txt index a72a4fa..19ebd44 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/float-overflow-right-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-continuations-expected.txt index 8f57277..fe4c88c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-enable-continuations-expected.txt index 8f57277..fe4c88c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/focus-enable-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
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 f2712b7b..25b3c87 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton BUTTON",
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 91a75a37..a5b83e8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton INPUT",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/in-scaled-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/in-scaled-iframe-expected.txt deleted file mode 100644 index 1ca05c1e..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/in-scaled-iframe-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [785, 825], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "rect": [209, 209, 100, 100], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "style change" - } - ] -} -
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 5054768d..2c0a516 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-focus-expected.txt index aa3ed74..2b4a600c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-focus-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-outline-repaint-expected.txt index f507fe5..ffd58e8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-outline-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt index 3431ec2..67ddd4c9 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2000, 2000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt deleted file mode 100644 index 7342bca..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [785, 4936], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "rect": [8, 2408, 100, 100], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt index f7b16a6..5e29064 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt index 203026e..efe5660 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [7, 7], "bounds": [66, 24], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt index 203026e..efe5660 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [7, 7], "bounds": [66, 24], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
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 c9b03c65..adf9bec 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 2350], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt index ec585d70..01db175 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt index 90f1dabd..e0ec46a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-relative-expected.txt index 3bb3026c..948b90f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-relative-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset-expected.txt index e37c1ef..da9caf61 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset2-expected.txt index 499f5ac..56c4f908 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/layout-state-scrolloffset2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
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 15f6569..efccd34 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 2cb2c60..7b7ff22 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 3cad07b..302caaf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 01bdd5a..c6668ea 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 da60da6..14206f1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 fd3dcf6..b33ef358 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 8d9e3bd..451670e6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 5395d56..9e1661f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 4c14d16..80b3014 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 55afda8..eb66f24 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-overflow-expected.txt index 6551aba..f460e87 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 053b1ae..88b3b91 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV id='target'",
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 77eb001e..df52fd5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 a8ff6ad..b6eb602 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol-repaint-expected.txt index a15c1bd..a818be0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnFlowThread (anonymous)",
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 a4634db4..febcf06 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-change-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-change-invalidation-expected.txt deleted file mode 100644 index b9663d22..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-change-invalidation-expected.txt +++ /dev/null
@@ -1,37 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow A id='link'", - "rect": [43, 83, 754, 30], - "reason": "style change" - }, - { - "object": "LayoutListMarker (anonymous)", - "rect": [30, 88, 7, 19], - "reason": "style change" - } - ] - } - ], - "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/linux/paint/invalidation/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-clip-change-expected.txt index 9ba33ab..0376e17 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-clip-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-continuations-expected.txt index c42ad6a4..80d48de 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-shrinking-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-shrinking-expected.txt deleted file mode 100644 index 612b62a..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline-shrinking-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='t'", - "rect": [4, 114, 108, 108], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='t'", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-delete-line-expected.txt index 904c5dd..658a729 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-delete-line-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='dv'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.txt index c13ecaf..91a54fe 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-body-appear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2096], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-delete-expected.txt index 52e5e5ee..3056d85 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow-scroll-delete-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-document-element-expected.txt index 15dffc82d..615a098 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-document-element-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-great-grandparent-change-location-expected.txt index afa4230f..9f5ac91d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
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 ba11e45..eb50f4a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-redraw-expected.txt index b23b7692..b8303e32 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-redraw-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-repaint-test-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-repaint-test-expected.txt index 098fd3c..0cd1aa88 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-repaint-test-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection-repaint-test-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt deleted file mode 100644 index f08a997..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "rect": [8, 94, 100, 50], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt index 0056a28..87c14b1f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY", @@ -17,7 +17,6 @@ "name": "LayoutInline (relative positioned) DIV id='block'", "position": [68, 7], "bounds": [365, 21], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-block-after-layout-expected.txt index 5d0204dc..b4dfee2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-block-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-block-after-layout-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 9852c68..3859bd0c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 625c6caa..35f75caf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 c2444832..6e5a92f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 23e47b3..125d3f15 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt index 249daa4..b700628 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-resized-overflow-expected.txt index d728e04..3c44878 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-resized-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.png deleted file mode 100644 index 62e5363..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.png +++ /dev/null Binary files differ
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 a446edbb..72fba60 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/select-option-background-color-expected.txt deleted file mode 100644 index c1b0f61f..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/select-option-background-color-expected.txt +++ /dev/null
@@ -1,28 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow OPTION id='option'", - "rect": [1, 37, 13, 17], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow OPTION id='option'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-delete-expected.txt index de3175bc..2079f2d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-delete-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-remove-expected.txt index bfdb367..24afb4a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-after-remove-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-clear-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-clear-expected.png deleted file mode 100644 index 8dee85e3..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-clear-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-clear-expected.txt index 42c39f9..d6c5144 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-clear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='firstLine'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt index 4de8185e..62a8828 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-rl-expected.txt index b2ab127..b008bcb 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection-rl-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 7629349..ec32a6a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 d3b455e6..8d93ee4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 b7355d9a0..f969239e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 7bf4046..68cc119f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 168cf30..269695d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 0164fdc..7133b53c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 26bf4d9..ec9d881 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
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 26bf4d9..ec9d881 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt index 3feb1fb9..152a4a3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1059, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 f1346a19..71fe95e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='stacked'",
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 dc1edd0..5dfa3a2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 1452c85..dbf05ec 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
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
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 b8cc40b..a62c4ef 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 ca2788f..1e37307 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/image-with-clip-path-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/image-with-clip-path-expected.png deleted file mode 100644 index 82abeb4b..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/image-with-clip-path-expected.png +++ /dev/null Binary files differ
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 5b7716c..64ab6b6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt index 442fc2e..8600274 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 31dd7f9..548649a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 1273d94..ea2429f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 1273d94..ea2429f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 e293384..a2073ede 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1026, 1036], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 a65149a..0ae2904 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 d837cf18..5b2c27c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='objectsToRemove'",
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 4b5900d..646af737 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 d6cb3420..9cb7952 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 7fb4946..d067e6a2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='text2g'",
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 7b9873c..d4ceb280d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-viewbox-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-viewbox-rescale-expected.txt index ee4b4ff..67a1856 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-viewbox-rescale-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-viewbox-rescale-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 5a05ace..fd88fa8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [808, 621], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 dc51262..578447e1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 340feec..8426594 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/window-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/window-expected.txt index aa001ac..ab1d615 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/window-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='Windows'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table-collapsed-border-expected.txt index 6103ea4..c72daa17 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table-collapsed-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE",
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 186df46..88abbe3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 996754c..1a41f3b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 996754c..1a41f3b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 7a43ec71..f207ea9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,14 +16,12 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] }, { "name": "LayoutTableCell TD", "position": [133, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 7a43ec71..f207ea9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,14 +16,12 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] }, { "name": "LayoutTableCell TD", "position": [133, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 e3dd27ea..dab1886 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 e3dd27ea..dab1886 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 86f5064..4e6fb16 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR id='target'", "position": [8, 96], "bounds": [186, 64], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 86f5064..4e6fb16 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR id='target'", "position": [8, 96], "bounds": [186, 64], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 3aaba5e..abe697e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 3aaba5e..abe697e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 41c7dd4f..6f98b6b 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,14 +22,12 @@ { "name": "LayoutTableRow TR", "position": [8, 96], - "bounds": [186, 64], - "drawsContent": true + "bounds": [186, 64] }, { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 41c7dd4f..6f98b6b 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,14 +22,12 @@ { "name": "LayoutTableRow TR", "position": [8, 96], - "bounds": [186, 64], - "drawsContent": true + "bounds": [186, 64] }, { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 053e101e..af4f67f 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 053e101e..af4f67f 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 5a492bc..61cff95 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 e2165062..6f57c22 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
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 1fe1a0f..cfe5cb8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
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 4770ec4..e490cde 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 ef8375fb..cbf5b9d9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='to-be-changed'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt index bec801a..621f13c1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-expected.txt index 90d1fb2..934fca4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-selection-rect-in-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/textarea-caret-expected.txt index 40af8a0..854f227 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/textarea-caret-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl TEXTAREA id='editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-absolute-in-positioned-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-absolute-in-positioned-container-expected.txt deleted file mode 100644 index 71bccce5..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-absolute-in-positioned-container-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [802, 585], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'", - "rect": [76, 190, 286, 286], - "reason": "subtree" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-inline-layered-child-expected.txt index 95f325b..abe17590 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-inline-layered-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-layout-repaint-expected.txt index 4c7eaf71..3c82ec5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-layout-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-relative-position-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-relative-position-expected.txt deleted file mode 100644 index abd3106..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-relative-position-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'", - "rect": [66, 110, 286, 286], - "reason": "subtree" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-repaint-descendants-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-repaint-descendants-expected.txt deleted file mode 100644 index 3959428..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform-repaint-descendants-expected.txt +++ /dev/null
@@ -1,38 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true, - "paintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "rect": [176, 220, 394, 185], - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "rect": [176, 220, 388, 203], - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='box'", - "rect": [76, 120, 266, 266], - "reason": "subtree" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='box'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize-vertical-writing-mode-expected.txt index dbc865fb..860a925 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [939, 235], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML", @@ -144,7 +144,7 @@ "name": "LayoutView #document", "bounds": [939, 235], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML", @@ -289,7 +289,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -397,7 +397,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-blobs/external/wpt/FileAPI/historical.https-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-blobs/external/wpt/FileAPI/historical.https-expected.txt deleted file mode 100644 index f8ff3a2..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/mojo-blobs/external/wpt/FileAPI/historical.https-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -This is a testharness.js-based test. -PASS "toNativeLineEndings" should not be supported -PASS "FileError" should not be supported -PASS "FileException" should not be supported -PASS Blob should not support slice prefixed -PASS BlobBuilder should not be supported. -PASS createFor method should not be supported -FAIL Blob.close() should not be supported assert_false: close in b expected false got true -PASS Service worker test setup -PASS "FileReaderSync" should not be supported in service workers -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt new file mode 100644 index 0000000..98958a6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS Must support valid standard URL PMIs +PASS Must not throw on syntactically valid standardized payment method identifiers, even if they are not supported +FAIL Test for validity of payment method identifiers during construction assert_throws: expected RangeError processing invalid standardized PMI "basic-💳" function "() => { + const methods = [{ supportedMethods: invalidMethod }]; + new PaymentRequest(methods, defaultDetails); + }" did not throw +FAIL Constructor MUST throw if given an invalid URL-based payment method identifier assert_throws: expected RangeError processing invalid URL PMI "https://username@example.com/pay" function "() => { + const methods = [{ supportedMethods: invalidMethod }]; + new PaymentRequest(methods, defaultDetails); + }" did not throw +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/change-text-content-and-background-color-expected.txt index af4c52ed..b6d1bc02 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/change-text-content-and-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) INPUT id='input'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/control-clip-expected.txt index 5c2a3eb..375a45e5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/control-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 a5dd2566..d881fd61 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton BUTTON",
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 3fae418..57a6026a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton INPUT",
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 16332f3a..9c4a754f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 a826c0f..adc04a4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt deleted file mode 100644 index 5deec6e26..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt +++ /dev/null
@@ -1,202 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer A'", - "position": [6, 6], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='scroller'", - "position": [38, 38], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [67, 67], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [67, 67], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [62, 62], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [280, 67], - "bounds": [7, 160] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer B'", - "position": [355, 6], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [387, 38], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [416, 67], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [416, 67], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "position": [428, 79], - "bounds": [196, 212], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#DDDDDD" - }, - { - "name": "Overflow Controls Host Layer", - "position": [411, 62], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [629, 67], - "bounds": [7, 160] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer C'", - "position": [6, 297], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "Ancestor Clipping Layer", - "position": [46, 337], - "bounds": [260, 100] - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [37, 328], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [66, 357], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [66, 357], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "position": [78, 369], - "bounds": [196, 212], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#DDDDDD" - }, - { - "name": "Overflow Controls Ancestor Clipping Layer", - "position": [46, 337], - "bounds": [260, 100] - }, - { - "name": "Overflow Controls Host Layer", - "position": [61, 352], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [279, 357], - "bounds": [7, 160] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer D'", - "position": [355, 297], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='clipper'", - "position": [379, 321], - "bounds": [292, 200], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "position": [389, 331], - "bounds": [272, 180] - }, - { - "name": "Ancestor Clipping Layer", - "position": [395, 337], - "bounds": [260, 100] - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [386, 328], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [415, 357], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [415, 357], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "position": [427, 369], - "bounds": [196, 212], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#DDDDDD" - }, - { - "name": "Overflow Controls Ancestor Clipping Layer", - "position": [395, 337], - "bounds": [260, 100] - }, - { - "name": "Overflow Controls Host Layer", - "position": [410, 352], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [628, 357], - "bounds": [7, 160] - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-constructor.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/payment-request/payment-request-constructor.https-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/external/wpt/payment-request/payment-request-constructor.https-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/payment-request/payment-request-constructor.https-expected.txt
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt new file mode 100644 index 0000000..b8f69eb --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/external/wpt/payment-request/payment-request-ctor-pmi-handling.https-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +FAIL Constructor MUST throw if given an invalid payment method identifier assert_throws: expected RangeError processing invalid PMI "[object Object]" function "() => { + new PaymentRequest([invalidMethod], defaultDetails); + }" did not throw +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt new file mode 100644 index 0000000..81ae72b --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt
@@ -0,0 +1,24 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutBlockFlow INPUT", + "rect": [5, 7, 23, 22], + "reason": "subtree" + } + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow INPUT", + "reason": "subtree" + } + ] +} +
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt new file mode 100644 index 0000000..aec3da4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt
@@ -0,0 +1,24 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutBlockFlow INPUT", + "rect": [5, 6, 23, 23], + "reason": "subtree" + } + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow INPUT", + "reason": "subtree" + } + ] +} +
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 37ff787..1fe2d4c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 b77f30f1..27ed42a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt index ee9356d0..6775f55 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -5,77 +5,79 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl TEXTAREA", "position": [18, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [19, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [19, 19], "bounds": [189, 308], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [18, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [208, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [208, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutTextControl TEXTAREA", "position": [248, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [249, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [249, 19], "bounds": [189, 308], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [248, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [438, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [438, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt index 41e6eca..c52ac39 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/change-text-content-and-background-color-expected.txt index 022bcab..2198f6f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/change-text-content-and-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) INPUT id='input'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/control-clip-expected.txt index 6670a29..3ba90ae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/control-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 530071a..44bfa86 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='details-content'",
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 01125c7..95facb7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton INPUT",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt index 049aa0d..922ac01 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [5, 5], "bounds": [54, 25], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt index 049aa0d..922ac01 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [5, 5], "bounds": [54, 25], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/japanese-rl-selection-repaint-expected.txt index 299eef0e..63e6024 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/japanese-rl-selection-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/japanese-rl-selection-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 c20cfeb..9eff4f30 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 2a57678..bfa0eb5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 e4815bf..087e597 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
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 e4815bf..087e597 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
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 a9b337a..a4ae4ad 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='stacked'",
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 06a9d36..6324be71 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/textarea-caret-expected.txt index 03ffb43..cc0b1aa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/textarea-caret-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl TEXTAREA id='editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt index ee9356d0..6775f55 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -5,77 +5,79 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl TEXTAREA", "position": [18, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [19, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [19, 19], "bounds": [189, 308], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [18, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [208, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [208, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutTextControl TEXTAREA", "position": [248, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [249, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [249, 19], "bounds": [189, 308], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [248, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [438, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [438, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/search-field-cancel-expected.txt index 37ff787..1fe2d4c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/search-field-cancel-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/subtree-root-skipped-expected.txt index b77f30f1..27ed42a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/paint/invalidation/subtree-root-skipped-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt deleted file mode 100644 index 5deec6e26..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt +++ /dev/null
@@ -1,202 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer A'", - "position": [6, 6], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='scroller'", - "position": [38, 38], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [67, 67], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [67, 67], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [62, 62], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [280, 67], - "bounds": [7, 160] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer B'", - "position": [355, 6], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [387, 38], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [416, 67], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [416, 67], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "position": [428, 79], - "bounds": [196, 212], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#DDDDDD" - }, - { - "name": "Overflow Controls Host Layer", - "position": [411, 62], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [629, 67], - "bounds": [7, 160] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer C'", - "position": [6, 297], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "Ancestor Clipping Layer", - "position": [46, 337], - "bounds": [260, 100] - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [37, 328], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [66, 357], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [66, 357], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "position": [78, 369], - "bounds": [196, 212], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#DDDDDD" - }, - { - "name": "Overflow Controls Ancestor Clipping Layer", - "position": [46, 337], - "bounds": [260, 100] - }, - { - "name": "Overflow Controls Host Layer", - "position": [61, 352], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [279, 357], - "bounds": [7, 160] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer D'", - "position": [355, 297], - "bounds": [340, 282], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='clipper'", - "position": [379, 321], - "bounds": [292, 200], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "position": [389, 331], - "bounds": [272, 180] - }, - { - "name": "Ancestor Clipping Layer", - "position": [395, 337], - "bounds": [260, 100] - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [386, 328], - "bounds": [278, 218], - "drawsContent": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "position": [415, 357], - "bounds": [220, 160] - }, - { - "name": "Scrolling Contents Layer", - "position": [415, 357], - "bounds": [220, 236], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "position": [427, 369], - "bounds": [196, 212], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#DDDDDD" - }, - { - "name": "Overflow Controls Ancestor Clipping Layer", - "position": [395, 337], - "bounds": [260, 100] - }, - { - "name": "Overflow Controls Host Layer", - "position": [410, 352], - "bounds": [230, 170] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [628, 357], - "bounds": [7, 160] - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt index 6d52403..21b6fe2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
@@ -6,26 +6,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [10, 10], - "bounds": [590, 208], - "drawsContent": true + "bounds": [590, 208] }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [10, 260], - "bounds": [590, 208], - "drawsContent": true + "bounds": [590, 208] }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner box'", "position": [500, 368], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/composited-in-columns-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/composited-in-columns-expected.txt index fd5a5fd9..d648298 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/composited-in-columns-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/composited-in-columns-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited block'", "position": [14, 162], "bounds": [210, 60], - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -18,14 +17,12 @@ "position": [19, 167], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutBlockFlow DIV class='composited block'", "position": [272, 88], "bounds": [210, 60], - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -33,7 +30,6 @@ "position": [277, 93], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt index f4730214..62d826c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
@@ -8,7 +8,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -20,20 +20,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='parent'", "position": [8, 8], - "bounds": [342, 292], - "drawsContent": true + "bounds": [342, 292] }, { "name": "LayoutBlockFlow (relative positioned) DIV id='child'", "position": [39, 47], "bounds": [250, 220], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -41,7 +39,6 @@ "position": [10, 10], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00", "transform": 1 }, @@ -50,7 +47,6 @@ "position": [100, 0], "bounds": [250, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 2 } @@ -85,9 +81,9 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1511], + "bounds": [785, 1451], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt index 1e29c24..8308a966 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
@@ -8,7 +8,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -20,20 +20,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='parent' class='parent'", "position": [8, 8], - "bounds": [242, 192], - "drawsContent": true + "bounds": [242, 192] }, { "name": "LayoutBlockFlow (relative positioned) DIV id='child' class='child'", "position": [121, 39], "bounds": [250, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 } @@ -57,9 +55,9 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 991], + "bounds": [785, 961], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt index d19ec2c..6fae84d9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
@@ -4,20 +4,21 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='compositing'", "position": [21, 21], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')", - "bounds": [211, 142], - "drawsContent": true + "bounds": [211, 142] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt index 15fdf45..a420cf2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
@@ -7,17 +7,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='container'", "position": [108, 73], - "bounds": [304, 304], - "drawsContent": true + "bounds": [304, 304] }, { "name": "Child Transform Layer", "bounds": [304, 304], + "drawsContent": false, "transform": 1 }, { @@ -25,7 +25,6 @@ "position": [12, 12], "bounds": [280, 280], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00", "transform": 2 }, @@ -35,7 +34,6 @@ "bounds": [200, 200], "opacity": 0.699999988079071, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 3 }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt index d8ccdaa9..2b66f32cd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -5,69 +5,73 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME", "position": [-11, -11], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [23, 23], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [23, 23], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [23, 23] + "position": [23, 23], + "drawsContent": false }, { "name": "Content Root Layer", "position": [23, 23], - "bounds": [285, 192] + "bounds": [285, 192], + "drawsContent": false }, { "name": "LayoutView #document", "position": [23, 23], - "bounds": [285, 192], - "drawsContent": true + "bounds": [285, 192] }, { "name": "LayoutIFrame IFRAME", "position": [31, 31], - "bounds": [252, 172], - "drawsContent": true + "bounds": [252, 172] }, { "name": "Frame Overflow Controls Host Layer", "position": [32, 32], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [32, 32], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [32, 32] + "position": [32, 32], + "drawsContent": false }, { "name": "Content Root Layer", "position": [32, 32], - "bounds": [250, 230] + "bounds": [250, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [32, 32], "bounds": [250, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -75,20 +79,19 @@ "position": [50, 42], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [308, 23], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='box'", "position": [18, 202], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt index 0f853e7..622490e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -6,52 +6,52 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='scrollable bigBox'", "position": [8, 68], - "bounds": [302, 302], - "drawsContent": true + "bounds": [302, 302] }, { "name": "Scrolling Layer", "position": [9, 69], - "bounds": [285, 285] + "bounds": [285, 285], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [9, 69], - "bounds": [285, 800], - "drawsContent": true + "bounds": [285, 800] }, { "name": "Overflow Controls Host Layer", "position": [8, 68], - "bounds": [302, 302] + "bounds": [302, 302], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [9, 354], - "bounds": [285, 15] + "bounds": [285, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [294, 69], - "bounds": [15, 285] + "bounds": [15, 285], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [294, 354], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'", "position": [10, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt index de1d798..031f02e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -7,13 +7,12 @@ "name": "LayoutView #document", "bounds": [785, 611], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='preserve3d'", "position": [18, 390], "bounds": [342, 180], - "drawsContent": true, "transform": 1 }, { @@ -21,7 +20,6 @@ "position": [31, 49], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0", "transform": 2 }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt index c535ae7..1d8ba0a4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -5,77 +5,79 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl TEXTAREA", "position": [18, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [19, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [19, 19], "bounds": [189, 270], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [18, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [208, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [208, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutTextControl TEXTAREA", "position": [248, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [249, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [249, 19], "bounds": [189, 270], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [248, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [438, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [438, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt index d46d695..c8f208e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
@@ -4,34 +4,32 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [784, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "Child Containment Layer", "position": [8, 8], - "bounds": [784, 10] + "bounds": [784, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='inner'", "position": [8, 8], "bounds": [784, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#F5F5F5" }, { "name": "LayoutBlockFlow (positioned) DIV class='hoverable'", "position": [8, 0], "bounds": [211, 100], - "drawsContent": true, "backgroundColor": "#90EE90" } ]
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 042a31fb..6faa922 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
@@ -5,21 +5,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='overlap'", "position": [8, 8], - "bounds": [300, 500] + "bounds": [300, 500], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')", "position": [15, 35], "bounds": [100, 210], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutText #text", @@ -58,21 +59,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='overlap'", "position": [8, 8], - "bounds": [300, 500] + "bounds": [300, 500], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')", "position": [15, 35], "bounds": [100, 210], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/tiled-layers-hidpi-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/tiled-layers-hidpi-expected.txt index b11ac72..fbf9880 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/tiled-layers-hidpi-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/tiled-layers-hidpi-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [1808, 585], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='composited'", "position": [8, 8], "bounds": [1800, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt index 3f4dd11a..b99459a2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt
@@ -8,7 +8,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -21,7 +21,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -34,27 +34,27 @@ "name": "LayoutView #document", "bounds": [785, 782], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutVideo VIDEO", "position": [8, 8], - "bounds": [352, 288] + "bounds": [352, 288], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [8, 8], - "bounds": [352, 288], - "drawsContent": true + "bounds": [352, 288] }, { "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [8, 8], - "bounds": [352, 246], - "drawsContent": true + "bounds": [352, 246] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt index 22c5698..6b0e3ea3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -9,23 +9,26 @@ "name": "LayoutView #document", "bounds": [785, 626], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 144] + "bounds": [749, 144], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 314], "bounds": [757, 152], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 338], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -35,30 +38,34 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1036], + "bounds": [785, 1081], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 144] + "bounds": [749, 144], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 314], "bounds": [757, 152], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 338], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -68,41 +75,45 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1520], + "bounds": [785, 1625], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 144] + "bounds": [749, 144], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 160], - "bounds": [757, 152], - "drawsContent": true + "bounds": [757, 152] }, { "name": "LayoutImage IMG class='composited box'", "position": [38, 184], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 314], "bounds": [757, 152], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 338], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt index e8a2b58d..329764f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -3,20 +3,20 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", "bounds": [800, 69], - "isolate": true, - "drawsContent": true + "isolate": true }, { "name": "LayoutBlockFlow DIV", "position": [8, 18], "bounds": [10, 10], "blendMode": "multiply", - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -24,7 +24,6 @@ "position": [8, 18], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" } ]
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-during-transition-layertree-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-during-transition-layertree-expected.txt similarity index 68% rename from third_party/WebKit/LayoutTests/css3/filters/composited-during-transition-layertree-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-during-transition-layertree-expected.txt index f36e0b2..77ac314 100644 --- a/third_party/WebKit/LayoutTests/css3/filters/composited-during-transition-layertree-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-during-transition-layertree-expected.txt
@@ -8,31 +8,27 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutImage IMG id='grayscale-box'", "position": [18, 18], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] }, { "name": "LayoutImage IMG id='saturate-box'", "position": [18, 132], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] }, { "name": "LayoutImage IMG id='invert-box'", "position": [18, 246], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] }, { "name": "LayoutImage IMG id='brightness-box'", "position": [18, 360], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt index caf6a420..4acc4827 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='compositor-painted-shadow'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -19,7 +18,6 @@ "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ] @@ -30,14 +28,13 @@ "name": "LayoutView #document", "bounds": [835, 585], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='software-painted-shadow'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -45,7 +42,6 @@ "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/inspector-support/matchedrules-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/inspector-support/matchedrules-expected.txt index fb3053e..eb41be63 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/inspector-support/matchedrules-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/inspector-support/matchedrules-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 16: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 16: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.png index 12b59c6..92cee9c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.txt index 74f2852b..e9d56e2f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/media/media-document-audio-repaint-expected.txt
@@ -9,17 +9,15 @@ text run at (666,0) width 93: "while playing." LayoutBlockFlow (anonymous) at (0,34) size 784x334 LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (0,0) size 0x0 layer at (8,42) size 384x334 LayoutIFrame {IFRAME} at (0,0) size 384x334 [border: (2px inset #EEEEEE)] layer at (0,0) size 380x330 LayoutView at (0,0) size 380x330 layer at (0,0) size 380x330 LayoutBlockFlow {HTML} at (0,0) size 380x330 - LayoutBlockFlow {BODY} at (0,0) size 380x330 [bgcolor=#000000] - LayoutFlexibleBox {DIV} at (0,0) size 380x330 + LayoutBlockFlow {BODY} at (8,8) size 364x314 [bgcolor=#000000] layer at (40,165) size 300x1 - LayoutVideo {VIDEO} at (40,164.50) size 300x1 + LayoutVideo (positioned) {VIDEO} at (40,164.50) size 300x1 layer at (40,165) size 300x1 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 300x1 LayoutBlockFlow {DIV} at (0,-31) size 300x32
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 f3a86e58..566a422 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt index 37c76b3..2a2de8f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1250, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/backgroundSizeRepaint-expected.txt index c7ec4df..c42b353 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/backgroundSizeRepaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/backgroundSizeRepaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt index 375c2a2..3d16c10 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) SPAN",
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 7d04804..4d2c224 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/body-background-image-expected.txt similarity index 94% rename from third_party/WebKit/LayoutTests/paint/invalidation/body-background-image-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/body-background-image-expected.txt index aa8a476b..13c60ba 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/body-background-image-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/body-background-image-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/border-radius-repaint-expected.txt index c3ec47f..8f95c8d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/border-radius-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/border-radius-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/border-repaint-glitch-expected.txt similarity index 96% rename from third_party/WebKit/LayoutTests/paint/invalidation/border-repaint-glitch-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/border-repaint-glitch-expected.txt index 4f579f74..108bfd7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/border-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/border-repaint-glitch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-inline-resize-expected.txt index 5a6f239..8b75c04 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-inline-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow H2",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-shadow-dynamic-expected.txt index 0f9972af..6d3ea52 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-shadow-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box-shadow-dynamic-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 bd92e0f..f5c20b8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='im'",
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 c156eb4..9e99e7e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 12d1a1e..2e0c0fa 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6388-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6388-expected.txt index a28c1a4b..63591ce 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6388-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6388-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
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 17e05d7..23541c3e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='allcontent'",
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 3fecbfe..3abd99d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/button-checkbox-click-method-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/button-checkbox-click-method-repaint-expected.txt index 9f4b3cf..129113f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/button-checkbox-click-method-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/button-checkbox-click-method-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow INPUT id='checkbox'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt index b1ec30ba..b429522 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [785, 928], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { @@ -232,22 +231,22 @@ { "name": "LayoutVideo VIDEO id='video'", "position": [15, 854], - "bounds": [150, 60] + "bounds": [150, 60], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [15, 854], - "bounds": [150, 60], - "drawsContent": true + "bounds": [150, 60] }, { "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [15, 854], - "bounds": [150, 18], - "drawsContent": true + "bounds": [150, 18] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-contenteditable-content-after-expected.txt index bae6e26..197cb24 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-contenteditable-content-after-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt index cc332d1..8ad563ef 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 12a8fe8..49ceaff 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
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 05c1760..d62b5c8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt index 467d14c0..37e7011 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 44], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 44], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 44], "bounds": [205, 1019], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='text'", @@ -38,19 +37,18 @@ { "name": "Overflow Controls Host Layer", "position": [8, 44], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 144], - "bounds": [100, 0], - "drawsContent": true + "bounds": [100, 0] }, { "name": "Vertical Scrollbar Layer", "position": [108, 44], - "bounds": [0, 100], - "drawsContent": true + "bounds": [0, 100] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-transformation-expected.txt index 56b54e8..b1b15b4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-transformation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/change-text-content-and-background-color-expected.txt index 2638cda..9d706ca 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/change-text-content-and-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) INPUT id='input'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip-with-layout-delta-expected.txt index db15dc34..9829eda 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip-with-layout-delta-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clipped-relative-expected.txt index d79b913..861f78b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clipped-relative-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='inner'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/column-rules-fixed-height-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/column-rules-fixed-height-expected.txt similarity index 94% rename from third_party/WebKit/LayoutTests/paint/invalidation/column-rules-fixed-height-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/column-rules-fixed-height-expected.txt index 5090180..c7ffa37 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/column-rules-fixed-height-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/column-rules-fixed-height-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnSet (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/composited-table-row-expected.txt index 7fa8981..fead335c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/composited-table-row-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR", "position": [8, 8], "bounds": [76, 22], - "drawsContent": true, "backgroundColor": "#FF0000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt index 038fc3e..197796f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [785, 4021], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='abs'",
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 658821ef..c9da3313 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [785, 1016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='foo'", "position": [8, 8], "bounds": [200, 1000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [8, 0], "bounds": [300, 654], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
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 d9d43ab..f4445d30 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1418, 1008], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'", @@ -24,18 +24,19 @@ ] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], - "bounds": [1000, 1000] + "bounds": [1000, 1000], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='mv-tile')", "position": [8, 8], "bounds": [1000, 104], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
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 97d89a8..775d13bd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 beaa3097..eee3185 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 d766ff5..aec07f0b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/containing-block-position-change-expected.txt index c25db09..e126096 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/containing-block-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/containing-block-position-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/control-clip-expected.txt index ac49867..cbb16063 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/control-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-2-expected.txt index 42f5fdf1..96794b7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
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 c554953..e15958e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep_child'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-4-expected.txt index ce84f18..199f1485 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-4-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-expected.txt index 36328e12..2524eed 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/create-layer-repaint-expected.txt similarity index 95% rename from third_party/WebKit/LayoutTests/paint/invalidation/create-layer-repaint-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/create-layer-repaint-expected.txt index 866d316..90488e47 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/create-layer-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/create-layer-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
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 2959b6b..7b66fab 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='two'",
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 7a1cade..20a8026 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='details-content'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt index 733955dc..53f8be14 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [808, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt similarity index 78% rename from third_party/WebKit/LayoutTests/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt index 223ea33..566cea4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt
@@ -4,24 +4,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixedTransformed'", "position": [8, 102], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='fixedOverlapping'", "position": [8, 102], - "bounds": [800, 600] + "bounds": [800, 600], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='moveMe'", "position": [150, 150], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/fixed-expected.txt similarity index 92% rename from third_party/WebKit/LayoutTests/paint/invalidation/fixed-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/fixed-expected.txt index 3c59bf0..87d543e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/fixed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t'",
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 57f2eeb..c4cfb6a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
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 7f2b3e9..f331f162 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='dynamic' class='content'",
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 2422103d..87c082b2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-expected.txt index 54c439b..9266bfd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-right-expected.txt index 7865ee9..8411d66 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-overflow-right-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-continuations-expected.txt index 1e76a8b..537d9e8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-enable-continuations-expected.txt index 1e76a8b..537d9e8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-enable-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-child-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-child-move-expected.txt index 01655ade..597ef500 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-child-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-child-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-continuation-move-expected.txt index ed577a4..07222d0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-continuation-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt index 330eb88..e9f60e9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 031bb75..219cf6ef 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton BUTTON",
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 05a2122..9a036695 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSlider INPUT",
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 db0fa84..f558f30 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton INPUT",
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 39bf133..ad92636 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='em-units'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-block-to-display-none-expected.txt index 1739a88..8d043e7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-block-to-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-block-to-display-none-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutIFrame IFRAME id='iframe'",
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 2ac03b3..dcb18836 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutIFrame IFRAME id='iframe'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/in-scaled-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/in-scaled-iframe-expected.txt similarity index 92% rename from third_party/WebKit/LayoutTests/paint/invalidation/in-scaled-iframe-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/in-scaled-iframe-expected.txt index 1f79c3d..fb665b6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/in-scaled-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/in-scaled-iframe-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 824], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='div'",
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 4579293..a967bba 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-focus-expected.txt index 7972811..e6d4187 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-focus-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-2-expected.txt index d3d1ec8..e1cb1eee 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-expected.txt index aec99b5..567f6d4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-outline-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-overflow-expected.txt index 1ae44d8..fa6b397 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 0b68ab2..da4296b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt index 98a0830..787f0ab 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2000, 2000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-lr-overflow-expected.txt index 7e292fe..f1936cb4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-lr-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-rl-overflow-expected.txt index 1ce30cf..0da7442b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-vertical-rl-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt similarity index 92% rename from third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt index 5eece02..fd9a3c9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 4934], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt index c47aa32..cbd6041e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='target'",
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 3c283e37b..9aa4542 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='root' class='editing'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt index 54051b3..9ebe57b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [5, 5], "bounds": [47, 25], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt index 54051b3..9ebe57b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [5, 5], "bounds": [47, 25], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
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 5516cd9f..606c7541 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 2350], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-clear-expected.txt index 23f241bf..0735dac 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-clear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-repaint-expected.txt index 4ff7712e..f696582d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/japanese-rl-selection-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-relative-expected.txt index 608fef2..ee9945d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-relative-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset-expected.txt index 67e684fb..702c02a7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset2-expected.txt index 4ce0ea05..89d7e2a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset3-expected.txt index 3a6bb0c..5c0e33f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layout-state-scrolloffset3-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index c988172..19062cf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 9ce997e6..33c3911 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 9a9858e..142a830 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 8722cfce..e8ab4f8a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 2f8b05f..4c22cb6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 171fa07..4c43ed45 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 e8ef112..cde22455 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 c2a4aac..b3de75a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 9d8c074..cf1d548 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 e5e06b1f..a487f29 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 796e6f0..1002f6b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-in-scrolled-clipped-block-expected.txt index e36facf..20b5e689 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-in-scrolled-clipped-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-in-scrolled-clipped-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-overflow-expected.txt index 1e7f83f..ff2b30c5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 7f00824..d8b4906f8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV id='target'",
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 31c6e763..c3cd57a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutListItem LI",
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 1525cde2..dad5435 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 2bd23a5..92228ac 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-as-paint-container-expected.txt index fa7976d8..14a8722 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-as-paint-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='target'", "position": [8, 8], "bounds": [630, 180], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-repaint-expected.txt index 4f9ffa2..44ed6b6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnFlowThread (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-expected.txt index 4a4a951..96ae29b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt index d62e8b5..3840805 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-block-expected.txt index 6329003..3007dde 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-inline-expected.txt index 556de9c9..cc13ded 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-inline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-text-expected.txt index 302f5dc5..60809ae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol-with-text-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnFlowThread (anonymous)",
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 019556a..2cac11a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 9cccbd0a..bb8ea80 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) UL id='submenu'", @@ -31,19 +31,18 @@ { "name": "LayoutListItem (floating) LI id='watches'", "position": [31, 42], - "bounds": [24, 18], - "drawsContent": true + "bounds": [24, 18] }, { "name": "LayoutInline (relative positioned) SPAN id='placeholder'", "position": [48, 42], + "drawsContent": false, "backfaceVisibility": "hidden" }, { "name": "LayoutListItem (relative positioned) (floating) LI id='menu'", "position": [31, 42], "bounds": [17, 18], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutListMarker (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/opacity-change-on-overflow-float-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/opacity-change-on-overflow-float-expected.txt index c86dd1a..bb2061a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/opacity-change-on-overflow-float-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/opacity-change-on-overflow-float-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV class='green'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-affected-by-descendant-expected.txt index ced01b4..9eb18f2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-affected-by-descendant-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outline'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt index 9d2ead9..235a9a2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outline'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-change-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-change-invalidation-expected.txt index 295adda..f95aa8c60 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-change-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-change-invalidation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow A id='link'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-clip-change-expected.txt index 65ad946..cff92b30 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-clip-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-continuations-expected.txt index 9a51e19..99c85f9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-inset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-inset-expected.txt index 3932fe25..c6577bbd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-inset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-inset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-repaint-glitch-expected.txt index 73478787..a7f53057 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-repaint-glitch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline-shrinking-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-shrinking-expected.txt similarity index 92% rename from third_party/WebKit/LayoutTests/paint/invalidation/outline-shrinking-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-shrinking-expected.txt index 59cbcb4..f112ce9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline-shrinking-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline-shrinking-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='t'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-delete-line-expected.txt index 480b7f7..e0edc4e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-delete-line-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='dv'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-body-appear-expected.txt index 9dd55ad..18d5d30 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-body-appear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-body-appear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2092], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-delete-expected.txt similarity index 93% rename from third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-delete-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-delete-expected.txt index fc3db4d..008b2244 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow-scroll-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-delete-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt index 995a6c5..7dc270e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ { @@ -23,14 +22,15 @@ { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [185, 550], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#0000FF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='scroller'", @@ -42,12 +42,14 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], "bounds": [185, 15], + "drawsContent": false, "paintInvalidations": [ { "object": "Horizontal Scrollbar Layer", @@ -60,6 +62,7 @@ "name": "Vertical Scrollbar Layer", "position": [193, 8], "bounds": [15, 185], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer", @@ -76,8 +79,7 @@ { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overhanging-float-detach-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overhanging-float-detach-repaint-expected.txt index af9835e..380d640 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overhanging-float-detach-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overhanging-float-detach-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV class='float'",
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 df59711..f4c2fe6d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-document-element-expected.txt index 266a428..3e1ee212 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-document-element-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-great-grandparent-change-location-expected.txt index 7dcc98b..00e8c8cc0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-list-offset-change-repaint-expected.txt index e0414b76..9c594cae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/positioned-list-offset-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutListItem (positioned) LI",
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 ec35408..13c2115 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='spacer'",
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 6b2921ad..70db61fe 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection-redraw-expected.txt index 555a9eb4..0784347b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection-redraw-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt similarity index 92% rename from third_party/WebKit/LayoutTests/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt index 5d1fb9a..a241d10e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt index 39fd066f..bbd7fb2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY", @@ -17,7 +17,6 @@ "name": "LayoutInline (relative positioned) DIV id='block'", "position": [68, 7], "bounds": [374, 20], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-block-after-layout-expected.txt index 524ac10..7f60937 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-block-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-block-after-layout-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 e0ebf8d..777114b4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 fa532a2..f9d5f145 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 0a79afb..f0f1328 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 aa7cbd7f..c07127f9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt index 859a7551..0697447 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-resized-overflow-expected.txt similarity index 94% rename from third_party/WebKit/LayoutTests/paint/invalidation/repaint-resized-overflow-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-resized-overflow-expected.txt index 002d163..ac5f784c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-resized-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index 182e242..a454d9e3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
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 89c929d..3fb2761ed 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [500, 400], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutIFrame (positioned) IFRAME",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-scrollable-iframe-expected.txt index 82485c5..37983dd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-scrollable-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-scrollable-iframe-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 28dc7c0..f25851d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt index 18a5be6a..9cf60ee1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 1893], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt index d11313f..388fe20 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [785, 5054], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) HEADER", "position": [8, 26], "bounds": [769, 1974], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
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 d01718aa..6182212 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/select-option-background-color-expected.txt index f7aa4527..cac9c75 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/select-option-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/select-option-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow OPTION id='option'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selected-replaced-expected.txt index fb64076..62835c6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selected-replaced-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-delete-expected.txt index 1152674..5189195 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-delete-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-remove-expected.txt index 0c8111f..2fcef31 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-after-remove-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-clear-expected.txt index 5f8988d..8ee4d14 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-clear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='firstLine'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt index 45325e38..70b29a2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-rl-expected.txt index 555177bd..b59342f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection-rl-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 b87573e2..2802e237 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 af23a82..ffdc6b94 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 3941c57..c934fe1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 aa37637..a3c21d6f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 2f1928d0..23ba86d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 7143be3..176b6cfc 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
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 7143be3..176b6cfc 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
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 d388d5ed..fbc3396 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
@@ -4,26 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [200, 1620], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#D3D3D3", "paintInvalidations": [ { "object": "LayoutText #text", @@ -35,23 +35,25 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt index 360222a3..9d4f505 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 829], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt index f635263db..26405754 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 735], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt index 6dcb8d97..8287646 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1059, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 3e371ed..cb34d19 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='stacked'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/static-to-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/static-to-positioned-expected.txt index 6edb0ab..d84c8c6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/static-to-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/static-to-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='t'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-layoutstate-transform-expected.txt index b635d68..88a0a0e2e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-layoutstate-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-layoutstate-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='layoutroot'",
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 a826c0f..adc04a4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 ab4945b..b25ce2b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/add-outline-property-on-root-expected.txt index ee2f9aa9..12a60004 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/add-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/add-outline-property-on-root-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
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 15a7efd..249edfae 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
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/append-text-node-to-tspan-expected.txt index ba9bf2c5..4e3b705 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/append-text-node-to-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 43539c0e..5aea181 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 ce1c377..866b831 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 96a9829..1feefbf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
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 d3b9564..390855d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 8322fcd..b9d0c7a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 6364c58..f240fe95 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 705571d6..8f34bf6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 969c60ed..1d9a85c3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 c90f2ddd6..51417a36 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 e88bc65d..51933a5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt index 73fc3bb0..7584c44 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 704978ff..c93ca9e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 3e9887d..fd4e88c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 bc11cbe8..4c9691e4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 2a1ff8d..e57de2f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 b073f18..c99df44e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 501e2a5..2dd4e8c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 f3c82f8..40c1ce80 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 e94ab3bf..051c35c1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 92844b53..a6d4030f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 f666850c..83391ec 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 1c13e76..429791b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-outline-property-on-root-expected.txt index ee2f9aa9..12a60004 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt index 34fccca..364d7ba4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-tspan-from-text-expected.txt index d02155a..4b93dba 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-tspan-from-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/remove-tspan-from-text-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 6563260..9ee2c76 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 6563260..9ee2c76 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 9878f365..d23fe4f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1026, 1016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-background-partial-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-background-partial-redraw-expected.txt index 9977b5f..43eaedf9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-background-partial-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-background-partial-redraw-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
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 2c12db07..a9abdcb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 2d41bb54..0413f86 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 76d5931..e59dac74 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='objectsToRemove'",
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 0fd59f4..947861c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 0da7d71..91fe39f2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 ac48b84..f227143f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='text2g'",
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 75a4c706..3f6aaa1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 76cb637..48115489 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 b033e18..b0bc5e0 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [808, 620], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 2cc23ef0..673f26e 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='target'", "position": [5, 55], "bounds": [406, 546], - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FFFF00", "paintInvalidations": [ @@ -30,7 +29,6 @@ "name": "LayoutBlockFlow (positioned) DIV", "position": [108, 158], "bounds": [440, 300], - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }
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 8088331..80795fd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 623db28..b1ae896 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-setAttribute-crash-expected.txt index b9c3d14..ee43709 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-setAttribute-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-setAttribute-crash-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow body",
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 3258026..b6d21fa 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='Windows'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-collapsed-border-expected.txt index e0f1112..9373916 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-collapsed-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-move-expected.txt index 8a6ac9e..5915ac0d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-cell-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-collapsed-border-expected.txt index 023ebc2f..4e8f454 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-collapsed-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-shrink-row-repaint-expected.txt index da19063..3e597a5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-shrink-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table-shrink-row-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 848], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
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 478d197..aa17138 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 53b4af6..e1173eb7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 53b4af6..e1173eb7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 0ea67829..44169c9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,14 +16,12 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] }, { "name": "LayoutTableCell TD", "position": [133, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 0ea67829..44169c9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,14 +16,12 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] }, { "name": "LayoutTableCell TD", "position": [133, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 b30e988..de30a06 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 b30e988..de30a06 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 71e5ac4..db55ac75e 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR id='target'", "position": [8, 94], "bounds": [186, 64], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 71e5ac4..db55ac75e 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR id='target'", "position": [8, 94], "bounds": [186, 64], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 933118c..62710f1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 933118c..62710f1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 36ce6de..c4ce561 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 26], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,14 +22,12 @@ { "name": "LayoutTableRow TR", "position": [8, 94], - "bounds": [186, 64], - "drawsContent": true + "bounds": [186, 64] }, { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 36ce6de..c4ce561 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 26], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,14 +22,12 @@ { "name": "LayoutTableRow TR", "position": [8, 94], - "bounds": [186, 64], - "drawsContent": true + "bounds": [186, 64] }, { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 2c8d298..ac673939 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 26], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 2c8d298..ac673939 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 26], "bounds": [186, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [72, 94], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 d0c5787..97af9be 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 d2a137f0..0cd02bb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
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 b97fae5..d9e67e59 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
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 9131f977..ec00c10 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-in-relative-positioned-inline-expected.txt index a9312aa..76a7436 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-in-relative-positioned-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-in-relative-positioned-inline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 714fd9a..19140bf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='to-be-changed'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt index 38d278a..2a3c4e0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-expected.txt index 3bf1219..647add4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-selection-rect-in-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/textarea-caret-expected.txt index 909ff1e..ca499bd6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/textarea-caret-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl TEXTAREA id='editor'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-absolute-in-positioned-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-absolute-in-positioned-container-expected.txt similarity index 93% rename from third_party/WebKit/LayoutTests/paint/invalidation/transform-absolute-in-positioned-container-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-absolute-in-positioned-container-expected.txt index 5d0a822..08e7e72 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-absolute-in-positioned-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-absolute-in-positioned-container-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [802, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-inline-layered-child-expected.txt index ddd4957..f49c3ec 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-inline-layered-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box'",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-layout-repaint-expected.txt index 3b0de273..26d9e91 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-layout-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-relative-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-relative-position-expected.txt similarity index 93% rename from third_party/WebKit/LayoutTests/paint/invalidation/transform-relative-position-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-relative-position-expected.txt index 1c582057e..70377b02 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-relative-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-relative-position-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform-repaint-descendants-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-repaint-descendants-expected.txt similarity index 95% rename from third_party/WebKit/LayoutTests/paint/invalidation/transform-repaint-descendants-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-repaint-descendants-expected.txt index 9c27a4cf..865927c7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform-repaint-descendants-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform-repaint-descendants-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length1-expected.txt index adb46fe6..054bf262 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length1-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length2-expected.txt index 65fb534..434cf79 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align-length2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align1-expected.txt index fd0c9422..881bfa0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align1-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align2-expected.txt index c68eb83..c5761ec 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-align2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-rl-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-rl-as-paint-container-expected.txt index 3b13242..0162478 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-rl-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/vertical-rl-as-paint-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='target'", "position": [8, 8], "bounds": [600, 400], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt index 3a644241..e1da66c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY", @@ -16,16 +16,17 @@ { "name": "LayoutVideo VIDEO id='v'", "position": [8, 8], - "bounds": [700, 525] + "bounds": [700, 525], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox (relative positioned) DIV", @@ -38,7 +39,6 @@ "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-unmute-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-unmute-repaint-expected.txt index 99e846d..2298d2f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-unmute-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-unmute-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)", @@ -16,16 +16,17 @@ { "name": "LayoutVideo VIDEO id='v'", "position": [8, 8], - "bounds": [700, 525] + "bounds": [700, 525], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox (relative positioned) DIV", @@ -38,7 +39,6 @@ "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize-vertical-writing-mode-expected.txt index 5bd0cdf7..67e6e503 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [913, 235], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML", @@ -144,7 +144,7 @@ "name": "LayoutView #document", "bounds": [913, 235], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML", @@ -289,7 +289,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -397,7 +397,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
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 693c3e5..c6aaae6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 734], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -16,7 +16,8 @@ { "name": "LayoutBlockFlow DIV id='background'", "position": [8, 426], - "bounds": [769, 300] + "bounds": [769, 300], + "drawsContent": false } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-blobs/external/wpt/FileAPI/historical.https-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-blobs/external/wpt/FileAPI/historical.https-expected.txt deleted file mode 100644 index f8ff3a2..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/mojo-blobs/external/wpt/FileAPI/historical.https-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -This is a testharness.js-based test. -PASS "toNativeLineEndings" should not be supported -PASS "FileError" should not be supported -PASS "FileException" should not be supported -PASS Blob should not support slice prefixed -PASS BlobBuilder should not be supported. -PASS createFor method should not be supported -FAIL Blob.close() should not be supported assert_false: close in b expected false got true -PASS Service worker test setup -PASS "FileReaderSync" should not be supported in service workers -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt index c535ae7..1d8ba0a4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -5,77 +5,79 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl TEXTAREA", "position": [18, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [19, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [19, 19], "bounds": [189, 270], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [18, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [208, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [208, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutTextControl TEXTAREA", "position": [248, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [249, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [249, 19], "bounds": [189, 270], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [248, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [438, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [438, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt index 22c5698..6b0e3ea3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -9,23 +9,26 @@ "name": "LayoutView #document", "bounds": [785, 626], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 144] + "bounds": [749, 144], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 314], "bounds": [757, 152], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 338], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -35,30 +38,34 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1036], + "bounds": [785, 1081], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 144] + "bounds": [749, 144], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 314], "bounds": [757, 152], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 338], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -68,41 +75,45 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1520], + "bounds": [785, 1625], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 144] + "bounds": [749, 144], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 160], - "bounds": [757, 152], - "drawsContent": true + "bounds": [757, 152] }, { "name": "LayoutImage IMG class='composited box'", "position": [38, 184], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 314], "bounds": [757, 152], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 338], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/ancestor-overflow-change-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/ancestor-overflow-change-expected.png index 177663ed..366957e6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/ancestor-overflow-change-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/ancestor-overflow-change-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt index a6a3e36..cde43368 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
@@ -6,26 +6,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [10, 10], - "bounds": [590, 210], - "drawsContent": true + "bounds": [590, 210] }, { "name": "LayoutBlockFlow (positioned) DIV class='composited'", "position": [10, 260], - "bounds": [590, 210], - "drawsContent": true + "bounds": [590, 210] }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner box'", "position": [500, 370], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/composited-in-columns-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/composited-in-columns-expected.txt index aeb01ce..622e9fe 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/composited-in-columns-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/composited-in-columns-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited block'", "position": [14, 164], "bounds": [210, 60], - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -18,14 +17,12 @@ "position": [19, 169], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" }, { "name": "LayoutBlockFlow DIV class='composited block'", "position": [272, 89], "bounds": [210, 60], - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -33,7 +30,6 @@ "position": [277, 94], "bounds": [50, 50], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt index 66f2b4b..ff4d4dd6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
@@ -8,7 +8,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -20,20 +20,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='parent'", "position": [8, 8], - "bounds": [342, 292], - "drawsContent": true + "bounds": [342, 292] }, { "name": "LayoutBlockFlow (relative positioned) DIV id='child'", "position": [39, 49], "bounds": [250, 220], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -41,7 +39,6 @@ "position": [10, 10], "bounds": [200, 200], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00", "transform": 1 }, @@ -50,7 +47,6 @@ "position": [100, 0], "bounds": [250, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 2 } @@ -85,9 +81,9 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1590], + "bounds": [785, 1526], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt index d3885a4d..6ef54bd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
@@ -8,7 +8,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -20,20 +20,18 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='parent' class='parent'", "position": [8, 8], - "bounds": [242, 192], - "drawsContent": true + "bounds": [242, 192] }, { "name": "LayoutBlockFlow (relative positioned) DIV id='child' class='child'", "position": [121, 41], "bounds": [250, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 1 } @@ -57,9 +55,9 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1042], + "bounds": [785, 1010], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt index 342fa2d..563a9d7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
@@ -4,20 +4,21 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV class='compositing'", "position": [21, 21], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')", - "bounds": [216, 142], - "drawsContent": true + "bounds": [216, 142] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt index 59dae0f..5f9ed72 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
@@ -7,17 +7,17 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) DIV id='container'", "position": [108, 72], - "bounds": [304, 304], - "drawsContent": true + "bounds": [304, 304] }, { "name": "Child Transform Layer", "bounds": [304, 304], + "drawsContent": false, "transform": 1 }, { @@ -25,7 +25,6 @@ "position": [12, 12], "bounds": [280, 280], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00", "transform": 2 }, @@ -35,7 +34,6 @@ "bounds": [200, 200], "opacity": 0.699999988079071, "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "transform": 3 }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt index 632d2a7f..d66478e92 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -5,69 +5,73 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutIFrame IFRAME", "position": [-11, -11], - "bounds": [368, 218], - "drawsContent": true + "bounds": [368, 218] }, { "name": "Frame Overflow Controls Host Layer", "position": [23, 23], - "bounds": [300, 150] + "bounds": [300, 150], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [23, 23], - "bounds": [285, 150] + "bounds": [285, 150], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [23, 23] + "position": [23, 23], + "drawsContent": false }, { "name": "Content Root Layer", "position": [23, 23], - "bounds": [285, 193] + "bounds": [285, 193], + "drawsContent": false }, { "name": "LayoutView #document", "position": [23, 23], - "bounds": [285, 193], - "drawsContent": true + "bounds": [285, 193] }, { "name": "LayoutIFrame IFRAME", "position": [31, 31], - "bounds": [252, 172], - "drawsContent": true + "bounds": [252, 172] }, { "name": "Frame Overflow Controls Host Layer", "position": [32, 32], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Clipping Layer", "position": [32, 32], - "bounds": [250, 170] + "bounds": [250, 170], + "drawsContent": false }, { "name": "Frame Scrolling Layer", - "position": [32, 32] + "position": [32, 32], + "drawsContent": false }, { "name": "Content Root Layer", "position": [32, 32], - "bounds": [250, 230] + "bounds": [250, 230], + "drawsContent": false }, { "name": "LayoutView #document", "position": [32, 32], "bounds": [250, 230], - "drawsContent": true, "backgroundColor": "#C0C0C0" }, { @@ -75,20 +79,19 @@ "position": [50, 42], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" }, { "name": "Frame Vertical Scrollbar Layer", "position": [308, 23], - "bounds": [15, 150] + "bounds": [15, 150], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='box'", "position": [18, 203], "bounds": [210, 210], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt index 7089229..ab09a47c4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -6,52 +6,52 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='scrollable bigBox'", "position": [8, 72], - "bounds": [302, 302], - "drawsContent": true + "bounds": [302, 302] }, { "name": "Scrolling Layer", "position": [9, 73], - "bounds": [285, 285] + "bounds": [285, 285], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [9, 73], - "bounds": [285, 800], - "drawsContent": true + "bounds": [285, 800] }, { "name": "Overflow Controls Host Layer", "position": [8, 72], - "bounds": [302, 302] + "bounds": [302, 302], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [9, 358], - "bounds": [285, 15] + "bounds": [285, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [294, 73], - "bounds": [15, 285] + "bounds": [15, 285], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [294, 358], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'", "position": [10, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#00FF00" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt index 46b03a8..86446d4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -7,13 +7,12 @@ "name": "LayoutView #document", "bounds": [785, 618], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='preserve3d'", "position": [18, 394], "bounds": [342, 182], - "drawsContent": true, "transform": 1 }, { @@ -21,7 +20,6 @@ "position": [31, 51], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0", "transform": 2 }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt index 42c98fa..f2b419e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -5,77 +5,79 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl TEXTAREA", "position": [18, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [19, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [19, 19], "bounds": [189, 328], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [18, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [208, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [208, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutTextControl TEXTAREA", "position": [248, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [249, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [249, 19], "bounds": [189, 328], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [248, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [438, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [438, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt index ca9b5ff..f97b2fc5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
@@ -4,34 +4,32 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV", "position": [8, 8], "bounds": [784, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#ADD8E6" }, { "name": "Child Containment Layer", "position": [8, 8], - "bounds": [784, 10] + "bounds": [784, 10], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='inner'", "position": [8, 8], "bounds": [784, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#F5F5F5" }, { "name": "LayoutBlockFlow (positioned) DIV class='hoverable'", "position": [8, 0], "bounds": [216, 100], - "drawsContent": true, "backgroundColor": "#90EE90" } ]
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 b680650..c8fdd2c 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
@@ -5,21 +5,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='overlap'", "position": [8, 8], - "bounds": [300, 500] + "bounds": [300, 500], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')", "position": [15, 35], "bounds": [100, 210], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutText #text", @@ -58,21 +59,22 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='overlap'", "position": [8, 8], - "bounds": [300, 500] + "bounds": [300, 500], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='item')", "position": [15, 35], "bounds": [100, 210], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/tiled-layers-hidpi-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/tiled-layers-hidpi-expected.txt index 20618492..965baf27 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/tiled-layers-hidpi-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/tiled-layers-hidpi-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [3616, 1170], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='composited'", "position": [16, 16], "bounds": [3600, 20], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#0000FF" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt index 34830f6..c189c00 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt
@@ -8,7 +8,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -21,7 +21,7 @@ "name": "LayoutView #document", "bounds": [785, 605], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" } ] } @@ -34,27 +34,27 @@ "name": "LayoutView #document", "bounds": [785, 813], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutVideo VIDEO", "position": [8, 8], - "bounds": [352, 288] + "bounds": [352, 288], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [8, 8], - "bounds": [352, 288], - "drawsContent": true + "bounds": [352, 288] }, { "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [8, 8], - "bounds": [352, 246], - "drawsContent": true + "bounds": [352, 246] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt index 602ad19..b982f95e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -9,23 +9,26 @@ "name": "LayoutView #document", "bounds": [785, 626], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 145] + "bounds": [749, 145], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 316], "bounds": [757, 153], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 340], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -35,30 +38,34 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1062], + "bounds": [785, 1110], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 145] + "bounds": [749, 145], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 316], "bounds": [757, 153], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 340], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -68,41 +75,45 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1577], + "bounds": [785, 1689], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 145] + "bounds": [749, 145], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 161], - "bounds": [757, 153], - "drawsContent": true + "bounds": [757, 153] }, { "name": "LayoutImage IMG class='composited box'", "position": [38, 185], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 316], "bounds": [757, 153], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 340], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt index d6715a0..27fc730 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -3,20 +3,20 @@ { "name": "LayoutView #document", "bounds": [800, 600], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow HTML", "bounds": [800, 70], - "isolate": true, - "drawsContent": true + "isolate": true }, { "name": "LayoutBlockFlow DIV", "position": [8, 18], "bounds": [10, 10], "blendMode": "multiply", - "drawsContent": true, "backgroundColor": "#0000FF" }, { @@ -24,7 +24,6 @@ "position": [8, 18], "bounds": [10, 10], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFF00" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-during-transition-layertree-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-during-transition-layertree-expected.txt index fc6e350..58f4b2e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-during-transition-layertree-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-during-transition-layertree-expected.txt
@@ -8,31 +8,27 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutImage IMG id='grayscale-box'", "position": [18, 18], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] }, { "name": "LayoutImage IMG id='saturate-box'", "position": [18, 133], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] }, { "name": "LayoutImage IMG id='invert-box'", "position": [18, 248], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] }, { "name": "LayoutImage IMG id='brightness-box'", "position": [18, 363], - "bounds": [160, 90], - "drawsContent": true + "bounds": [160, 90] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt index 21c611a7..1cafcecd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
@@ -4,14 +4,13 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='compositor-painted-shadow'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -19,7 +18,6 @@ "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ] @@ -30,14 +28,13 @@ "name": "LayoutView #document", "bounds": [856, 585], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='software-painted-shadow'", "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FF0000" }, { @@ -45,7 +42,6 @@ "position": [100, 100], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/inspector-support/matchedrules-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/inspector-support/matchedrules-expected.txt index a1866de..d81e3c33 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/inspector-support/matchedrules-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/inspector-support/matchedrules-expected.txt
@@ -1,4 +1,4 @@ -CONSOLE WARNING: line 16: 'getMatchedCSSRules()' is deprecated. For more help, check https://code.google.com/p/chromium/issues/detail?id=437569#c2 +CONSOLE WARNING: line 16: document.getMatchedCSSRules() is deprecated and will be removed in M63, around December 2017. See https://www.chromestatus.com/features/4606972603138048 for more details. layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 layer at (0,0) size 800x600
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.png index c6b8c45..1b193a5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.txt index b7aeb4d..a779023 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/media/media-document-audio-repaint-expected.txt
@@ -3,23 +3,21 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 - LayoutBlockFlow {P} at (0,0) size 784x18 - LayoutText {#text} at (0,0) size 759x17 - text run at (0,0) width 667: "This tests that in a standalone media document with audio content, the media element repaints correctly " - text run at (666,0) width 93: "while playing." - LayoutBlockFlow (anonymous) at (0,34) size 784x334 + LayoutBlockFlow {P} at (0,0) size 784x20 + LayoutText {#text} at (0,0) size 701x19 + text run at (0,0) width 620: "This tests that in a standalone media document with audio content, the media element repaints correctly " + text run at (620,0) width 81: "while playing." + LayoutBlockFlow (anonymous) at (0,36) size 784x334 LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (0,0) size 0x0 -layer at (8,42) size 384x334 +layer at (8,44) size 384x334 LayoutIFrame {IFRAME} at (0,0) size 384x334 [border: (2px inset #EEEEEE)] layer at (0,0) size 380x330 LayoutView at (0,0) size 380x330 layer at (0,0) size 380x330 LayoutBlockFlow {HTML} at (0,0) size 380x330 - LayoutBlockFlow {BODY} at (0,0) size 380x330 [bgcolor=#000000] - LayoutFlexibleBox {DIV} at (0,0) size 380x330 + LayoutBlockFlow {BODY} at (8,8) size 364x314 [bgcolor=#000000] layer at (40,165) size 300x1 - LayoutVideo {VIDEO} at (40,164.50) size 300x1 + LayoutVideo (positioned) {VIDEO} at (40,164.50) size 300x1 layer at (40,165) size 300x1 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 300x1 LayoutBlockFlow {DIV} at (0,-31) size 300x32
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 21f8ac6..6df25a7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt index f9024cd..08689ff 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/abspos-shift-image-incorrect-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1250, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/backgroundSizeRepaint-expected.txt index 50e7ed17..1098cdd1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/backgroundSizeRepaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/backgroundSizeRepaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt index 9500ea47..2b91288e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-layout-inline-children-float-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) SPAN",
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 e7d4848..5bb8d99 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/body-background-image-expected.txt index 97394e1..a1e3349 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/body-background-image-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/body-background-image-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-radius-repaint-expected.txt index fadd8e7..f15bea7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-radius-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-radius-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-repaint-glitch-expected.txt index a42e135..c159aff 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/border-repaint-glitch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-inline-resize-expected.txt index 0055b5f0..209c5f9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-inline-resize-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow H2",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-shadow-dynamic-expected.txt index fcbda12..5782e076 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-shadow-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box-shadow-dynamic-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 b7bb3fd..620d433 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='im'",
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 8cb3e45..c46e1bf 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 b777bb7..6033569 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6388-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6388-expected.txt index 9d86ba8..824f40af 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6388-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6388-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
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 3f348d5..312fcd5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='allcontent'",
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 805268d..ac53e7e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/button-checkbox-click-method-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/button-checkbox-click-method-repaint-expected.txt index 3fee5d6..ca50e37 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/button-checkbox-click-method-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/button-checkbox-click-method-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow INPUT id='checkbox'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt index 1007469..705c2965 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [785, 933], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { @@ -232,22 +231,22 @@ { "name": "LayoutVideo VIDEO id='video'", "position": [15, 859], - "bounds": [150, 60] + "bounds": [150, 60], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [15, 859], - "bounds": [150, 60], - "drawsContent": true + "bounds": [150, 60] }, { "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [15, 859], - "bounds": [150, 18], - "drawsContent": true + "bounds": [150, 18] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-contenteditable-content-after-expected.txt index 1d5bf0d0..bdf7132 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-contenteditable-content-after-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt index 9ec59101..eeb9925 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-invalidation-in-overflow-scroll-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 b8644c03..3c40c36 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
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 ea861c1f..483d75b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt index ca1e233..07557bc7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 48], - "bounds": [100, 100], - "drawsContent": true + "bounds": [100, 100] }, { "name": "Scrolling Layer", "position": [8, 48], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 48], "bounds": [205, 1022], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='text'", @@ -38,19 +37,18 @@ { "name": "Overflow Controls Host Layer", "position": [8, 48], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 148], - "bounds": [100, 0], - "drawsContent": true + "bounds": [100, 0] }, { "name": "Vertical Scrollbar Layer", "position": [108, 48], - "bounds": [0, 100], - "drawsContent": true + "bounds": [0, 100] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-transformation-expected.txt index 5530feac..597dcd83 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-transformation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/change-text-content-and-background-color-expected.txt index 10ad675..9e3b33e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/change-text-content-and-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl (positioned) INPUT id='input'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip-with-layout-delta-expected.txt index 08f31ad31..faa6e86 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip-with-layout-delta-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clipped-relative-expected.txt index f2edf81..19ea46c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clipped-relative-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='inner'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/column-rules-fixed-height-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/column-rules-fixed-height-expected.txt index ed77b09..99c9e90 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/column-rules-fixed-height-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/column-rules-fixed-height-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnSet (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/composited-table-row-expected.txt index d35ae66..6270a9a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/composited-table-row-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR", "position": [8, 8], "bounds": [70, 24], - "drawsContent": true, "backgroundColor": "#FF0000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt index 2c1913c..36c7a2c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/fixed-pos-with-abs-pos-child-scroll-expected.txt
@@ -5,7 +5,7 @@ "name": "LayoutView #document", "bounds": [785, 4021], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='abs'",
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 cd60ca514..9ec34e7 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
@@ -4,24 +4,23 @@ "name": "LayoutView #document", "bounds": [785, 1016], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow DIV id='foo'", "position": [8, 8], "bounds": [200, 1000], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [8, 0], "bounds": [300, 654], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
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 7435964..15acdb4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1418, 1008], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='container'", @@ -24,18 +24,19 @@ ] }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV", "position": [8, 8], - "bounds": [1000, 1000] + "bounds": [1000, 1000], + "drawsContent": false }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='mv-tile')", "position": [8, 8], "bounds": [1000, 105], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
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 index b20afec..07be221 100644 --- 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 d0bca2e..e69d471 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 908c63b..8749af07 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/containing-block-position-change-expected.txt index 6e40394..321176a6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/containing-block-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/containing-block-position-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/control-clip-expected.txt index d9652ff1..60deb1e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/control-clip-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-2-expected.txt index ac8de219..b18b24dc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
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 785f0be5..ebdd1b9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep_child'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-4-expected.txt index 0acc4ff..70b07fe 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-4-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-expected.txt index 216235d..5577642 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='keep' class='item'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/create-layer-repaint-expected.txt index 4c352c66..93b6017 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/create-layer-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/create-layer-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
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 ce53ff23..b07f578 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='two'",
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 28dd4c89..e396dd7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='details-content'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt index df8e236..97d2ea3f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/dynamic-table-vertical-alignment-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [808, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt index 2f1876c..b758cd7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-element-repaint-after-compositing-update-expected.txt
@@ -4,24 +4,25 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='fixedTransformed'", "position": [8, 88], - "contentsOpaque": true + "contentsOpaque": true, + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='fixedOverlapping'", "position": [8, 88], - "bounds": [800, 600] + "bounds": [800, 600], + "drawsContent": false }, { "name": "LayoutBlockFlow (positioned) DIV id='moveMe'", "position": [150, 150], "bounds": [100, 100], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-expected.txt index 0bfeedd1..63d6ef1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/fixed-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 2016], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t'",
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 8f038da8..60eda26 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
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 758723d2..9e1fc9f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='dynamic' class='content'",
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 554e921..a559e537 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-expected.txt index cfdcccf..3e74769 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-right-expected.txt index c4e5b5b..2ee270c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-overflow-right-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-continuations-expected.txt index e3273ab..552e1ec 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-enable-continuations-expected.txt index e3273ab..552e1ec 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-enable-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='outer'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-child-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-child-move-expected.txt index a1fc96f8..3ff09e8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-child-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-child-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-continuation-move-expected.txt index 64e9bdf..7bf2ad9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-continuation-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt index 01ee39c..912fe0f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/focus-ring-on-inline-continuation-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 2e8299c..3cace8dc 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton BUTTON",
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 6694a17..6a8c40d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow INPUT",
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 9d7c2e1..ca15db2c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow INPUT",
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 33de40d..a4c07ef 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSlider INPUT",
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 3f9b0857..5ce2513 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutButton INPUT",
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 f391b70..d4189bf1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='em-units'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-block-to-display-none-expected.txt index e574e2c..477fef09 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-block-to-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-block-to-display-none-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutIFrame IFRAME id='iframe'",
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 31f7e7b3..510b8b6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutIFrame IFRAME id='iframe'",
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 1ca05c1e..e92326c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 825], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='div'",
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 8b3642e..7ced8e1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-focus-expected.txt index 9280eb67..ac8319cd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-focus-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-2-expected.txt index ebacbef..13937e0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-expected.txt index f654178..2894008 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-outline-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 887f07f..7e9315e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt index 6b08134..ae1fc3f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-style-change-in-scrolled-view-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2000, 2000], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt index 7342bca..6ad99df 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-after-composited-scroll-of-window-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 4936], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt index 32c822d..9f600911 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutInline SPAN id='target'",
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 5d7596e..11280fa 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='root' class='editing'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt index 72994ca..7ea961f8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [7, 7], "bounds": [70, 24], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt index 72994ca..7ea961f8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl INPUT id='root'", "position": [7, 7], "bounds": [70, 24], - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
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 ce8f3fcd..90121f6 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 2350], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-clear-expected.txt index 8f3cf01..deaf8c0d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-clear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-repaint-expected.txt index f72eba9..72ec381 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/japanese-rl-selection-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-relative-expected.txt index 15609ae6..69cf206e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-relative-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset-expected.txt index f52e721..70da1c4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset2-expected.txt index 9dabf5a1..44f171c7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset3-expected.txt index 15c924c..5272977 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layout-state-scrolloffset3-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index e912a1c2..603fcf63 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 4fc3cd5..b630e31 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 9b1d774..9ac9a94 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 599120b..d25b171 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 1ab8062d..1e9fbe80 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 3782f22..3ced231 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 b017a6e..615d16d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 909bb10..d8ee210e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 4cab783..6987477 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 7350247b..67741b5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
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 892c3ab..5ead88c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-in-scrolled-clipped-block-expected.txt index 05a0a97c..a1ec84b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-in-scrolled-clipped-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-in-scrolled-clipped-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-overflow-expected.txt index 98007ed..e46f1f7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 10296fae..3422fa3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV id='target'",
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 31746317..6358511 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutListItem LI",
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 1094d9b..7c23dd62 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 823fd0e..7e2fa38 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-repaint-expected.txt index 05a01378..f62af47b6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnFlowThread (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-expected.txt index f0b7d56..debda55 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt index b35e2e8..74b9d03 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-abspos-in-relpos-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-block-expected.txt index 0be81a2..e0a12df 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-block-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-text-expected.txt index 1c001d7..454c4e1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol-with-text-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutMultiColumnFlowThread (anonymous)",
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 f94f475a..b3433a33 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 9a8f24d..7a272b4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) UL id='submenu'", @@ -31,19 +31,18 @@ { "name": "LayoutListItem (floating) LI id='watches'", "position": [30, 44], - "bounds": [25, 19], - "drawsContent": true + "bounds": [25, 19] }, { "name": "LayoutInline (relative positioned) SPAN id='placeholder'", "position": [48, 44], + "drawsContent": false, "backfaceVisibility": "hidden" }, { "name": "LayoutListItem (relative positioned) (floating) LI id='menu'", "position": [30, 44], "bounds": [18, 19], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutListMarker (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/opacity-change-on-overflow-float-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/opacity-change-on-overflow-float-expected.txt index 5a0911b6..c8923c9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/opacity-change-on-overflow-float-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/opacity-change-on-overflow-float-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV class='green'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-affected-by-descendant-expected.txt index de9fdc2..f5340862 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-affected-by-descendant-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outline'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt index a318da6..126c299 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-become-not-affected-by-descendant-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='outline'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-change-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-change-invalidation-expected.txt index b9663d22..bf6072a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-change-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-change-invalidation-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow A id='link'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-clip-change-expected.txt index d98c32e..6865e5a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-clip-change-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) A id='link' class='updated'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-continuations-expected.txt index 8e51ae7..077e401 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-continuations-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-inset-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-inset-expected.txt index e26873f..5fb540c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-inset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-inset-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-repaint-glitch-expected.txt index 003f9e5..6f21969 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-repaint-glitch-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-shrinking-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-shrinking-expected.txt index 612b62a..c0b9c333 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-shrinking-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline-shrinking-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='t'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-delete-line-expected.txt index acae3da..2253ad64 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-delete-line-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='dv'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-body-appear-expected.txt index 920c032..40abb4a7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-body-appear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-body-appear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [2008, 2096], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-delete-expected.txt index 3768835..1aad670 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-delete-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt index 7e31c50c..5dfc8b62 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow-scroll-local-background-text-color-change-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "backgroundColor": "#0000FF", "paintInvalidations": [ { @@ -23,14 +22,15 @@ { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [185, 552], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#0000FF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='scroller'", @@ -42,12 +42,14 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], "bounds": [185, 15], + "drawsContent": false, "paintInvalidations": [ { "object": "Horizontal Scrollbar Layer", @@ -60,6 +62,7 @@ "name": "Vertical Scrollbar Layer", "position": [193, 8], "bounds": [15, 185], + "drawsContent": false, "paintInvalidations": [ { "object": "Vertical Scrollbar Layer", @@ -76,8 +79,7 @@ { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overhanging-float-detach-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overhanging-float-detach-repaint-expected.txt index 1e650a2..1a9d491 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overhanging-float-detach-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overhanging-float-detach-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (floating) DIV class='float'",
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 1214d37..c50dddc 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-document-element-expected.txt index c357a772..eed8db9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-document-element-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#008000", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-great-grandparent-change-location-expected.txt index 394cb4d..a052ef6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-great-grandparent-change-location-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-list-offset-change-repaint-expected.txt index 94fa46b1..3587b833 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/positioned-list-offset-change-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutListItem (positioned) LI",
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 195826e..c1a676cb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='spacer'",
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 4667862..ef312ba 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection-redraw-expected.txt index d021d6f0..db924e8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection-redraw-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt index f08a997..a2376ea97 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/rel-positioned-inline-with-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt index 9e357bc..6b07cbb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/relative-inline-positioned-movement-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY", @@ -17,7 +17,6 @@ "name": "LayoutInline (relative positioned) DIV id='block'", "position": [68, 7], "bounds": [348, 21], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-block-after-layout-expected.txt index 6d0c88d..95c80032 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-block-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-block-after-layout-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='target'",
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 5a51ab8..eb25bcd 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 117c946..48ff104 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 7ab58f9..30cad23 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 fb6ab09..d2153ca 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt index b46e709..4099835 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-during-scroll-with-zoom-expected.txt
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#C0C0C0", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-resized-overflow-expected.txt index 49951bb..afc9728 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-resized-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index 42f9e6b4..246caaf0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
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 9070eb9..61b445b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [500, 400], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutIFrame (positioned) IFRAME",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-scrollable-iframe-expected.txt index ca3c261..94c0d7ba 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-scrollable-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-scrollable-iframe-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
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 e84520b2a..1addb65 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt index 97d288d..52e0900fd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-descendant-with-cached-cliprects-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 1895], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt index 50e595a43..7b56d346 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [785, 5056], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (relative positioned) HEADER", "position": [8, 28], "bounds": [769, 1972], - "drawsContent": true, "backfaceVisibility": "hidden", "paintInvalidations": [ {
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 7977cd1..7670db5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/select-option-background-color-expected.txt index c1b0f61f..9ba7f3d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/select-option-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/select-option-background-color-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow OPTION id='option'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selected-replaced-expected.txt index 8870e32f..74425f4e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selected-replaced-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-delete-expected.txt index 46d3e1d..2ebf380 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-delete-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-remove-expected.txt index 2cb91fc0..238b27cac 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-after-remove-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='test'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-clear-expected.txt index ae8bf2b..700919e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-clear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='firstLine'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt index 92a60d7..53ebca14 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-partial-invalidation-between-blocks-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-rl-expected.txt index 302a8c0d..29015f37 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection-rl-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 6057095..9270047 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 ce1eaab..4e8ae845 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 fe20478..7aae6b4 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 50eb9b7..9f4e86ce 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 adb807c2..f853254 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 a81a817..1facb06 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
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 a81a817..1facb06 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 31bfca1f..704e151 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -4,26 +4,26 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV id='scroller'", "position": [8, 8], "bounds": [200, 200], - "drawsContent": true, "backgroundColor": "#D3D3D3" }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [185, 185] + "bounds": [185, 185], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], "bounds": [200, 1620], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#D3D3D3", "paintInvalidations": [ { "object": "LayoutText #text", @@ -35,23 +35,25 @@ { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [200, 200] + "bounds": [200, 200], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 193], - "bounds": [185, 15] + "bounds": [185, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [193, 8], - "bounds": [15, 185] + "bounds": [15, 185], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [193, 193], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt index 5e26327..e8c8cc0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-addition-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 836], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt index e8b1910..ee0fd6f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 742], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt index 51f8ce3..9b0042b1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1059, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
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 0522b23..51b7201 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='stacked'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/static-to-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/static-to-positioned-expected.txt index f2dfdf18..186ab1b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/static-to-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/static-to-positioned-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='t'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-layoutstate-transform-expected.txt index 60291bfc..04b5027 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-layoutstate-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-layoutstate-transform-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV class='layoutroot'",
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 ab140a3c..d6febf2 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='inner-editor'",
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 f3eb7d02..b45ed6b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/add-outline-property-on-root-expected.txt index d76bf880..778c046 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/add-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/add-outline-property-on-root-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
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 ab9af5d..041b3973 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
@@ -4,7 +4,6 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ {
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/append-text-node-to-tspan-expected.txt index 19bafb5..874552f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/append-text-node-to-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 daddbc7..07e744a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 69c22c4..0e940b9 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 021f2cf..c7ad98f3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
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 d916d43..1e12ca5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 ec1be7f7..1250726 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 1984ea0d..1130e8d 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 5883c69..396d952 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 490e4e8..4a6c1ef1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 d4d30a7..03513fa 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='content'",
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 4fd48d6d..83a4a3e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt index 511b6aa..89b6e3c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 91fab0e..cf33e027 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 e13d392..cfe67ac 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 8a66db7..24992368 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 4db6dd2c..fc25beb3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 a49789a6..08910046 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 e7a73e93..23fa6db 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 5c444a2..822be1f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 3f828a1e..3dbc9fb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 11e00d1..587d8a5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 facf371..4487703 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 dd8ccb46..0ff7bb5 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-outline-property-on-root-expected.txt index d76bf880..778c046 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt index 9a82b8ab..86d8f4fb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-tspan-from-text-expected.txt index 0f34e267..da65fcd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-tspan-from-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/remove-tspan-from-text-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 7d6e5160..2242875b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 7d6e5160..2242875b 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g",
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 fb8a647..b4dcd4e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1026, 1036], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-background-partial-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-background-partial-redraw-expected.txt index 7707a369..5b9c148 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-background-partial-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-background-partial-redraw-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
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 47c47468..eabf72c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow div id='contentBox'",
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 47cd2556..7226d68 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGPath path",
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 ce8a718..79bb7182 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='objectsToRemove'",
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 0a2946f..66bd10a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGRect rect",
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 fdb836b5..5bde97a 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 c531206..db6a8ff 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='text2g'",
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 5727d419..936f5b1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 e392b91..0e81ad1 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 0a95217..e894e57 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [808, 621], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt index 88a792a..be749ed 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow (positioned) DIV id='target'", "position": [7, 57], "bounds": [402, 542], - "drawsContent": true, "backfaceVisibility": "hidden", "backgroundColor": "#FFFF00", "paintInvalidations": [ @@ -30,7 +29,6 @@ "name": "LayoutBlockFlow (positioned) DIV", "position": [108, 158], "bounds": [440, 300], - "drawsContent": true, "backgroundColor": "#0000FF", "transform": 1 }
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 d4d9911..f9f7ca3f 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
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 6b7ce2227..1af9ad3 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGInlineText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-setAttribute-crash-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-setAttribute-crash-expected.png deleted file mode 100644 index 242b051c..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-setAttribute-crash-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-setAttribute-crash-expected.txt index 1178a927..2152792 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-setAttribute-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-setAttribute-crash-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow body",
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 4075137..217fe76 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutSVGContainer g id='Windows'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-collapsed-border-expected.txt index 2221092..eb61ca8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-collapsed-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-move-expected.txt index b5db181..6e028e1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-cell-move-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-collapsed-border-expected.txt index 2452b49..941fcaf1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-collapsed-border-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTable TABLE",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-shrink-row-repaint-expected.txt index 6795100..5fd039bb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-shrink-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table-shrink-row-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [785, 850], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
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 9d1fa083..773c6cb 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 0764dcc3..403388b7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 0764dcc3..403388b7 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 1e45130a..529edae 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,14 +16,12 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] }, { "name": "LayoutTableCell TD", "position": [131, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 1e45130a..529edae 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COL id='target'", @@ -16,14 +16,12 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] }, { "name": "LayoutTableCell TD", "position": [131, 96], - "bounds": [59, 64], - "drawsContent": true + "bounds": [59, 64] } ], "objectPaintInvalidations": [
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 524341c..01370c8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 524341c..01370c8 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCol COLGROUP id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD id='target'", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 eea77cc..a02f4e35 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR id='target'", "position": [8, 96], "bounds": [184, 64], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 eea77cc..a02f4e35 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableRow TR id='target'", "position": [8, 96], "bounds": [184, 64], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 8ca944d..1bb244c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 8ca944d..1bb244c 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR id='target'", @@ -16,8 +16,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 0ae1068..fff1136 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [184, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,14 +22,12 @@ { "name": "LayoutTableRow TR", "position": [8, 96], - "bounds": [184, 64], - "drawsContent": true + "bounds": [184, 64] }, { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 0ae1068..fff1136 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [184, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,14 +22,12 @@ { "name": "LayoutTableRow TR", "position": [8, 96], - "bounds": [184, 64], - "drawsContent": true + "bounds": [184, 64] }, { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 4c9b4ebb..c25075f 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [184, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 4c9b4ebb..c25075f 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
@@ -4,13 +4,12 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTableSection TBODY id='target'", "position": [8, 28], "bounds": [184, 134], - "drawsContent": true, "backgroundColor": "#ADD8E6", "paintInvalidations": [ { @@ -23,8 +22,7 @@ { "name": "LayoutTableCell TD", "position": [71, 96], - "bounds": [58, 64], - "drawsContent": true + "bounds": [58, 64] } ], "objectPaintInvalidations": [
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 03737bec..cd52192 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableRow TR",
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 edda347..9ea6287 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
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 504929a5..2c421a54 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTableCell TD",
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 95135dec..e3292914 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-in-relative-positioned-inline-expected.txt index a01ad78..16824e9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-in-relative-positioned-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-in-relative-positioned-inline-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV",
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 0327b11..d104a6e 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
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='to-be-changed'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt index 71f94c95..d07ce647 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-expected.txt index 7d5e766..b11da4f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-selection-rect-in-overflow-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/textarea-caret-expected.txt index 80ed3cde..273996d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/textarea-caret-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutTextControl TEXTAREA id='editor'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-absolute-in-positioned-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-absolute-in-positioned-container-expected.txt index 71bccce5..b6cd424 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-absolute-in-positioned-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-absolute-in-positioned-container-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [802, 585], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-inline-layered-child-expected.txt index 9bb7e0e..11eab903 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-inline-layered-child-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='box'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-layout-repaint-expected.txt index a6ac6af..53faabd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-layout-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-relative-position-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-relative-position-expected.txt index abd3106..9f21f21 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-relative-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-relative-position-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-repaint-descendants-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-repaint-descendants-expected.txt index 3959428..7354f72 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-repaint-descendants-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform-repaint-descendants-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length1-expected.txt index b19c97dd..0b96985 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length1-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length2-expected.txt index e238289..716bea3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align-length2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align1-expected.txt index 67a88df..d992480 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align1-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align2-expected.txt index 8927c5a..89aff4d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/vertical-align2-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt index dd9466e..fde2ac0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow BODY", @@ -16,16 +16,17 @@ { "name": "LayoutVideo VIDEO id='v'", "position": [8, 8], - "bounds": [700, 525] + "bounds": [700, 525], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox (relative positioned) DIV", @@ -38,7 +39,6 @@ "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-paint-invalidation-expected.txt index 15d02f8..ae2ebc7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-paint-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-paint-invalidation-expected.txt
@@ -4,27 +4,27 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutVideo VIDEO id='video'", "position": [8, 8], - "bounds": [320, 240] + "bounds": [320, 240], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [8, 8], - "bounds": [320, 240], - "drawsContent": true + "bounds": [320, 240] }, { "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [8, 8], - "bounds": [320, 240], - "drawsContent": true + "bounds": [320, 240] } ], "objectPaintInvalidations": [
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-unmute-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-unmute-repaint-expected.txt index ef70c70..10eb59f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-unmute-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-unmute-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow (anonymous)", @@ -16,16 +16,17 @@ { "name": "LayoutVideo VIDEO id='v'", "position": [8, 8], - "bounds": [700, 525] + "bounds": [700, 525], + "drawsContent": false }, { - "name": "Squashing Containment Layer" + "name": "Squashing Containment Layer", + "drawsContent": false }, { "name": "LayoutFlexibleBox (relative positioned) DIV", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox (relative positioned) DIV", @@ -38,7 +39,6 @@ "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)", "position": [8, 8], "bounds": [700, 525], - "drawsContent": true, "paintInvalidations": [ { "object": "LayoutFlexibleBox DIV",
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize-vertical-writing-mode-expected.txt index 4ccab49..bbe68f6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize-vertical-writing-mode-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [939, 235], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML", @@ -144,7 +144,7 @@ "name": "LayoutView #document", "bounds": [939, 235], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow HTML", @@ -289,7 +289,7 @@ "name": "LayoutView #document", "bounds": [400, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document", @@ -397,7 +397,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutView #document",
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt index 42c98fa..f2b419e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -5,77 +5,79 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutTextControl TEXTAREA", "position": [18, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [19, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [19, 19], "bounds": [189, 328], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [18, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [208, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [208, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] }, { "name": "LayoutTextControl TEXTAREA", "position": [248, 18], "bounds": [206, 126], - "drawsContent": true, "backgroundColor": "#CCCCCC" }, { "name": "Scrolling Layer", "position": [249, 19], - "bounds": [189, 124] + "bounds": [189, 124], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [249, 19], "bounds": [189, 328], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#CCCCCC" }, { "name": "Overflow Controls Host Layer", "position": [248, 18], - "bounds": [206, 126] + "bounds": [206, 126], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [438, 19], - "bounds": [15, 109] + "bounds": [15, 109], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [438, 128], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt index 602ad19..b982f95e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -9,23 +9,26 @@ "name": "LayoutView #document", "bounds": [785, 626], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 145] + "bounds": [749, 145], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 316], "bounds": [757, 153], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 340], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -35,30 +38,34 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1062], + "bounds": [785, 1110], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 145] + "bounds": [749, 145], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 316], "bounds": [757, 153], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 340], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] } @@ -68,41 +75,45 @@ "layers": [ { "name": "LayoutView #document", - "bounds": [785, 1577], + "bounds": [785, 1689], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='composited container'", "position": [18, 10], - "bounds": [749, 145] + "bounds": [749, 145], + "drawsContent": false }, { "name": "LayoutImage IMG class='hidden composited box'", "position": [38, 30], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 161], - "bounds": [757, 153], - "drawsContent": true + "bounds": [757, 153] }, { "name": "LayoutImage IMG class='composited box'", "position": [38, 185], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false }, { "name": "LayoutBlockFlow DIV class='composited hidden container'", "position": [14, 316], "bounds": [757, 153], + "drawsContent": false, "contentsVisible": false }, { "name": "LayoutImage IMG class='visible composited box'", "position": [38, 340], - "bounds": [100, 100] + "bounds": [100, 100], + "drawsContent": false } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win7/media/media-document-audio-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/win7/media/media-document-audio-repaint-expected.png deleted file mode 100644 index 636d398..0000000 --- a/third_party/WebKit/LayoutTests/platform/win7/media/media-document-audio-repaint-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/media/media-document-audio-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/media/media-document-audio-repaint-expected.txt deleted file mode 100644 index 859cd186..0000000 --- a/third_party/WebKit/LayoutTests/platform/win7/media/media-document-audio-repaint-expected.txt +++ /dev/null
@@ -1,47 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x600 - LayoutBlockFlow {HTML} at (0,0) size 800x600 - LayoutBlockFlow {BODY} at (8,8) size 784x584 - LayoutBlockFlow {P} at (0,0) size 784x18 - LayoutText {#text} at (0,0) size 759x17 - text run at (0,0) width 667: "This tests that in a standalone media document with audio content, the media element repaints correctly " - text run at (666,0) width 93: "while playing." - LayoutBlockFlow (anonymous) at (0,34) size 784x334 - LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (0,0) size 0x0 -layer at (8,42) size 384x334 - LayoutIFrame {IFRAME} at (0,0) size 384x334 [border: (2px inset #EEEEEE)] - layer at (0,0) size 380x330 - LayoutView at (0,0) size 380x330 - layer at (0,0) size 380x330 - LayoutBlockFlow {HTML} at (0,0) size 380x330 - LayoutBlockFlow {BODY} at (0,0) size 380x330 [bgcolor=#000000] - LayoutFlexibleBox {DIV} at (0,0) size 380x330 - layer at (40,165) size 300x1 - LayoutVideo {VIDEO} at (40,164.50) size 300x1 - layer at (40,165) size 300x1 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 300x1 - LayoutBlockFlow {DIV} at (0,-31) size 300x32 - layer at (40,124) size 300x0 - LayoutFlexibleBox (relative positioned) {DIV} at (0,-41) size 300x0 - layer at (40,134) size 300x32 scrollHeight 40 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 300x32 [bgcolor=#FAFAFA] - LayoutButton {INPUT} at (0,0) size 32x32 - LayoutFlexibleBox {DIV} at (32,0) size 17.73x32 [color=#5A5A5A] - LayoutBlockFlow (anonymous) at (0,0) size 17.73x32 - LayoutText {#text} at (0,9) size 18x14 - text run at (0,9) width 18: "0:00" - LayoutFlexibleBox {DIV} at (49.73,0) size 28.27x32 [color=#5A5A5A] - LayoutBlockFlow (anonymous) at (4,0) size 24.27x32 - LayoutText {#text} at (0,9) size 25x14 - text run at (0,9) width 25: "/ 0:01" - LayoutSlider {INPUT} at (96,15) size 89.13x2 - LayoutFlexibleBox {DIV} at (0,0) size 89.13x2 - LayoutBlockFlow {DIV} at (-18,-23) size 125.13x48 - LayoutBlockFlow {DIV} at (44.55,0) size 36x48 - LayoutButton {INPUT} at (203.13,0) size 32x32 - LayoutSlider {INPUT} at (253.13,15) size 28.88x2 - LayoutFlexibleBox {DIV} at (0,0) size 28.88x2 - LayoutBlockFlow {DIV} at (-18,-23) size 64.88x48 - LayoutBlockFlow {DIV} at (28.88,0) size 36x48
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-clear-expected.txt index c35dd93..c52c3eb7 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-clear-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-repaint-expected.txt index 89bf8d8..d70a732 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/japanese-rl-selection-repaint-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutText #text",
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index 25864979..d869917 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -4,7 +4,7 @@ "name": "LayoutView #document", "bounds": [1026, 1036], "contentsOpaque": true, - "drawsContent": true, + "backgroundColor": "#FFFFFF", "paintInvalidations": [ { "object": "LayoutBlockFlow P",
diff --git a/third_party/WebKit/LayoutTests/svg/animations/simple-duration-mutation-crash-expected.txt b/third_party/WebKit/LayoutTests/svg/animations/simple-duration-mutation-crash-expected.txt new file mode 100644 index 0000000..ddad5eaf --- /dev/null +++ b/third_party/WebKit/LayoutTests/svg/animations/simple-duration-mutation-crash-expected.txt
@@ -0,0 +1 @@ +PASS if no crash
diff --git a/third_party/WebKit/LayoutTests/svg/animations/simple-duration-mutation-crash.html b/third_party/WebKit/LayoutTests/svg/animations/simple-duration-mutation-crash.html new file mode 100644 index 0000000..d2a6d61 --- /dev/null +++ b/third_party/WebKit/LayoutTests/svg/animations/simple-duration-mutation-crash.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="../../resources/run-after-layout-and-paint.js"></script> +<svg> + <animateTransform id="a" attributeName="transform" values="1 2; 3 4; 5 6"/> +</svg> +<p>PASS if no crash</p> +<script> +if (window.testRunner) { + testRunner.dumpAsText(); + testRunner.waitUntilDone(); +} +onload = function() { + setTimeout(function() { + var element = document.getElementById("a"); + element.setAttribute("dur", "0.1s"); + element.setAttribute("end", "NotARealEvent"); + + runAfterLayoutAndPaint(function() {}, true); + }); +}; +</script>
diff --git a/third_party/WebKit/LayoutTests/tables/table-transform-absolute-position-child-expected.png b/third_party/WebKit/LayoutTests/tables/table-transform-absolute-position-child-expected.png new file mode 100644 index 0000000..617772a --- /dev/null +++ b/third_party/WebKit/LayoutTests/tables/table-transform-absolute-position-child-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/tables/table-transform-absolute-position-child.html b/third_party/WebKit/LayoutTests/tables/table-transform-absolute-position-child.html new file mode 100644 index 0000000..5b74bf348 --- /dev/null +++ b/third_party/WebKit/LayoutTests/tables/table-transform-absolute-position-child.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<style> + .abs-overflow { + overflow: hidden; + position: absolute; + width: 100px; + height: 200px; + background-color: green; + } + .transformed { + display: table-header-group; + transform: rotate(45deg); + } +</style> +<div class="transformed"> + <div class="abs-overflow"> + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/virtual/longtask-v2/http/tests/performance-timing/longtask-v2/README.txt b/third_party/WebKit/LayoutTests/virtual/longtask-v2/http/tests/performance-timing/longtask-v2/README.txt new file mode 100644 index 0000000..4e5a3130 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/longtask-v2/http/tests/performance-timing/longtask-v2/README.txt
@@ -0,0 +1,7 @@ +This directory contains the test cases for longtask API v2. For now, the +longtask API V2 are still working in progress and not ready to be web-exposed + yet. Some of them, if appropriate to be web-platform-tests, will be upstreamed +to web-platform-tests after longtask v2 are fully implemented. + +The test cases in this directory requires enabling of runtime feature flag +LongTaskV2.
diff --git a/third_party/WebKit/LayoutTests/virtual/mojo-loading/http/tests/performance-timing/longtask-v2/README.txt b/third_party/WebKit/LayoutTests/virtual/mojo-loading/http/tests/performance-timing/longtask-v2/README.txt new file mode 100644 index 0000000..ceac42a8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/mojo-loading/http/tests/performance-timing/longtask-v2/README.txt
@@ -0,0 +1,10 @@ +This directory contains the test cases for longtask API v2. For now, the +longtask API V2 are still working in progress and not ready to be web-exposed + yet. Some of them, if appropriate to be web-platform-tests, will be upstreamed +to web-platform-tests after longtask v2 are fully implemented. + +The test cases in this directory requires enabling of runtime feature flag +LongTaskV2. The test cases in this directory are expected to fail since +LongTaskV2 are not supposed to be enabled for this folder. The +fail-expectatation exists for the compatibility with the 'mojo-loading' virtual +tests.
diff --git a/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/fetch/README.txt b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/fetch/README.txt index 796ccc4..87c6416 100644 --- a/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/fetch/README.txt +++ b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/fetch/README.txt
@@ -1,4 +1,4 @@ This directory is for testing out-of-blink CORS implementation. -We use "external/wpt/fetch" directory for testing basic loading +We use "external/wpt/fetch" directory for testing basic loading functionalities through fetching html files.
diff --git a/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/http/README.txt b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/http/README.txt new file mode 100644 index 0000000..6d7938f --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/http/README.txt
@@ -0,0 +1,4 @@ +This directory is for testing out-of-blink CORS implementation. + +We use "external/wpt/http" directory for testing basic loading +functionalities through http tests.
diff --git a/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/referrer-policy/README.txt b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/referrer-policy/README.txt new file mode 100644 index 0000000..03840de3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/referrer-policy/README.txt
@@ -0,0 +1,4 @@ +This directory is for testing out-of-blink CORS implementation. + +We use "external/wpt/referrer-policy" directory for testing CORS +referrer handling.
diff --git a/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/service-workers/README.txt b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/service-workers/README.txt new file mode 100644 index 0000000..d630b09 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/external/wpt/service-workers/README.txt
@@ -0,0 +1,4 @@ +This directory is for testing out-of-blink CORS implementation. + +We use "external/wpt/service-workers" directory for testing CORS with +service workers.
diff --git a/third_party/WebKit/LayoutTests/virtual/outofblink-cors/http/tests/xmlhttprequest/README.txt b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/http/tests/xmlhttprequest/README.txt new file mode 100644 index 0000000..ce95561 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/outofblink-cors/http/tests/xmlhttprequest/README.txt
@@ -0,0 +1,3 @@ +This directory is for testing out-of-blink CORS implementation. + +We use "http/tests/xmlhttprequest" directory for testing XHR with CORS.
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clear-scroll-parent-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clear-scroll-parent-expected.txt deleted file mode 100644 index 445cdfbc..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clear-scroll-parent-expected.txt +++ /dev/null
@@ -1,83 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow DIV class='container'", - "position": [8, 8], - "bounds": [308, 208], - "drawsContent": true, - "backgroundColor": "#00FF0080" - }, - { - "name": "Scrolling Layer", - "position": [12, 12], - "bounds": [285, 200] - }, - { - "name": "Scrolling Contents Layer", - "position": [12, 12], - "bounds": [285, 530], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 8], - "bounds": [308, 208] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [297, 12], - "bounds": [15, 185] - }, - { - "name": "Scroll Corner Layer", - "position": [297, 197], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='fixed'", - "position": [50, 200], - "bounds": [200, 200], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "Ancestor Clipping Layer", - "position": [12, 12], - "bounds": [80, 80], - "hasScrollParent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='box red'", - "position": [22, 22], - "bounds": [100, 100], - "drawsContent": true, - "backgroundColor": "#FF000080" - }, - { - "name": "Squashing Containment Layer", - "hasScrollParent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='box'", - "position": [22, 102], - "bounds": [100, 100], - "drawsContent": true, - "backgroundColor": "#0000FF80" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", - "position": [22, 212], - "bounds": [100, 320], - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt deleted file mode 100644 index 4d1409d..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt +++ /dev/null
@@ -1,117 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "Ancestor Clipping Layer", - "position": [48, 38], - "bounds": [60, 70] - }, - { - "name": "LayoutBlockFlow DIV class='box'", - "position": [2, 12], - "bounds": [100, 150], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#808080", - "transform": 1 - }, - { - "name": "Ancestor Clipping Layer", - "position": [240, 38], - "bounds": [60, 70] - }, - { - "name": "LayoutBlockFlow DIV class='box'", - "position": [2, 12], - "bounds": [100, 150], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#808080", - "transform": 2 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [48, 230], - "bounds": [60, 70], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "position": [48, 230], - "bounds": [60, 70] - }, - { - "name": "LayoutBlockFlow DIV class='box'", - "position": [2, 12], - "bounds": [100, 150], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#808080", - "transform": 3 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [240, 230], - "bounds": [60, 70], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "position": [240, 230], - "bounds": [60, 70] - }, - { - "name": "LayoutBlockFlow DIV class='box'", - "position": [2, 12], - "bounds": [100, 150], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#808080", - "transform": 4 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 1, 1] - ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 1, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 1, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 1, 1] - ] - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt deleted file mode 100644 index 24541e10..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt +++ /dev/null
@@ -1,128 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "LayoutBlockFlow HTML", - "bounds": [800, 242], - "drawsContent": true, - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='composited'", - "position": [29, 31], - "bounds": [80, 10], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000", - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 242], - "drawsContent": true, - "paintingPhases": [ - "GraphicsLayerPaintForeground" - ] - }, - { - "name": "LayoutBlockFlow DIV class='container'", - "position": [28, 20], - "bounds": [202, 202], - "drawsContent": true, - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintCompositedScroll", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "Scrolling Layer", - "position": [29, 21], - "bounds": [185, 185], - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "Scrolling Contents Layer", - "position": [29, 21], - "bounds": [185, 715], - "drawsContent": true, - "paintingPhases": [ - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintOverflowContents", - "GraphicsLayerPaintCompositedScroll" - ] - }, - { - "name": "Overflow Controls Host Layer", - "position": [28, 20], - "bounds": [202, 202], - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [29, 206], - "bounds": [185, 15], - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [214, 21], - "bounds": [15, 185], - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "Scroll Corner Layer", - "position": [214, 206], - "bounds": [15, 15], - "drawsContent": true, - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - } - ] -} - -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt deleted file mode 100644 index a3908c3..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt +++ /dev/null
@@ -1,142 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 13], - "bounds": [85, 100] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 13], - "bounds": [85, 200] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content tall'", - "position": [8, 13], - "bounds": [10, 200] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [93, 13], - "bounds": [15, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 13], - "bounds": [100, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 13], - "bounds": [200, 85] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content wide'", - "position": [8, 13], - "bounds": [200, 10] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [8, 98], - "bounds": [100, 15] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 13], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 13], - "bounds": [200, 200] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='both' class='content wide tall'", - "position": [8, 13], - "bounds": [200, 200] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [8, 98], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [93, 13], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container resizeWidget'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='content'", - "position": [8, 13], - "bounds": [10, 10] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Scroll Corner Layer", - "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars-expected.txt deleted file mode 100644 index 479ea19..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars-expected.txt +++ /dev/null
@@ -1,71 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Child Containment Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content'", - "position": [8, 13], - "bounds": [10, 10] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Child Containment Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content'", - "position": [8, 13], - "bounds": [10, 10] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Child Containment Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='both' class='content'", - "position": [8, 13], - "bounds": [10, 10] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container'", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Child Containment Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='content'", - "position": [8, 13], - "bounds": [10, 10] - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt index df86cf85..bf33b87 100644 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -4,45 +4,46 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [8, 8], - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [285, 285] + "bounds": [285, 285], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], - "bounds": [1000, 1000], - "drawsContent": true + "bounds": [1000, 1000] }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 293], - "bounds": [285, 15] + "bounds": [285, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [293, 8], - "bounds": [15, 285] + "bounds": [15, 285], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [293, 293], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt index df86cf85..bf33b87 100644 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -4,45 +4,46 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [8, 8], - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [285, 285] + "bounds": [285, 285], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], - "bounds": [1000, 1000], - "drawsContent": true + "bounds": [1000, 1000] }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 293], - "bounds": [285, 15] + "bounds": [285, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [293, 8], - "bounds": [15, 285] + "bounds": [15, 285], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [293, 293], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt deleted file mode 100644 index f700373f..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt +++ /dev/null
@@ -1,11 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt index df86cf85..bf33b87 100644 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -4,45 +4,46 @@ "name": "LayoutView #document", "bounds": [800, 600], "contentsOpaque": true, - "drawsContent": true + "backgroundColor": "#FFFFFF" }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [8, 8], - "bounds": [300, 300], - "drawsContent": true + "bounds": [300, 300] }, { "name": "Scrolling Layer", "position": [8, 8], - "bounds": [285, 285] + "bounds": [285, 285], + "drawsContent": false }, { "name": "Scrolling Contents Layer", "position": [8, 8], - "bounds": [1000, 1000], - "drawsContent": true + "bounds": [1000, 1000] }, { "name": "Overflow Controls Host Layer", "position": [8, 8], - "bounds": [300, 300] + "bounds": [300, 300], + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", "position": [8, 293], - "bounds": [285, 15] + "bounds": [285, 15], + "drawsContent": false }, { "name": "Vertical Scrollbar Layer", "position": [293, 8], - "bounds": [15, 285] + "bounds": [15, 285], + "drawsContent": false }, { "name": "Scroll Corner Layer", "position": [293, 293], - "bounds": [15, 15], - "drawsContent": true + "bounds": [15, 15] } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt deleted file mode 100644 index f700373f..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt +++ /dev/null
@@ -1,11 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt deleted file mode 100644 index f700373f..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt +++ /dev/null
@@ -1,11 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt deleted file mode 100644 index aa2b0d5..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt +++ /dev/null
@@ -1,142 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 13], - "bounds": [85, 100] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 13], - "bounds": [85, 200] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='content tall'", - "position": [8, 13], - "bounds": [10, 200] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [93, 13], - "bounds": [15, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 13], - "bounds": [100, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 13], - "bounds": [200, 85] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='content wide'", - "position": [8, 13], - "bounds": [200, 10] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [8, 98], - "bounds": [100, 15] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 13], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 13], - "bounds": [200, 200] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='content wide tall'", - "position": [8, 13], - "bounds": [200, 200] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [8, 98], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [93, 13], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container resizeWidget'", - "position": [8, 13], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='content'", - "position": [8, 13], - "bounds": [10, 10] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 13], - "bounds": [100, 100] - }, - { - "name": "Scroll Corner Layer", - "position": [93, 98], - "bounds": [15, 15], - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt deleted file mode 100644 index 9ce46581..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt +++ /dev/null
@@ -1,11 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [1008, 1008], - "contentsOpaque": true, - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt deleted file mode 100644 index ce8c20e..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt +++ /dev/null
@@ -1,69 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [1208, 821], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "Ancestor Clipping Layer", - "position": [8, 8], - "bounds": [1200, 800] - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='positioned'", - "position": [8, 8], - "bounds": [1200, 800], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "position": [8, 8], - "bounds": [1200, 800] - }, - { - "name": "Ancestor Clipping Layer", - "position": [8, 8], - "bounds": [1200, 1000] - }, - { - "name": "LayoutBlockFlow DIV id='scroller'", - "position": [8, 8], - "bounds": [1200, 1000], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 8], - "bounds": [1200, 1000] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 8], - "bounds": [1200, 10000], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='foreground'", - "position": [8, 10008], - "contentsOpaque": true - }, - { - "name": "Overflow Controls Ancestor Clipping Layer", - "position": [8, 8], - "bounds": [1200, 1000] - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 8], - "bounds": [1200, 1000] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [1201, 8], - "bounds": [7, 1000] - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt deleted file mode 100644 index d7b0088d0..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt +++ /dev/null
@@ -1,28 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow DIV class='resizable composited box'", - "position": [18, 10], - "bounds": [100, 100], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [18, 10], - "bounds": [100, 100] - }, - { - "name": "Scroll Corner Layer", - "position": [103, 95], - "bounds": [15, 15], - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt deleted file mode 100644 index c0ca36e..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt +++ /dev/null
@@ -1,78 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [785, 5516], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow DIV id='top'", - "position": [8, 8], - "bounds": [500, 500], - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Scrolling Layer", - "position": [8, 8], - "bounds": [485, 485] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 8], - "bounds": [485, 5000], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 8], - "bounds": [500, 500] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [8, 493], - "bounds": [485, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [493, 8], - "bounds": [15, 485] - }, - { - "name": "Scroll Corner Layer", - "position": [493, 493], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='middle')", - "position": [8, 8], - "bounds": [400, 400], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='child'", - "position": [8, 8], - "bounds": [300, 300], - "contentsOpaque": true, - "drawsContent": true, - "backfaceVisibility": "hidden", - "backgroundColor": "#FFFF00" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='tall'", - "position": [8, 8], - "bounds": [20, 5000], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#FA8072", - "hasScrollParent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt deleted file mode 100644 index b5a1464..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt +++ /dev/null
@@ -1,76 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [785, 5516], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow DIV id='top'", - "position": [8, 8], - "bounds": [500, 500], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [8, 8], - "bounds": [485, 485] - }, - { - "name": "Scrolling Contents Layer", - "position": [8, 8], - "bounds": [485, 5000], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='middle'", - "position": [8, 8], - "bounds": [400, 400], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000", - "hasClipParent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='child'", - "position": [8, 8], - "bounds": [300, 300], - "contentsOpaque": true, - "drawsContent": true, - "backfaceVisibility": "hidden", - "backgroundColor": "#FFFF00", - "hasClipParent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='tall'", - "position": [8, 8], - "bounds": [20, 5000], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#FA8072" - }, - { - "name": "Overflow Controls Host Layer", - "position": [8, 8], - "bounds": [500, 500] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [8, 493], - "bounds": [485, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [493, 8], - "bounds": [15, 485] - }, - { - "name": "Scroll Corner Layer", - "position": [493, 493], - "bounds": [15, 15], - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt deleted file mode 100644 index 73f595f3..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt +++ /dev/null
@@ -1,71 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow DIV id='intervening'", - "position": [98, 90], - "bounds": [300, 300], - "contentsOpaque": true, - "drawsContent": true, - "backfaceVisibility": "hidden", - "backgroundColor": "#FFEFD5" - }, - { - "name": "LayoutBlockFlow DIV id='scroller'", - "position": [98, 90], - "bounds": [102, 102], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [99, 91], - "bounds": [100, 100] - }, - { - "name": "Scrolling Contents Layer", - "position": [99, 91], - "bounds": [100, 180] - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='fixed'", - "position": [60, 60], - "bounds": [80, 80], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='scrolled'", - "position": [103, 95], - "bounds": [60, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='scrolled')", - "position": [103, 139], - "bounds": [60, 128], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [98, 90], - "bounds": [102, 102] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [192, 91], - "bounds": [7, 100] - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt deleted file mode 100644 index c5feec6..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt +++ /dev/null
@@ -1,52 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "bounds": [320, 340], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "bounds": [305, 325] - }, - { - "name": "Scrolling Contents Layer", - "bounds": [305, 1224] - }, - { - "name": "Overflow Controls Host Layer", - "bounds": [320, 340] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [0, 325], - "bounds": [305, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [305, 0], - "bounds": [15, 325] - }, - { - "name": "Scroll Corner Layer", - "position": [305, 325], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='column'", - "position": [10, 10], - "bounds": [284, 1204], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#C0C0C0" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt deleted file mode 100644 index b5745fc..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt +++ /dev/null
@@ -1,985 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [785, 2016], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow DIV id='container-absolute-grandchildren-not-contained' class='overflow'", - "position": [10, 10], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [12, 12], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [12, 12], - "bounds": [85, 144], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [10, 10], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [12, 97], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [97, 12], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [97, 97], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')", - "position": [35, 75], - "bounds": [80, 40], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'", - "position": [16, -15], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')", - "position": [16, 41], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'", - "position": [130, 10], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [132, 12], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [132, 12], - "bounds": [105, 144], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [130, 10], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [132, 97], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [217, 12], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [217, 97], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'", - "position": [157, 18], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')", - "position": [136, -15], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'", - "position": [250, 10], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [252, 12], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [252, 12], - "bounds": [85, 144] - }, - { - "name": "Overflow Controls Host Layer", - "position": [250, 10], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [252, 97], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [337, 12], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [337, 97], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')", - "position": [275, 75], - "bounds": [80, 40], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'", - "position": [256, -15], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')", - "position": [256, 41], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'", - "position": [370, 10], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [372, 12], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [372, 12], - "bounds": [85, 144], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [370, 10], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [372, 97], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [457, 12], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [457, 97], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')", - "position": [395, 75], - "bounds": [80, 40], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'", - "position": [376, -15], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')", - "position": [376, 41], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'", - "position": [10, 130], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [12, 132], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [12, 132], - "bounds": [105, 144], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [10, 130], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [12, 217], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [97, 132], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [97, 217], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'", - "position": [37, 138], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')", - "position": [16, 105], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'", - "position": [130, 130], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [132, 132], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [132, 132], - "bounds": [85, 144] - }, - { - "name": "Overflow Controls Host Layer", - "position": [130, 130], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [132, 217], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [217, 132], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [217, 217], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')", - "position": [155, 195], - "bounds": [80, 40], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'", - "position": [136, 105], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')", - "position": [136, 161], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'", - "position": [250, 130], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [252, 132], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [252, 132], - "bounds": [105, 144] - }, - { - "name": "Overflow Controls Host Layer", - "position": [250, 130], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [252, 217], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [337, 132], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [337, 217], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'", - "position": [277, 138], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')", - "position": [256, 105], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'", - "position": [370, 130], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [372, 132], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [372, 132], - "bounds": [105, 144] - }, - { - "name": "Overflow Controls Host Layer", - "position": [370, 130], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [372, 217], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [457, 132], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [457, 217], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'", - "position": [397, 138], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')", - "position": [376, 105], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'", - "position": [10, 250], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [12, 252], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [12, 252], - "bounds": [85, 144], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [10, 250], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [12, 337], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [97, 252], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [97, 337], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'", - "position": [35, 315], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'", - "position": [16, 225], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')", - "position": [16, 281], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'", - "position": [130, 250], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [132, 252], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [132, 252], - "bounds": [85, 144] - }, - { - "name": "Overflow Controls Host Layer", - "position": [130, 250], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [132, 337], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [217, 252], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [217, 337], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'", - "position": [155, 315], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'", - "position": [136, 225], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')", - "position": [136, 281], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'", - "position": [250, 250], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [252, 252], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [252, 252], - "bounds": [85, 144], - "drawsContent": true - }, - { - "name": "Overflow Controls Host Layer", - "position": [250, 250], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [252, 337], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [337, 252], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [337, 337], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'", - "position": [275, 315], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'", - "position": [256, 225], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')", - "position": [256, 281], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'", - "position": [370, 250], - "bounds": [104, 104], - "drawsContent": true - }, - { - "name": "Scrolling Layer", - "position": [372, 252], - "bounds": [85, 85] - }, - { - "name": "Scrolling Contents Layer", - "position": [372, 252], - "bounds": [85, 144] - }, - { - "name": "Overflow Controls Host Layer", - "position": [370, 250], - "bounds": [104, 104] - }, - { - "name": "Horizontal Scrollbar Layer", - "position": [372, 337], - "bounds": [85, 15] - }, - { - "name": "Vertical Scrollbar Layer", - "position": [457, 252], - "bounds": [15, 85] - }, - { - "name": "Scroll Corner Layer", - "position": [457, 337], - "bounds": [15, 15], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'", - "position": [395, 315], - "bounds": [80, 40], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#800080" - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'", - "position": [376, 225], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')", - "position": [376, 281], - "bounds": [75, 24], - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'", - "position": [375, 20], - "bounds": [50, 100], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren' class='positionFixed sibling'", - "position": [15, 140], - "bounds": [50, 100], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-not-contained' class='positionFixed sibling'", - "position": [135, 140], - "bounds": [50, 100], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling' class='positionFixed sibling'", - "position": [255, 140], - "bounds": [50, 100], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling-grandchildren' class='positionFixed sibling'", - "position": [15, 260], - "bounds": [50, 100], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling' class='positionFixed sibling'", - "position": [135, 260], - "bounds": [50, 100], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#008000" - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'", - "position": [16, -43], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')", - "position": [16, 13], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'", - "position": [136, -43], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')", - "position": [136, 13], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'", - "position": [256, -43], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')", - "position": [256, 13], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'", - "position": [376, -43], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')", - "position": [376, 13], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'", - "position": [16, 77], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')", - "position": [16, 133], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'", - "position": [136, 77], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')", - "position": [136, 133], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'", - "position": [256, 77], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')", - "position": [256, 133], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'", - "position": [376, 77], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')", - "position": [376, 133], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'", - "position": [16, 197], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')", - "position": [16, 253], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'", - "position": [136, 197], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')", - "position": [136, 253], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'", - "position": [256, 197], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')", - "position": [256, 253], - "bounds": [75, 80], - "drawsContent": true - }, - { - "name": "Squashing Containment Layer" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'", - "position": [376, 197], - "bounds": [75, 24], - "contentsOpaque": true, - "drawsContent": true, - "backgroundColor": "#0000FF" - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')", - "position": [376, 253], - "bounds": [75, 80], - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/layer-visible-content-expected.txt b/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/layer-visible-content-expected.txt deleted file mode 100644 index df5dcb1..0000000 --- a/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/layer-visible-content-expected.txt +++ /dev/null
@@ -1,30 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "drawsContent": true - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='container'", - "bounds": [200, 200], - "drawsContent": true - }, - { - "name": "Child Containment Layer", - "bounds": [200, 200] - }, - { - "name": "LayoutBlockFlow DIV class='composited box'", - "bounds": [10, 10] - }, - { - "name": "LayoutBlockFlow PRE id='layer-tree'", - "bounds": [800, 16], - "opacity": 0, - "drawsContent": true - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt index efb44db..faac2a3 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -29,10 +29,8 @@ [Worker] method detect [Worker] interface Blob [Worker] attribute @@toStringTag -[Worker] getter isClosed [Worker] getter size [Worker] getter type -[Worker] method close [Worker] method constructor [Worker] method slice [Worker] interface BroadcastChannel : EventTarget
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt index 9030ee98..6605a59 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -44,6 +44,11 @@ getter multiline getter multiselectable getter onaccessibleclick + getter onaccessiblecontextmenu + getter onaccessibledecrement + getter onaccessiblefocus + getter onaccessibleincrement + getter onaccessiblescrollintoview getter orientation getter owns getter placeholder @@ -93,6 +98,11 @@ setter multiline setter multiselectable setter onaccessibleclick + setter onaccessiblecontextmenu + setter onaccessibledecrement + setter onaccessiblefocus + setter onaccessibleincrement + setter onaccessiblescrollintoview setter orientation setter owns setter placeholder @@ -501,10 +511,8 @@ setter type interface Blob attribute @@toStringTag - getter isClosed getter size getter type - method close method constructor method slice interface BlobEvent : Event
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt index 8f62685..57bf400 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -29,10 +29,8 @@ [Worker] method detect [Worker] interface Blob [Worker] attribute @@toStringTag -[Worker] getter isClosed [Worker] getter size [Worker] getter type -[Worker] method close [Worker] method constructor [Worker] method slice [Worker] interface BroadcastChannel : EventTarget
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinition.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinition.cpp index 64434b97..9218c89 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinition.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptCustomElementDefinition.cpp
@@ -127,15 +127,6 @@ visitor->TraceWrappers(attribute_changed_callback_.Cast<v8::Value>()); } -static void DispatchErrorEvent(v8::Isolate* isolate, - v8::Local<v8::Value> exception, - v8::Local<v8::Object> constructor) { - v8::TryCatch try_catch(isolate); - try_catch.SetVerbose(true); - V8ScriptRunner::ThrowException( - isolate, exception, constructor.As<v8::Function>()->GetScriptOrigin()); -} - HTMLElement* ScriptCustomElementDefinition::HandleCreateElementSyncException( Document& document, const QualifiedName& tag_name, @@ -144,7 +135,7 @@ DCHECK(exception_state.HadException()); // 6.1."If any of these subsubsteps threw an exception".1 // Report the exception. - DispatchErrorEvent(isolate, exception_state.GetException(), Constructor()); + V8ScriptRunner::ReportException(isolate, exception_state.GetException()); exception_state.ClearException(); // ... .2 Return HTMLUnknownElement. return CustomElement::CreateFailedElement(document, tag_name); @@ -229,7 +220,7 @@ "not return a different object"; v8::Local<v8::Value> exception = V8ThrowDOMException::CreateDOMException( script_state_->GetIsolate(), kInvalidStateError, message); - DispatchErrorEvent(isolate, exception, Constructor()); + V8ScriptRunner::ReportException(isolate, exception); return false; }
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptModule.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptModule.cpp index 461fe8d..46a8ed3 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptModule.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptModule.cpp
@@ -6,6 +6,7 @@ #include "bindings/core/v8/ExceptionState.h" #include "bindings/core/v8/V8BindingForCore.h" +#include "bindings/core/v8/V8ScriptRunner.h" #include "core/dom/Modulator.h" #include "core/dom/ScriptModuleResolver.h" #include "core/probe/CoreProbes.h" @@ -120,20 +121,11 @@ } void ScriptModule::ReportException(ScriptState* script_state, - v8::Local<v8::Value> exception, - const String& file_name, - const TextPosition& start_position) { + v8::Local<v8::Value> exception) { // We ensure module-related code is not executed without the flag. // https://crbug.com/715376 CHECK(RuntimeEnabledFeatures::ModuleScriptsEnabled()); - - v8::Isolate* isolate = script_state->GetIsolate(); - - v8::TryCatch try_catch(isolate); - try_catch.SetVerbose(true); - - V8ScriptRunner::ReportExceptionForModule(isolate, exception, file_name, - start_position); + V8ScriptRunner::ReportException(script_state->GetIsolate(), exception); } Vector<String> ScriptModule::ModuleRequests(ScriptState* script_state) {
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptModule.h b/third_party/WebKit/Source/bindings/core/v8/ScriptModule.h index e008661e..789498f 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptModule.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptModule.h
@@ -52,10 +52,7 @@ ScriptValue Instantiate(ScriptState*); void Evaluate(ScriptState*) const; - static void ReportException(ScriptState*, - v8::Local<v8::Value> exception, - const String& file_name, - const TextPosition& start_position); + static void ReportException(ScriptState*, v8::Local<v8::Value> exception); Vector<String> ModuleRequests(ScriptState*); Vector<TextPosition> ModuleRequestPositions(ScriptState*);
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp b/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp index c8a4479..dca66e2 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8AbstractEventListener.cpp
@@ -125,13 +125,14 @@ return; v8::Local<v8::Value> return_value; + v8::Local<v8::Context> context = script_state->GetContext(); { // Catch exceptions thrown in the event handler so they do not propagate to // javascript code that caused the event to fire. v8::TryCatch try_catch(GetIsolate()); try_catch.SetVerbose(true); - v8::Local<v8::Object> global = script_state->GetContext()->Global(); + v8::Local<v8::Object> global = context->Global(); V8PrivateProperty::Symbol event_symbol = V8PrivateProperty::GetGlobalEvent(GetIsolate()); // Save the old 'event' property so we can restore it later. @@ -148,8 +149,9 @@ event->target()->UncaughtExceptionInEventHandler(); if (!try_catch.CanContinue()) { // Result of TerminateExecution(). - if (ExecutionContext::From(script_state)->IsWorkerGlobalScope()) - ToWorkerGlobalScope(ExecutionContext::From(script_state)) + ExecutionContext* execution_context = ToExecutionContext(context); + if (execution_context->IsWorkerGlobalScope()) + ToWorkerGlobalScope(execution_context) ->ScriptController() ->ForbidExecution(); return;
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp index 5e78d3d..854ccb1 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
@@ -157,7 +157,7 @@ v8::Local<FunctionOrTemplate> CreateAccessorFunctionOrTemplate( v8::Isolate*, v8::FunctionCallback, - V8DOMConfiguration::CachedPropertyKey, + V8PrivateProperty::CachedAccessorSymbol, v8::Local<v8::Value> data, v8::Local<v8::Signature>, int length); @@ -167,16 +167,18 @@ CreateAccessorFunctionOrTemplate<v8::FunctionTemplate>( v8::Isolate* isolate, v8::FunctionCallback callback, - V8DOMConfiguration::CachedPropertyKey cached_property_key, + V8PrivateProperty::CachedAccessorSymbol cached_property_key, v8::Local<v8::Value> data, v8::Local<v8::Signature> signature, int length) { v8::Local<v8::FunctionTemplate> function_template; if (callback) { - if (cached_property_key) { + if (cached_property_key != V8PrivateProperty::kNoCachedAccessor) { function_template = v8::FunctionTemplate::NewWithCache( - isolate, callback, cached_property_key(isolate), data, signature, - length); + isolate, callback, + V8PrivateProperty::GetCachedAccessor(isolate, cached_property_key) + .GetPrivate(), + data, signature, length); } else { function_template = v8::FunctionTemplate::New(isolate, callback, data, signature, length); @@ -194,7 +196,7 @@ v8::Local<v8::Function> CreateAccessorFunctionOrTemplate<v8::Function>( v8::Isolate* isolate, v8::FunctionCallback callback, - V8DOMConfiguration::CachedPropertyKey, + V8PrivateProperty::CachedAccessorSymbol, v8::Local<v8::Value> data, v8::Local<v8::Signature> signature, int length) { @@ -203,7 +205,8 @@ v8::Local<v8::FunctionTemplate> function_template = CreateAccessorFunctionOrTemplate<v8::FunctionTemplate>( - isolate, callback, nullptr, data, signature, length); + isolate, callback, V8PrivateProperty::kNoCachedAccessor, data, + signature, length); if (function_template.IsEmpty()) return v8::Local<v8::Function>(); @@ -250,9 +253,10 @@ v8::Local<v8::Name> name = V8AtomicString(isolate, config.name); v8::FunctionCallback getter_callback = config.getter; v8::FunctionCallback setter_callback = config.setter; - V8DOMConfiguration::CachedPropertyKey cached_property_key = nullptr; + auto cached_property_key = V8PrivateProperty::kNoCachedAccessor; if (world.IsMainWorld()) { - cached_property_key = config.cached_property_key; + cached_property_key = static_cast<V8PrivateProperty::CachedAccessorSymbol>( + config.cached_property_key); } // Support [LenientThis] by not specifying the signature. V8 does not do @@ -273,7 +277,8 @@ isolate, getter_callback, cached_property_key, data, signature, 0); v8::Local<FunctionOrTemplate> setter = CreateAccessorFunctionOrTemplate<FunctionOrTemplate>( - isolate, setter_callback, nullptr, data, signature, 1); + isolate, setter_callback, V8PrivateProperty::kNoCachedAccessor, + data, signature, 1); if (location & V8DOMConfiguration::kOnInstance && !IsObjectAndEmpty(instance_or_template)) { instance_or_template->SetAccessorProperty( @@ -294,12 +299,12 @@ // type check against a holder. v8::Local<FunctionOrTemplate> getter = CreateAccessorFunctionOrTemplate<FunctionOrTemplate>( - isolate, getter_callback, nullptr, data, v8::Local<v8::Signature>(), - 0); + isolate, getter_callback, V8PrivateProperty::kNoCachedAccessor, + data, v8::Local<v8::Signature>(), 0); v8::Local<FunctionOrTemplate> setter = CreateAccessorFunctionOrTemplate<FunctionOrTemplate>( - isolate, setter_callback, nullptr, data, v8::Local<v8::Signature>(), - 1); + isolate, setter_callback, V8PrivateProperty::kNoCachedAccessor, + data, v8::Local<v8::Signature>(), 1); interface_or_template->SetAccessorProperty( name, getter, setter, static_cast<v8::PropertyAttribute>(config.attribute));
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.h b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.h index 9947be6..f4401553 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.h +++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.h
@@ -33,6 +33,7 @@ #include "bindings/core/v8/V8BindingForCore.h" #include "core/CoreExport.h" #include "platform/bindings/V8DOMWrapper.h" +#include "platform/bindings/V8PrivateProperty.h" #include "v8/include/v8.h" namespace blink { @@ -72,8 +73,6 @@ kAllWorlds = kMainWorld | kNonMainWorlds, }; - typedef v8::Local<v8::Private> (*CachedPropertyKey)(v8::Isolate*); - // AttributeConfiguration translates into calls to SetNativeDataProperty() on // either of instance or prototype object (or their object template). struct AttributeConfiguration { @@ -144,9 +143,9 @@ const char* const name; v8::FunctionCallback getter; v8::FunctionCallback setter; - // The accessor's 'result' is stored in a private property. - CachedPropertyKey cached_property_key; const WrapperTypeInfo* data; + // V8PrivateProperty::CachedAccessorSymbol + unsigned cached_property_key : 1; // v8::PropertyAttribute unsigned attribute : 8; // PropertyLocationConfiguration
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8ErrorHandler.cpp b/third_party/WebKit/Source/bindings/core/v8/V8ErrorHandler.cpp index eac23bcb..a57330d 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8ErrorHandler.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8ErrorHandler.cpp
@@ -54,17 +54,18 @@ if (error_event->World() && error_event->World() != &World()) return v8::Null(GetIsolate()); - v8::Local<v8::Object> listener = - GetListenerObject(ExecutionContext::From(script_state)); + v8::Local<v8::Context> context = script_state->GetContext(); + ExecutionContext* execution_context = ToExecutionContext(context); + v8::Local<v8::Object> listener = GetListenerObject(execution_context); if (listener.IsEmpty() || !listener->IsFunction()) return v8::Null(GetIsolate()); v8::Local<v8::Function> call_function = v8::Local<v8::Function>::Cast(listener); - v8::Local<v8::Object> this_value = script_state->GetContext()->Global(); + v8::Local<v8::Object> this_value = context->Global(); v8::Local<v8::Object> event_object; - if (!js_event->ToObject(script_state->GetContext()).ToLocal(&event_object)) + if (!js_event->ToObject(context).ToLocal(&event_object)) return v8::Null(GetIsolate()); auto private_error = V8PrivateProperty::GetErrorEventError(GetIsolate()); v8::Local<v8::Value> error = private_error.GetOrUndefined(event_object); @@ -80,7 +81,7 @@ try_catch.SetVerbose(true); v8::MaybeLocal<v8::Value> result = V8ScriptRunner::CallFunction( - call_function, ExecutionContext::From(script_state), this_value, + call_function, execution_context, this_value, WTF_ARRAY_LENGTH(parameters), parameters, GetIsolate()); v8::Local<v8::Value> return_value; if (!result.ToLocal(&return_value))
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8EventListener.cpp b/third_party/WebKit/Source/bindings/core/v8/V8EventListener.cpp index fdc87d6..9a8b3a3 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8EventListener.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8EventListener.cpp
@@ -95,19 +95,19 @@ if (handler_function.IsEmpty() || receiver.IsEmpty()) return v8::Local<v8::Value>(); - if (!ExecutionContext::From(script_state)->IsDocument()) + ExecutionContext* execution_context = + ToExecutionContext(script_state->GetContext()); + if (!execution_context->IsDocument()) return v8::Local<v8::Value>(); - LocalFrame* frame = - ToDocument(ExecutionContext::From(script_state))->GetFrame(); + LocalFrame* frame = ToDocument(execution_context)->GetFrame(); if (!frame) return v8::Local<v8::Value>(); // TODO(jochen): Consider moving this check into canExecuteScripts. // http://crbug.com/608641 if (script_state->World().IsMainWorld() && - !ExecutionContext::From(script_state) - ->CanExecuteScripts(kAboutToExecuteScript)) + !execution_context->CanExecuteScripts(kAboutToExecuteScript)) return v8::Local<v8::Value>(); v8::Local<v8::Value> parameters[1] = {js_event};
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8LazyEventListener.cpp b/third_party/WebKit/Source/bindings/core/v8/V8LazyEventListener.cpp index 3514390..0b534e50 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8LazyEventListener.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8LazyEventListener.cpp
@@ -88,8 +88,9 @@ v8::Local<v8::Value> js_event, Event* event) { DCHECK(!js_event.IsEmpty()); - v8::Local<v8::Object> listener_object = - GetListenerObject(ExecutionContext::From(script_state)); + ExecutionContext* execution_context = + ToExecutionContext(script_state->GetContext()); + v8::Local<v8::Object> listener_object = GetListenerObject(execution_context); if (listener_object.IsEmpty()) return v8::Local<v8::Value>(); @@ -98,16 +99,14 @@ if (handler_function.IsEmpty() || receiver.IsEmpty()) return v8::Local<v8::Value>(); - if (!ExecutionContext::From(script_state)->IsDocument()) + if (!execution_context->IsDocument()) return v8::Local<v8::Value>(); - LocalFrame* frame = - ToDocument(ExecutionContext::From(script_state))->GetFrame(); + LocalFrame* frame = ToDocument(execution_context)->GetFrame(); if (!frame) return v8::Local<v8::Value>(); - if (!ExecutionContext::From(script_state) - ->CanExecuteScripts(kAboutToExecuteScript)) + if (!execution_context->CanExecuteScripts(kAboutToExecuteScript)) return v8::Local<v8::Value>(); v8::Local<v8::Value> parameters[1] = {js_event};
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp index 55dfeb4..e70a6850 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp
@@ -30,6 +30,7 @@ #include "bindings/core/v8/ScriptStreamer.h" #include "bindings/core/v8/V8BindingForCore.h" #include "bindings/core/v8/V8GCController.h" +#include "bindings/core/v8/V8Initializer.h" #include "build/build_config.h" #include "core/dom/Document.h" #include "core/dom/ExecutionContext.h" @@ -524,29 +525,6 @@ return v8::ScriptCompiler::CompileModule(isolate, &script_source); } -void V8ScriptRunner::ReportExceptionForModule( - v8::Isolate* isolate, - v8::Local<v8::Value> exception, - const String& file_name, - const TextPosition& start_position) { - // |origin| is for compiling a fragment that throws |exception|. - // Therefore |is_module| is false and |access_control_status| is - // kSharableCrossOrigin. - AccessControlStatus access_control_status = kSharableCrossOrigin; - v8::ScriptOrigin origin( - V8String(isolate, file_name), - v8::Integer::New(isolate, start_position.line_.ZeroBasedInt()), - v8::Integer::New(isolate, start_position.column_.ZeroBasedInt()), - v8::Boolean::New(isolate, access_control_status == kSharableCrossOrigin), - v8::Local<v8::Integer>(), // script id - v8::String::Empty(isolate), // source_map_url - v8::Boolean::New(isolate, access_control_status == kOpaqueResource), - v8::False(isolate), // is_wasm - v8::False(isolate)); // is_module - - ThrowException(isolate, exception, origin); -} - v8::MaybeLocal<v8::Value> V8ScriptRunner::RunCompiledScript( v8::Isolate* isolate, v8::Local<v8::Script> script, @@ -746,44 +724,16 @@ CachedMetadataHandler::kSendToPlatform); } -void V8ScriptRunner::ThrowException(v8::Isolate* isolate, - v8::Local<v8::Value> exception, - const v8::ScriptOrigin& origin) { - // This is intentionally a CHECK, as CallInternalFunction below will deref - // nullptr if this condition is false. - CHECK(!exception.IsEmpty()); +void V8ScriptRunner::ReportException(v8::Isolate* isolate, + v8::Local<v8::Value> exception) { + // TODO(adamk): Handle calls on worker threads. + DCHECK(IsMainThread()); + DCHECK(!exception.IsEmpty()); - // In order for the current TryCatch to catch this exception and - // call MessageCallback when SetVerbose(true), create a v8::Function - // that calls isolate->throwException(). - // Unlike throwStackOverflowExceptionIfNeeded(), create a temporary Script - // with the specified ScriptOrigin. When the exception was created but not - // thrown yet, the ScriptOrigin of the thrower is set to the exception. - // v8::Function::New() has empty ScriptOrigin, and thus the exception will - // be "muted" (sanitized in our terminology) if CORS does not allow. // https://html.spec.whatwg.org/multipage/webappapis.html#report-the-error - // Avoid compile and run scripts when API is available: crbug.com/639739 - v8::ScriptOriginOptions origin_options = origin.Options(); - // Create a new ScriptOrigin with is_wasm and is_module bits left off - // (they default to false). - v8::ScriptOrigin origin_copy( - origin.ResourceName(), origin.ResourceLineOffset(), - origin.ResourceColumnOffset(), - v8::Boolean::New(isolate, origin_options.IsSharedCrossOrigin()), - origin.ScriptID(), origin.SourceMapUrl(), - v8::Boolean::New(isolate, origin_options.IsOpaque())); - DCHECK(!origin_copy.Options().IsWasm()); - DCHECK(!origin_copy.Options().IsModule()); - v8::Local<v8::Script> script = - CompileWithoutOptions( - V8CompileHistogram::Cacheability::kNoncacheable, isolate, - V8AtomicString(isolate, "((e) => { throw e; })"), origin_copy) - .ToLocalChecked(); - v8::Local<v8::Function> thrower = RunCompiledInternalScript(isolate, script) - .ToLocalChecked() - .As<v8::Function>(); - v8::Local<v8::Value> args[] = {exception}; - CallInternalFunction(thrower, thrower, WTF_ARRAY_LENGTH(args), args, isolate); + v8::Local<v8::Message> message = + v8::Exception::CreateMessage(isolate, exception); + V8Initializer::MessageHandlerInMainThread(message, exception); } v8::MaybeLocal<v8::Value> V8ScriptRunner::CallExtraHelper(
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.h b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.h index 2806bdb..20ff8df4 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.h +++ b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.h
@@ -145,10 +145,12 @@ return CallExtraHelper(script_state, name, N, args).ToLocalChecked(); } - // Use V8ThrowException instead of this function unless absolutely needed. - static void ThrowException(v8::Isolate*, - v8::Local<v8::Value> exception, - const v8::ScriptOrigin&); + // Reports an exception to the message handler, as if it were an uncaught + // exception. Can only be called on the main thread. + // + // TODO(adamk): This should live on V8ThrowException, but it depends on + // V8Initializer and so can't trivially move to platform/bindings. + static void ReportException(v8::Isolate*, v8::Local<v8::Value> exception); private: static v8::MaybeLocal<v8::Value> CallExtraHelper(ScriptState*,
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8WorkerGlobalScopeEventListener.cpp b/third_party/WebKit/Source/bindings/core/v8/V8WorkerGlobalScopeEventListener.cpp index 92ddd58..42b726f 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8WorkerGlobalScopeEventListener.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8WorkerGlobalScopeEventListener.cpp
@@ -51,17 +51,16 @@ void V8WorkerGlobalScopeEventListener::HandleEvent(ScriptState* script_state, Event* event) { + v8::Local<v8::Context> context = script_state->GetContext(); WorkerOrWorkletScriptController* script = - ToWorkerGlobalScope(ExecutionContext::From(script_state)) - ->ScriptController(); + ToWorkerGlobalScope(ToExecutionContext(context))->ScriptController(); if (!script) return; ScriptState::Scope scope(script_state); // Get the V8 wrapper for the event object. - v8::Local<v8::Value> js_event = - ToV8(event, script_state->GetContext()->Global(), GetIsolate()); + v8::Local<v8::Value> js_event = ToV8(event, context->Global(), GetIsolate()); if (js_event.IsEmpty()) return; @@ -81,8 +80,8 @@ v8::Local<v8::Value> parameters[1] = {js_event}; v8::MaybeLocal<v8::Value> maybe_result = V8ScriptRunner::CallFunction( - handler_function, ExecutionContext::From(script_state), receiver, - WTF_ARRAY_LENGTH(parameters), parameters, GetIsolate()); + handler_function, ToExecutionContext(script_state->GetContext()), + receiver, WTF_ARRAY_LENGTH(parameters), parameters, GetIsolate()); v8::Local<v8::Value> result; if (!maybe_result.ToLocal(&result))
diff --git a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp index 57bcaba..f8cde0c 100644 --- a/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/serialization/V8ScriptValueSerializer.cpp
@@ -178,12 +178,6 @@ const WrapperTypeInfo* wrapper_type_info = wrappable->GetWrapperTypeInfo(); if (wrapper_type_info == &V8Blob::wrapperTypeInfo) { Blob* blob = wrappable->ToImpl<Blob>(); - if (blob->isClosed()) { - exception_state.ThrowDOMException( - kDataCloneError, - "A Blob object has been closed, and could therefore not be cloned."); - return false; - } serialized_script_value_->BlobDataHandles().Set(blob->Uuid(), blob->GetBlobDataHandle()); if (blob_info_array_) { @@ -437,12 +431,6 @@ bool V8ScriptValueSerializer::WriteFile(File* file, ExceptionState& exception_state) { - if (file->isClosed()) { - exception_state.ThrowDOMException( - kDataCloneError, - "A File object has been closed, and could therefore not be cloned."); - return false; - } serialized_script_value_->BlobDataHandles().Set(file->Uuid(), file->GetBlobDataHandle()); if (blob_info_array_) {
diff --git a/third_party/WebKit/Source/bindings/templates/attributes.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/attributes.cpp.tmpl index faf2bcc..7f30504 100644 --- a/third_party/WebKit/Source/bindings/templates/attributes.cpp.tmpl +++ b/third_party/WebKit/Source/bindings/templates/attributes.cpp.tmpl
@@ -263,15 +263,6 @@ {##############################################################################} -{% macro attribute_cached_property_key(attribute) %} -v8::Local<v8::Private> {{v8_class_or_partial}}::{{attribute.name}}CachedPropertyKey(v8::Isolate* isolate) -{ - return V8PrivateProperty::Get{{attribute.cached_accessor_name}}(isolate).GetPrivate(); -} -{% endmacro %} - - -{##############################################################################} {% macro constructor_getter_callback(attribute, world_suffix) %} void {{v8_class_or_partial}}::{{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info) { {{ runtime_timer_scope_disabled_by_default(attribute.runtime_call_stats.constructor_getter_callback_counter) }} @@ -525,9 +516,9 @@ if attribute.constructor_type else 'nullptr' %} {% set property_attribute = 'static_cast<v8::PropertyAttribute>(%s)' % ' | '.join(attribute.property_attributes) %} -{% set cached_property_key = - '%s::%sCachedPropertyKey' % (v8_class_or_partial, attribute.name) - if attribute.is_cached_accessor else 'nullptr' %} +{% set cached_property_key = 'V8PrivateProperty::k' + + (attribute.cached_accessor_name if attribute.is_cached_accessor + else 'NoCachedAccessor') %} {% set holder_check = 'V8DOMConfiguration::kDoNotCheckHolder' if attribute.is_lenient_this else 'V8DOMConfiguration::kCheckHolder' %} {% if attribute.is_per_world_bindings %} @@ -540,16 +531,17 @@ '"%s"' % attribute.name, getter_callback_for_main_world, setter_callback_for_main_world, + wrapper_type_info, ], 'non_main' : [ '"%s"' % attribute.name, getter_callback, setter_callback, + wrapper_type_info, ], } %} {% set accessor_only_fields = [] if config_type == 'attribute' else [cached_property_key] %} {% set config_post = [ - wrapper_type_info, property_attribute, property_location(attribute), holder_check,
diff --git a/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl index 470454f7..0fe6d85 100644 --- a/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl +++ b/third_party/WebKit/Source/bindings/templates/interface_base.cpp.tmpl
@@ -191,12 +191,8 @@ {# Attributes #} {% from 'attributes.cpp.tmpl' import constructor_getter_callback, - attribute_getter_callback, attribute_setter_callback, - attribute_cached_property_key with context %} + attribute_getter_callback, attribute_setter_callback with context %} {% for attribute in attributes %} -{% if attribute.is_cached_accessor %} -{{attribute_cached_property_key(attribute)}} -{% endif %} {% for world_suffix in attribute.world_suffixes %} {% if not attribute.constructor_type %} {{attribute_getter_callback(attribute, world_suffix)}}
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp index 9fb5a3a3e..4b94c1a2 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
@@ -115,7 +115,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8SVGTestInterfaceAccessors[] = { - { "type", V8SVGTestInterface::typeAttributeGetterCallback, V8SVGTestInterface::typeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "type", V8SVGTestInterface::typeAttributeGetterCallback, V8SVGTestInterface::typeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static void installV8SVGTestInterfaceTemplate(
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp index c491cb88..2ceaae32 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestCallbackFunctions.cpp
@@ -255,7 +255,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestCallbackFunctionsAccessors[] = { - { "customElementsCallbacksReadonlyAttribute", V8TestCallbackFunctions::customElementsCallbacksReadonlyAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customElementsCallbacksReadonlyAttribute", V8TestCallbackFunctions::customElementsCallbacksReadonlyAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestCallbackFunctionsMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp index ba51ede..629b7ed 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
@@ -242,7 +242,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestIntegerIndexedAccessors[] = { - { "length", V8TestIntegerIndexed::lengthAttributeGetterCallback, V8TestIntegerIndexed::lengthAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestIntegerIndexed::lengthAttributeGetterCallback, V8TestIntegerIndexed::lengthAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestIntegerIndexedMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp index f43f2cd..bc8d73e 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
@@ -242,7 +242,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestIntegerIndexedGlobalAccessors[] = { - { "length", V8TestIntegerIndexedGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedGlobal::lengthAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestIntegerIndexedGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedGlobal::lengthAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestIntegerIndexedGlobalMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp index 5f581c4..4bcbbe9e 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
@@ -242,7 +242,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestIntegerIndexedPrimaryGlobalAccessors[] = { - { "length", V8TestIntegerIndexedPrimaryGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedPrimaryGlobal::lengthAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestIntegerIndexedPrimaryGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedPrimaryGlobal::lengthAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestIntegerIndexedPrimaryGlobalMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp index f2406335..76e17ff 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
@@ -3326,55 +3326,55 @@ #endif static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceAccessors[] = { - { "testInterfaceAttribute", V8TestInterface::testInterfaceAttributeAttributeGetterCallback, V8TestInterface::testInterfaceAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceAttribute", V8TestInterface::testInterfaceAttributeAttributeGetterCallback, V8TestInterface::testInterfaceAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "doubleAttribute", V8TestInterface::doubleAttributeAttributeGetterCallback, V8TestInterface::doubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestInterface::doubleAttributeAttributeGetterCallback, V8TestInterface::doubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "floatAttribute", V8TestInterface::floatAttributeAttributeGetterCallback, V8TestInterface::floatAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "floatAttribute", V8TestInterface::floatAttributeAttributeGetterCallback, V8TestInterface::floatAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleAttribute", V8TestInterface::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface::unrestrictedDoubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleAttribute", V8TestInterface::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface::unrestrictedDoubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedFloatAttribute", V8TestInterface::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface::unrestrictedFloatAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedFloatAttribute", V8TestInterface::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface::unrestrictedFloatAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testEnumAttribute", V8TestInterface::testEnumAttributeAttributeGetterCallback, V8TestInterface::testEnumAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testEnumAttribute", V8TestInterface::testEnumAttributeAttributeGetterCallback, V8TestInterface::testEnumAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "stringOrDoubleAttribute", V8TestInterface::stringOrDoubleAttributeAttributeGetterCallback, V8TestInterface::stringOrDoubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "stringOrDoubleAttribute", V8TestInterface::stringOrDoubleAttributeAttributeGetterCallback, V8TestInterface::stringOrDoubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "uncapitalAttribute", V8TestInterface::uncapitalAttributeAttributeGetterCallback, V8TestInterface::uncapitalAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "uncapitalAttribute", V8TestInterface::uncapitalAttributeAttributeGetterCallback, V8TestInterface::uncapitalAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestInterface::staticStringAttributeAttributeGetterCallback, V8TestInterface::staticStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestInterface::staticStringAttributeAttributeGetterCallback, V8TestInterface::staticStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticReturnDOMWrapperAttribute", V8TestInterface::staticReturnDOMWrapperAttributeAttributeGetterCallback, V8TestInterface::staticReturnDOMWrapperAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticReturnDOMWrapperAttribute", V8TestInterface::staticReturnDOMWrapperAttributeAttributeGetterCallback, V8TestInterface::staticReturnDOMWrapperAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticReadOnlyStringAttribute", V8TestInterface::staticReadOnlyStringAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticReadOnlyStringAttribute", V8TestInterface::staticReadOnlyStringAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticReadOnlyReturnDOMWrapperAttribute", V8TestInterface::staticReadOnlyReturnDOMWrapperAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticReadOnlyReturnDOMWrapperAttribute", V8TestInterface::staticReadOnlyReturnDOMWrapperAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingAttribute", V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeGetterCallback, V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingAttribute", V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeGetterCallback, V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "alwaysExposedAttribute", V8TestInterface::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface::alwaysExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "alwaysExposedAttribute", V8TestInterface::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface::alwaysExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "lenientThisAttribute", V8TestInterface::lenientThisAttributeAttributeGetterCallback, V8TestInterface::lenientThisAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "lenientThisAttribute", V8TestInterface::lenientThisAttributeAttributeGetterCallback, V8TestInterface::lenientThisAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implementsStaticReadOnlyLongAttribute", V8TestInterface::implementsStaticReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementsStaticReadOnlyLongAttribute", V8TestInterface::implementsStaticReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implementsStaticStringAttribute", V8TestInterface::implementsStaticStringAttributeAttributeGetterCallback, V8TestInterface::implementsStaticStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementsStaticStringAttribute", V8TestInterface::implementsStaticStringAttributeAttributeGetterCallback, V8TestInterface::implementsStaticStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implementsReadonlyStringAttribute", V8TestInterface::implementsReadonlyStringAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementsReadonlyStringAttribute", V8TestInterface::implementsReadonlyStringAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implementsStringAttribute", V8TestInterface::implementsStringAttributeAttributeGetterCallback, V8TestInterface::implementsStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementsStringAttribute", V8TestInterface::implementsStringAttributeAttributeGetterCallback, V8TestInterface::implementsStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implementsNodeAttribute", V8TestInterface::implementsNodeAttributeAttributeGetterCallback, V8TestInterface::implementsNodeAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementsNodeAttribute", V8TestInterface::implementsNodeAttributeAttributeGetterCallback, V8TestInterface::implementsNodeAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implementsEventHandlerAttribute", V8TestInterface::implementsEventHandlerAttributeAttributeGetterCallback, V8TestInterface::implementsEventHandlerAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementsEventHandlerAttribute", V8TestInterface::implementsEventHandlerAttributeAttributeGetterCallback, V8TestInterface::implementsEventHandlerAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implements3StringAttribute", V8TestInterface::implements3StringAttributeAttributeGetterCallback, V8TestInterface::implements3StringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implements3StringAttribute", V8TestInterface::implements3StringAttributeAttributeGetterCallback, V8TestInterface::implements3StringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implements3StaticStringAttribute", V8TestInterface::implements3StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements3StaticStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implements3StaticStringAttribute", V8TestInterface::implements3StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements3StaticStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "partial2LongAttribute", V8TestInterface::partial2LongAttributeAttributeGetterCallback, V8TestInterface::partial2LongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partial2LongAttribute", V8TestInterface::partial2LongAttributeAttributeGetterCallback, V8TestInterface::partial2LongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "partial2StaticLongAttribute", V8TestInterface::partial2StaticLongAttributeAttributeGetterCallback, V8TestInterface::partial2StaticLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partial2StaticLongAttribute", V8TestInterface::partial2StaticLongAttributeAttributeGetterCallback, V8TestInterface::partial2StaticLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceMethods[] = { @@ -3500,11 +3500,11 @@ if (RuntimeEnabledFeatures::FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "conditionalReadOnlyLongAttribute", V8TestInterface::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "conditionalReadOnlyLongAttribute", V8TestInterface::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticConditionalReadOnlyLongAttribute", V8TestInterface::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticConditionalReadOnlyLongAttribute", V8TestInterface::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "conditionalLongAttribute", V8TestInterface::conditionalLongAttributeAttributeGetterCallback, V8TestInterface::conditionalLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "conditionalLongAttribute", V8TestInterface::conditionalLongAttributeAttributeGetterCallback, V8TestInterface::conditionalLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3513,9 +3513,9 @@ } if (RuntimeEnabledFeatures::Implements2FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "implements2StaticStringAttribute", V8TestInterface::implements2StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements2StaticStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implements2StaticStringAttribute", V8TestInterface::implements2StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements2StaticStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implements2StringAttribute", V8TestInterface::implements2StringAttributeAttributeGetterCallback, V8TestInterface::implements2StringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implements2StringAttribute", V8TestInterface::implements2StringAttributeAttributeGetterCallback, V8TestInterface::implements2StringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3524,7 +3524,7 @@ } if (RuntimeEnabledFeatures::ImplementsFeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "implementsRuntimeEnabledNodeAttribute", V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeGetterCallback, V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementsRuntimeEnabledNodeAttribute", V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeGetterCallback, V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3533,13 +3533,13 @@ } if (RuntimeEnabledFeatures::PartialFeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialCallWithExecutionContextLongAttribute", V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeGetterCallback, V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialCallWithExecutionContextLongAttribute", V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeGetterCallback, V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "partialLongAttribute", V8TestInterface::partialLongAttributeAttributeGetterCallback, V8TestInterface::partialLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialLongAttribute", V8TestInterface::partialLongAttributeAttributeGetterCallback, V8TestInterface::partialLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "partialPartialEnumTypeAttribute", V8TestInterface::partialPartialEnumTypeAttributeAttributeGetterCallback, V8TestInterface::partialPartialEnumTypeAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialPartialEnumTypeAttribute", V8TestInterface::partialPartialEnumTypeAttributeAttributeGetterCallback, V8TestInterface::partialPartialEnumTypeAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "partialStaticLongAttribute", V8TestInterface::partialStaticLongAttributeAttributeGetterCallback, V8TestInterface::partialStaticLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialStaticLongAttribute", V8TestInterface::partialStaticLongAttributeAttributeGetterCallback, V8TestInterface::partialStaticLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3626,45 +3626,45 @@ if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partial2SecureContextAttribute", V8TestInterface::partial2SecureContextAttributeAttributeGetterCallback, V8TestInterface::partial2SecureContextAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partial2SecureContextAttribute", V8TestInterface::partial2SecureContextAttributeAttributeGetterCallback, V8TestInterface::partial2SecureContextAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "partialSecureContextAttribute", V8TestInterface::partialSecureContextAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextAttribute", V8TestInterface::partialSecureContextAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "secureContextAttribute", V8TestInterface::secureContextAttributeAttributeGetterCallback, V8TestInterface::secureContextAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextAttribute", V8TestInterface::secureContextAttributeAttributeGetterCallback, V8TestInterface::secureContextAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (RuntimeEnabledFeatures::PartialFeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextLongAttribute", V8TestInterface::partialSecureContextLongAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextLongAttribute", V8TestInterface::partialSecureContextLongAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); } if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextRuntimeEnabledAttribute", V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextRuntimeEnabledAttribute", V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "secureContextRuntimeEnabledAttribute", V8TestInterface::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextRuntimeEnabledAttribute", V8TestInterface::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); } } if (executionContext && (executionContext->IsDocument())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "windowExposedAttribute", V8TestInterface::windowExposedAttributeAttributeGetterCallback, V8TestInterface::windowExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "windowExposedAttribute", V8TestInterface::windowExposedAttributeAttributeGetterCallback, V8TestInterface::windowExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWindowExposedAttribute", V8TestInterface::partialSecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWindowExposedAttribute", V8TestInterface::partialSecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "secureContextWindowExposedAttribute", V8TestInterface::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedAttribute", V8TestInterface::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); } @@ -3672,21 +3672,21 @@ } if (executionContext && (executionContext->IsWorkerGlobalScope())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "workerExposedAttribute", V8TestInterface::workerExposedAttributeAttributeGetterCallback, V8TestInterface::workerExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "workerExposedAttribute", V8TestInterface::workerExposedAttributeAttributeGetterCallback, V8TestInterface::workerExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWorkerExposedAttribute", V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWorkerExposedAttribute", V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "secureContextWorkerExposedAttribute", V8TestInterface::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedAttribute", V8TestInterface::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); }
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp index a1c4227..2da3f0ee 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
@@ -684,7 +684,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterface2Accessors[] = { - { "size", V8TestInterface2::sizeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "size", V8TestInterface2::sizeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterface2Methods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp index 5a289a9..8391d94 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
@@ -241,9 +241,9 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterface3Accessors[] = { - { "length", V8TestInterface3::lengthAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestInterface3::lengthAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyStringifierAttribute", V8TestInterface3::readonlyStringifierAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyStringifierAttribute", V8TestInterface3::readonlyStringifierAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterface3Methods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp index bf06681..91a2be2 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
@@ -551,9 +551,9 @@ #endif static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceCheckSecurityAccessors[] = { - { "readonlyLongAttribute", V8TestInterfaceCheckSecurity::readonlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyLongAttribute", V8TestInterfaceCheckSecurity::readonlyLongAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "longAttribute", V8TestInterfaceCheckSecurity::longAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::longAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "longAttribute", V8TestInterfaceCheckSecurity::longAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::longAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceCheckSecurityMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp index a4e89f5..a02eabc46 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
@@ -117,7 +117,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceDocumentAccessors[] = { - { "location", V8TestInterfaceDocument::locationAttributeGetterCallback, V8TestInterfaceDocument::locationAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "location", V8TestInterfaceDocument::locationAttributeGetterCallback, V8TestInterfaceDocument::locationAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static void installV8TestInterfaceDocumentTemplate(
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp index 5abc8b34..d8c232f1 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
@@ -130,9 +130,9 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceEventInitConstructorAccessors[] = { - { "readonlyStringAttribute", V8TestInterfaceEventInitConstructor::readonlyStringAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyStringAttribute", V8TestInterfaceEventInitConstructor::readonlyStringAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "isTrusted", V8TestInterfaceEventInitConstructor::isTrustedAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "isTrusted", V8TestInterfaceEventInitConstructor::isTrustedAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; void V8TestInterfaceEventInitConstructor::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp index a6a4f263..1596e79 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
@@ -381,9 +381,9 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceGarbageCollectedAccessors[] = { - { "attr1", V8TestInterfaceGarbageCollected::attr1AttributeGetterCallback, V8TestInterfaceGarbageCollected::attr1AttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "attr1", V8TestInterfaceGarbageCollected::attr1AttributeGetterCallback, V8TestInterfaceGarbageCollected::attr1AttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "size", V8TestInterfaceGarbageCollected::sizeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "size", V8TestInterfaceGarbageCollected::sizeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceGarbageCollectedMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp index 573b905a..545d219 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
@@ -408,20 +408,20 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceNodeAccessors[] = { - { "nodeName", V8TestInterfaceNode::nodeNameAttributeGetterCallback, V8TestInterfaceNode::nodeNameAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "nodeName", V8TestInterfaceNode::nodeNameAttributeGetterCallback, V8TestInterfaceNode::nodeNameAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "stringAttribute", V8TestInterfaceNode::stringAttributeAttributeGetterCallback, V8TestInterfaceNode::stringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "stringAttribute", V8TestInterfaceNode::stringAttributeAttributeGetterCallback, V8TestInterfaceNode::stringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "eventHandlerAttribute", V8TestInterfaceNode::eventHandlerAttributeAttributeGetterCallback, V8TestInterfaceNode::eventHandlerAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "eventHandlerAttribute", V8TestInterfaceNode::eventHandlerAttributeAttributeGetterCallback, V8TestInterfaceNode::eventHandlerAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, - { "reflectStringAttribute", V8TestInterfaceNode::reflectStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectStringAttribute", V8TestInterfaceNode::reflectStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectUrlStringAttribute", V8TestInterfaceNode::reflectUrlStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectUrlStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectUrlStringAttribute", V8TestInterfaceNode::reflectUrlStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectUrlStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceNodeMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp index 2e46618..3cf056d 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
@@ -289,9 +289,9 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceOriginTrialEnabledAccessors[] = { - { "doubleAttribute", V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceOriginTrialEnabledMethods[] = { @@ -351,11 +351,11 @@ if (RuntimeEnabledFeatures::FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "conditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "conditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticConditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticConditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "conditionalLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "conditionalLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template,
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp index 2c1a856..8a2d395 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
@@ -483,12 +483,12 @@ if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextAttribute", V8TestInterfaceSecureContext::secureContextAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextAttribute", V8TestInterfaceSecureContext::secureContextAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); } @@ -496,12 +496,12 @@ if (executionContext && (executionContext->IsDocument())) { if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWindowExposedAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); } @@ -510,12 +510,12 @@ if (executionContext && (executionContext->IsWorkerGlobalScope())) { if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWorkerExposedAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); }
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp index 90cfd355..7374765 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
@@ -241,13 +241,13 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestNodeAccessors[] = { - { "href", V8TestNode::hrefAttributeGetterCallback, V8TestNode::hrefAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "href", V8TestNode::hrefAttributeGetterCallback, V8TestNode::hrefAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "hrefThrows", V8TestNode::hrefThrowsAttributeGetterCallback, V8TestNode::hrefThrowsAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "hrefThrows", V8TestNode::hrefThrowsAttributeGetterCallback, V8TestNode::hrefThrowsAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "hrefCallWith", V8TestNode::hrefCallWithAttributeGetterCallback, V8TestNode::hrefCallWithAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "hrefCallWith", V8TestNode::hrefCallWithAttributeGetterCallback, V8TestNode::hrefCallWithAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "hrefByteString", V8TestNode::hrefByteStringAttributeGetterCallback, V8TestNode::hrefByteStringAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "hrefByteString", V8TestNode::hrefByteStringAttributeGetterCallback, V8TestNode::hrefByteStringAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; void V8TestNode::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp index 6529442..3b5ac64 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -13174,305 +13174,305 @@ #endif static const V8DOMConfiguration::AccessorConfiguration V8TestObjectAccessors[] = { - { "stringifierAttribute", V8TestObject::stringifierAttributeAttributeGetterCallback, V8TestObject::stringifierAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "stringifierAttribute", V8TestObject::stringifierAttributeAttributeGetterCallback, V8TestObject::stringifierAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyStringAttribute", V8TestObject::readonlyStringAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyStringAttribute", V8TestObject::readonlyStringAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyTestInterfaceEmptyAttribute", V8TestObject::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyTestInterfaceEmptyAttribute", V8TestObject::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyLongAttribute", V8TestObject::readonlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyLongAttribute", V8TestObject::readonlyLongAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "dateAttribute", V8TestObject::dateAttributeAttributeGetterCallback, V8TestObject::dateAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "dateAttribute", V8TestObject::dateAttributeAttributeGetterCallback, V8TestObject::dateAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "stringAttribute", V8TestObject::stringAttributeAttributeGetterCallback, V8TestObject::stringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "stringAttribute", V8TestObject::stringAttributeAttributeGetterCallback, V8TestObject::stringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "byteStringAttribute", V8TestObject::byteStringAttributeAttributeGetterCallback, V8TestObject::byteStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "byteStringAttribute", V8TestObject::byteStringAttributeAttributeGetterCallback, V8TestObject::byteStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "usvStringAttribute", V8TestObject::usvStringAttributeAttributeGetterCallback, V8TestObject::usvStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "usvStringAttribute", V8TestObject::usvStringAttributeAttributeGetterCallback, V8TestObject::usvStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "domTimeStampAttribute", V8TestObject::domTimeStampAttributeAttributeGetterCallback, V8TestObject::domTimeStampAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "domTimeStampAttribute", V8TestObject::domTimeStampAttributeAttributeGetterCallback, V8TestObject::domTimeStampAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "booleanAttribute", V8TestObject::booleanAttributeAttributeGetterCallback, V8TestObject::booleanAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "booleanAttribute", V8TestObject::booleanAttributeAttributeGetterCallback, V8TestObject::booleanAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "byteAttribute", V8TestObject::byteAttributeAttributeGetterCallback, V8TestObject::byteAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "byteAttribute", V8TestObject::byteAttributeAttributeGetterCallback, V8TestObject::byteAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "doubleAttribute", V8TestObject::doubleAttributeAttributeGetterCallback, V8TestObject::doubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestObject::doubleAttributeAttributeGetterCallback, V8TestObject::doubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "floatAttribute", V8TestObject::floatAttributeAttributeGetterCallback, V8TestObject::floatAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "floatAttribute", V8TestObject::floatAttributeAttributeGetterCallback, V8TestObject::floatAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "longAttribute", V8TestObject::longAttributeAttributeGetterCallback, V8TestObject::longAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "longAttribute", V8TestObject::longAttributeAttributeGetterCallback, V8TestObject::longAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "longLongAttribute", V8TestObject::longLongAttributeAttributeGetterCallback, V8TestObject::longLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "longLongAttribute", V8TestObject::longLongAttributeAttributeGetterCallback, V8TestObject::longLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "octetAttribute", V8TestObject::octetAttributeAttributeGetterCallback, V8TestObject::octetAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "octetAttribute", V8TestObject::octetAttributeAttributeGetterCallback, V8TestObject::octetAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "shortAttribute", V8TestObject::shortAttributeAttributeGetterCallback, V8TestObject::shortAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "shortAttribute", V8TestObject::shortAttributeAttributeGetterCallback, V8TestObject::shortAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleAttribute", V8TestObject::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleAttribute", V8TestObject::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedFloatAttribute", V8TestObject::unrestrictedFloatAttributeAttributeGetterCallback, V8TestObject::unrestrictedFloatAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedFloatAttribute", V8TestObject::unrestrictedFloatAttributeAttributeGetterCallback, V8TestObject::unrestrictedFloatAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unsignedLongAttribute", V8TestObject::unsignedLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unsignedLongAttribute", V8TestObject::unsignedLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unsignedLongLongAttribute", V8TestObject::unsignedLongLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unsignedLongLongAttribute", V8TestObject::unsignedLongLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unsignedShortAttribute", V8TestObject::unsignedShortAttributeAttributeGetterCallback, V8TestObject::unsignedShortAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unsignedShortAttribute", V8TestObject::unsignedShortAttributeAttributeGetterCallback, V8TestObject::unsignedShortAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceEmptyAttribute", V8TestObject::testInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceEmptyAttribute", V8TestObject::testInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testObjectAttribute", V8TestObject::testObjectAttributeAttributeGetterCallback, V8TestObject::testObjectAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testObjectAttribute", V8TestObject::testObjectAttributeAttributeGetterCallback, V8TestObject::testObjectAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "cssAttribute", V8TestObject::cssAttributeAttributeGetterCallback, V8TestObject::cssAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "cssAttribute", V8TestObject::cssAttributeAttributeGetterCallback, V8TestObject::cssAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "imeAttribute", V8TestObject::imeAttributeAttributeGetterCallback, V8TestObject::imeAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "imeAttribute", V8TestObject::imeAttributeAttributeGetterCallback, V8TestObject::imeAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "svgAttribute", V8TestObject::svgAttributeAttributeGetterCallback, V8TestObject::svgAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "svgAttribute", V8TestObject::svgAttributeAttributeGetterCallback, V8TestObject::svgAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "xmlAttribute", V8TestObject::xmlAttributeAttributeGetterCallback, V8TestObject::xmlAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "xmlAttribute", V8TestObject::xmlAttributeAttributeGetterCallback, V8TestObject::xmlAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "nodeFilterAttribute", V8TestObject::nodeFilterAttributeAttributeGetterCallback, V8TestObject::nodeFilterAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "nodeFilterAttribute", V8TestObject::nodeFilterAttributeAttributeGetterCallback, V8TestObject::nodeFilterAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "serializedScriptValueAttribute", V8TestObject::serializedScriptValueAttributeAttributeGetterCallback, V8TestObject::serializedScriptValueAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "serializedScriptValueAttribute", V8TestObject::serializedScriptValueAttributeAttributeGetterCallback, V8TestObject::serializedScriptValueAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "anyAttribute", V8TestObject::anyAttributeAttributeGetterCallback, V8TestObject::anyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "anyAttribute", V8TestObject::anyAttributeAttributeGetterCallback, V8TestObject::anyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "promiseAttribute", V8TestObject::promiseAttributeAttributeGetterCallback, V8TestObject::promiseAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "promiseAttribute", V8TestObject::promiseAttributeAttributeGetterCallback, V8TestObject::promiseAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "windowAttribute", V8TestObject::windowAttributeAttributeGetterCallback, V8TestObject::windowAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "windowAttribute", V8TestObject::windowAttributeAttributeGetterCallback, V8TestObject::windowAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "documentAttribute", V8TestObject::documentAttributeAttributeGetterCallback, V8TestObject::documentAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "documentAttribute", V8TestObject::documentAttributeAttributeGetterCallback, V8TestObject::documentAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "documentFragmentAttribute", V8TestObject::documentFragmentAttributeAttributeGetterCallback, V8TestObject::documentFragmentAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "documentFragmentAttribute", V8TestObject::documentFragmentAttributeAttributeGetterCallback, V8TestObject::documentFragmentAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "documentTypeAttribute", V8TestObject::documentTypeAttributeAttributeGetterCallback, V8TestObject::documentTypeAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "documentTypeAttribute", V8TestObject::documentTypeAttributeAttributeGetterCallback, V8TestObject::documentTypeAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "elementAttribute", V8TestObject::elementAttributeAttributeGetterCallback, V8TestObject::elementAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "elementAttribute", V8TestObject::elementAttributeAttributeGetterCallback, V8TestObject::elementAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "nodeAttribute", V8TestObject::nodeAttributeAttributeGetterCallback, V8TestObject::nodeAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "nodeAttribute", V8TestObject::nodeAttributeAttributeGetterCallback, V8TestObject::nodeAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "shadowRootAttribute", V8TestObject::shadowRootAttributeAttributeGetterCallback, V8TestObject::shadowRootAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "shadowRootAttribute", V8TestObject::shadowRootAttributeAttributeGetterCallback, V8TestObject::shadowRootAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "arrayBufferAttribute", V8TestObject::arrayBufferAttributeAttributeGetterCallback, V8TestObject::arrayBufferAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "arrayBufferAttribute", V8TestObject::arrayBufferAttributeAttributeGetterCallback, V8TestObject::arrayBufferAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "float32ArrayAttribute", V8TestObject::float32ArrayAttributeAttributeGetterCallback, V8TestObject::float32ArrayAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "float32ArrayAttribute", V8TestObject::float32ArrayAttributeAttributeGetterCallback, V8TestObject::float32ArrayAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "uint8ArrayAttribute", V8TestObject::uint8ArrayAttributeAttributeGetterCallback, V8TestObject::uint8ArrayAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "uint8ArrayAttribute", V8TestObject::uint8ArrayAttributeAttributeGetterCallback, V8TestObject::uint8ArrayAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "self", V8TestObject::selfAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "self", V8TestObject::selfAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyEventTargetAttribute", V8TestObject::readonlyEventTargetAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyEventTargetAttribute", V8TestObject::readonlyEventTargetAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyEventTargetOrNullAttribute", V8TestObject::readonlyEventTargetOrNullAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyEventTargetOrNullAttribute", V8TestObject::readonlyEventTargetOrNullAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "readonlyWindowAttribute", V8TestObject::readonlyWindowAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "readonlyWindowAttribute", V8TestObject::readonlyWindowAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "htmlCollectionAttribute", V8TestObject::htmlCollectionAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "htmlCollectionAttribute", V8TestObject::htmlCollectionAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "htmlElementAttribute", V8TestObject::htmlElementAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "htmlElementAttribute", V8TestObject::htmlElementAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "stringFrozenArrayAttribute", V8TestObject::stringFrozenArrayAttributeAttributeGetterCallback, V8TestObject::stringFrozenArrayAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "stringFrozenArrayAttribute", V8TestObject::stringFrozenArrayAttributeAttributeGetterCallback, V8TestObject::stringFrozenArrayAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceEmptyFrozenArrayAttribute", V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceEmptyFrozenArrayAttribute", V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "booleanOrNullAttribute", V8TestObject::booleanOrNullAttributeAttributeGetterCallback, V8TestObject::booleanOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "booleanOrNullAttribute", V8TestObject::booleanOrNullAttributeAttributeGetterCallback, V8TestObject::booleanOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "stringOrNullAttribute", V8TestObject::stringOrNullAttributeAttributeGetterCallback, V8TestObject::stringOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "stringOrNullAttribute", V8TestObject::stringOrNullAttributeAttributeGetterCallback, V8TestObject::stringOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "longOrNullAttribute", V8TestObject::longOrNullAttributeAttributeGetterCallback, V8TestObject::longOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "longOrNullAttribute", V8TestObject::longOrNullAttributeAttributeGetterCallback, V8TestObject::longOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceOrNullAttribute", V8TestObject::testInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::testInterfaceOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceOrNullAttribute", V8TestObject::testInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::testInterfaceOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testEnumAttribute", V8TestObject::testEnumAttributeAttributeGetterCallback, V8TestObject::testEnumAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testEnumAttribute", V8TestObject::testEnumAttributeAttributeGetterCallback, V8TestObject::testEnumAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testEnumOrNullAttribute", V8TestObject::testEnumOrNullAttributeAttributeGetterCallback, V8TestObject::testEnumOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testEnumOrNullAttribute", V8TestObject::testEnumOrNullAttributeAttributeGetterCallback, V8TestObject::testEnumOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestObject::staticStringAttributeAttributeGetterCallback, V8TestObject::staticStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestObject::staticStringAttributeAttributeGetterCallback, V8TestObject::staticStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticLongAttribute", V8TestObject::staticLongAttributeAttributeGetterCallback, V8TestObject::staticLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticLongAttribute", V8TestObject::staticLongAttributeAttributeGetterCallback, V8TestObject::staticLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "eventHandlerAttribute", V8TestObject::eventHandlerAttributeAttributeGetterCallback, V8TestObject::eventHandlerAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "eventHandlerAttribute", V8TestObject::eventHandlerAttributeAttributeGetterCallback, V8TestObject::eventHandlerAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "doubleOrStringAttribute", V8TestObject::doubleOrStringAttributeAttributeGetterCallback, V8TestObject::doubleOrStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "doubleOrStringAttribute", V8TestObject::doubleOrStringAttributeAttributeGetterCallback, V8TestObject::doubleOrStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "doubleOrStringOrNullAttribute", V8TestObject::doubleOrStringOrNullAttributeAttributeGetterCallback, V8TestObject::doubleOrStringOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "doubleOrStringOrNullAttribute", V8TestObject::doubleOrStringOrNullAttributeAttributeGetterCallback, V8TestObject::doubleOrStringOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "doubleOrNullStringAttribute", V8TestObject::doubleOrNullStringAttributeAttributeGetterCallback, V8TestObject::doubleOrNullStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "doubleOrNullStringAttribute", V8TestObject::doubleOrNullStringAttributeAttributeGetterCallback, V8TestObject::doubleOrNullStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "stringOrStringSequenceAttribute", V8TestObject::stringOrStringSequenceAttributeAttributeGetterCallback, V8TestObject::stringOrStringSequenceAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "stringOrStringSequenceAttribute", V8TestObject::stringOrStringSequenceAttributeAttributeGetterCallback, V8TestObject::stringOrStringSequenceAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testEnumOrDoubleAttribute", V8TestObject::testEnumOrDoubleAttributeAttributeGetterCallback, V8TestObject::testEnumOrDoubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testEnumOrDoubleAttribute", V8TestObject::testEnumOrDoubleAttributeAttributeGetterCallback, V8TestObject::testEnumOrDoubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleOrStringAttribute", V8TestObject::unrestrictedDoubleOrStringAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleOrStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleOrStringAttribute", V8TestObject::unrestrictedDoubleOrStringAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleOrStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "nestedUnionAtribute", V8TestObject::nestedUnionAtributeAttributeGetterCallback, V8TestObject::nestedUnionAtributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "nestedUnionAtribute", V8TestObject::nestedUnionAtributeAttributeGetterCallback, V8TestObject::nestedUnionAtributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "activityLoggingAccessForAllWorldsLongAttribute", V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "activityLoggingAccessForAllWorldsLongAttribute", V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "activityLoggingGetterForAllWorldsLongAttribute", V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "activityLoggingGetterForAllWorldsLongAttribute", V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "activityLoggingSetterForAllWorldsLongAttribute", V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "activityLoggingSetterForAllWorldsLongAttribute", V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "cachedAttributeAnyAttribute", V8TestObject::cachedAttributeAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeAnyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "cachedAttributeAnyAttribute", V8TestObject::cachedAttributeAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeAnyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "cachedArrayAttribute", V8TestObject::cachedArrayAttributeAttributeGetterCallback, V8TestObject::cachedArrayAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "cachedArrayAttribute", V8TestObject::cachedArrayAttributeAttributeGetterCallback, V8TestObject::cachedArrayAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "cachedStringOrNoneAttribute", V8TestObject::cachedStringOrNoneAttributeAttributeGetterCallback, V8TestObject::cachedStringOrNoneAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "cachedStringOrNoneAttribute", V8TestObject::cachedStringOrNoneAttributeAttributeGetterCallback, V8TestObject::cachedStringOrNoneAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "callWithExecutionContextAnyAttribute", V8TestObject::callWithExecutionContextAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAnyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "callWithExecutionContextAnyAttribute", V8TestObject::callWithExecutionContextAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAnyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "callWithScriptStateAnyAttribute", V8TestObject::callWithScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithScriptStateAnyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "callWithScriptStateAnyAttribute", V8TestObject::callWithScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithScriptStateAnyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "callWithExecutionContextAndScriptStateAnyAttribute", V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "callWithExecutionContextAndScriptStateAnyAttribute", V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "checkSecurityForNodeReadonlyDocumentAttribute", V8TestObject::checkSecurityForNodeReadonlyDocumentAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "checkSecurityForNodeReadonlyDocumentAttribute", V8TestObject::checkSecurityForNodeReadonlyDocumentAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "customObjectAttribute", V8TestObject::customObjectAttributeAttributeGetterCallback, V8TestObject::customObjectAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customObjectAttribute", V8TestObject::customObjectAttributeAttributeGetterCallback, V8TestObject::customObjectAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "customGetterLongAttribute", V8TestObject::customGetterLongAttributeAttributeGetterCallback, V8TestObject::customGetterLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customGetterLongAttribute", V8TestObject::customGetterLongAttributeAttributeGetterCallback, V8TestObject::customGetterLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "customGetterReadonlyObjectAttribute", V8TestObject::customGetterReadonlyObjectAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customGetterReadonlyObjectAttribute", V8TestObject::customGetterReadonlyObjectAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "customSetterLongAttribute", V8TestObject::customSetterLongAttributeAttributeGetterCallback, V8TestObject::customSetterLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customSetterLongAttribute", V8TestObject::customSetterLongAttributeAttributeGetterCallback, V8TestObject::customSetterLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "deprecatedLongAttribute", V8TestObject::deprecatedLongAttributeAttributeGetterCallback, V8TestObject::deprecatedLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "deprecatedLongAttribute", V8TestObject::deprecatedLongAttributeAttributeGetterCallback, V8TestObject::deprecatedLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "enforceRangeLongAttribute", V8TestObject::enforceRangeLongAttributeAttributeGetterCallback, V8TestObject::enforceRangeLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "enforceRangeLongAttribute", V8TestObject::enforceRangeLongAttributeAttributeGetterCallback, V8TestObject::enforceRangeLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "implementedAsLongAttribute", V8TestObject::implementedAsLongAttributeAttributeGetterCallback, V8TestObject::implementedAsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "implementedAsLongAttribute", V8TestObject::implementedAsLongAttributeAttributeGetterCallback, V8TestObject::implementedAsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "customImplementedAsLongAttribute", V8TestObject::customImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customImplementedAsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customImplementedAsLongAttribute", V8TestObject::customImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customImplementedAsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "customGetterImplementedAsLongAttribute", V8TestObject::customGetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customGetterImplementedAsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customGetterImplementedAsLongAttribute", V8TestObject::customGetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customGetterImplementedAsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "customSetterImplementedAsLongAttribute", V8TestObject::customSetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customSetterImplementedAsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "customSetterImplementedAsLongAttribute", V8TestObject::customSetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customSetterImplementedAsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "measureAsLongAttribute", V8TestObject::measureAsLongAttributeAttributeGetterCallback, V8TestObject::measureAsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "measureAsLongAttribute", V8TestObject::measureAsLongAttributeAttributeGetterCallback, V8TestObject::measureAsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "notEnumerableLongAttribute", V8TestObject::notEnumerableLongAttributeAttributeGetterCallback, V8TestObject::notEnumerableLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "notEnumerableLongAttribute", V8TestObject::notEnumerableLongAttributeAttributeGetterCallback, V8TestObject::notEnumerableLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, - { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, + { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, - { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, + { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, - { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, + { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, - { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, + { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, - { "location", V8TestObject::locationAttributeGetterCallback, V8TestObject::locationAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "location", V8TestObject::locationAttributeGetterCallback, V8TestObject::locationAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "locationWithException", V8TestObject::locationWithExceptionAttributeGetterCallback, V8TestObject::locationWithExceptionAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "locationWithException", V8TestObject::locationWithExceptionAttributeGetterCallback, V8TestObject::locationWithExceptionAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "locationWithCallWith", V8TestObject::locationWithCallWithAttributeGetterCallback, V8TestObject::locationWithCallWithAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "locationWithCallWith", V8TestObject::locationWithCallWithAttributeGetterCallback, V8TestObject::locationWithCallWithAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "locationByteString", V8TestObject::locationByteStringAttributeGetterCallback, V8TestObject::locationByteStringAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "locationByteString", V8TestObject::locationByteStringAttributeGetterCallback, V8TestObject::locationByteStringAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallbackForMainWorld, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallbackForMainWorld, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, - { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallback, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, + { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallbackForMainWorld, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kMainWorld }, + { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallback, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kNonMainWorlds }, - { "locationLegacyInterfaceTypeChecking", V8TestObject::locationLegacyInterfaceTypeCheckingAttributeGetterCallback, V8TestObject::locationLegacyInterfaceTypeCheckingAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "locationLegacyInterfaceTypeChecking", V8TestObject::locationLegacyInterfaceTypeCheckingAttributeGetterCallback, V8TestObject::locationLegacyInterfaceTypeCheckingAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "locationGarbageCollected", V8TestObject::locationGarbageCollectedAttributeGetterCallback, V8TestObject::locationGarbageCollectedAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "locationGarbageCollected", V8TestObject::locationGarbageCollectedAttributeGetterCallback, V8TestObject::locationGarbageCollectedAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "raisesExceptionLongAttribute", V8TestObject::raisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "raisesExceptionLongAttribute", V8TestObject::raisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "raisesExceptionGetterLongAttribute", V8TestObject::raisesExceptionGetterLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionGetterLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "raisesExceptionGetterLongAttribute", V8TestObject::raisesExceptionGetterLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionGetterLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "setterRaisesExceptionLongAttribute", V8TestObject::setterRaisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::setterRaisesExceptionLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "setterRaisesExceptionLongAttribute", V8TestObject::setterRaisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::setterRaisesExceptionLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "raisesExceptionTestInterfaceEmptyAttribute", V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "raisesExceptionTestInterfaceEmptyAttribute", V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "cachedAttributeRaisesExceptionGetterAnyAttribute", V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "cachedAttributeRaisesExceptionGetterAnyAttribute", V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectTestInterfaceAttribute", V8TestObject::reflectTestInterfaceAttributeAttributeGetterCallback, V8TestObject::reflectTestInterfaceAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectTestInterfaceAttribute", V8TestObject::reflectTestInterfaceAttributeAttributeGetterCallback, V8TestObject::reflectTestInterfaceAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectReflectedNameAttributeTestAttribute", V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeGetterCallback, V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectReflectedNameAttributeTestAttribute", V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeGetterCallback, V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectBooleanAttribute", V8TestObject::reflectBooleanAttributeAttributeGetterCallback, V8TestObject::reflectBooleanAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectBooleanAttribute", V8TestObject::reflectBooleanAttributeAttributeGetterCallback, V8TestObject::reflectBooleanAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectLongAttribute", V8TestObject::reflectLongAttributeAttributeGetterCallback, V8TestObject::reflectLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectLongAttribute", V8TestObject::reflectLongAttributeAttributeGetterCallback, V8TestObject::reflectLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectUnsignedShortAttribute", V8TestObject::reflectUnsignedShortAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedShortAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectUnsignedShortAttribute", V8TestObject::reflectUnsignedShortAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedShortAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectUnsignedLongAttribute", V8TestObject::reflectUnsignedLongAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectUnsignedLongAttribute", V8TestObject::reflectUnsignedLongAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "id", V8TestObject::idAttributeGetterCallback, V8TestObject::idAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "id", V8TestObject::idAttributeGetterCallback, V8TestObject::idAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "name", V8TestObject::nameAttributeGetterCallback, V8TestObject::nameAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "name", V8TestObject::nameAttributeGetterCallback, V8TestObject::nameAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "class", V8TestObject::classAttributeGetterCallback, V8TestObject::classAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "class", V8TestObject::classAttributeGetterCallback, V8TestObject::classAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectedId", V8TestObject::reflectedIdAttributeGetterCallback, V8TestObject::reflectedIdAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectedId", V8TestObject::reflectedIdAttributeGetterCallback, V8TestObject::reflectedIdAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectedName", V8TestObject::reflectedNameAttributeGetterCallback, V8TestObject::reflectedNameAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectedName", V8TestObject::reflectedNameAttributeGetterCallback, V8TestObject::reflectedNameAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "reflectedClass", V8TestObject::reflectedClassAttributeGetterCallback, V8TestObject::reflectedClassAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "reflectedClass", V8TestObject::reflectedClassAttributeGetterCallback, V8TestObject::reflectedClassAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "limitedToOnlyOneAttribute", V8TestObject::limitedToOnlyOneAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOneAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "limitedToOnlyOneAttribute", V8TestObject::limitedToOnlyOneAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOneAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "limitedToOnlyAttribute", V8TestObject::limitedToOnlyAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "limitedToOnlyAttribute", V8TestObject::limitedToOnlyAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "limitedToOnlyOtherAttribute", V8TestObject::limitedToOnlyOtherAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOtherAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "limitedToOnlyOtherAttribute", V8TestObject::limitedToOnlyOtherAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOtherAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "limitedWithMissingDefaultAttribute", V8TestObject::limitedWithMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithMissingDefaultAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "limitedWithMissingDefaultAttribute", V8TestObject::limitedWithMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithMissingDefaultAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "limitedWithInvalidMissingDefaultAttribute", V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "limitedWithInvalidMissingDefaultAttribute", V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "corsSettingAttribute", V8TestObject::corsSettingAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "corsSettingAttribute", V8TestObject::corsSettingAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "limitedWithEmptyMissingInvalidAttribute", V8TestObject::limitedWithEmptyMissingInvalidAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "limitedWithEmptyMissingInvalidAttribute", V8TestObject::limitedWithEmptyMissingInvalidAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "RuntimeCallStatsCounterAttribute", V8TestObject::RuntimeCallStatsCounterAttributeAttributeGetterCallback, V8TestObject::RuntimeCallStatsCounterAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "RuntimeCallStatsCounterAttribute", V8TestObject::RuntimeCallStatsCounterAttributeAttributeGetterCallback, V8TestObject::RuntimeCallStatsCounterAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "RuntimeCallStatsCounterReadOnlyAttribute", V8TestObject::RuntimeCallStatsCounterReadOnlyAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "RuntimeCallStatsCounterReadOnlyAttribute", V8TestObject::RuntimeCallStatsCounterReadOnlyAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "replaceableReadonlyLongAttribute", V8TestObject::replaceableReadonlyLongAttributeAttributeGetterCallback, V8TestObject::replaceableReadonlyLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "replaceableReadonlyLongAttribute", V8TestObject::replaceableReadonlyLongAttributeAttributeGetterCallback, V8TestObject::replaceableReadonlyLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "locationPutForwards", V8TestObject::locationPutForwardsAttributeGetterCallback, V8TestObject::locationPutForwardsAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "locationPutForwards", V8TestObject::locationPutForwardsAttributeGetterCallback, V8TestObject::locationPutForwardsAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "setterCallWithCurrentWindowAndEnteredWindowStringAttribute", V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "setterCallWithCurrentWindowAndEnteredWindowStringAttribute", V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "setterCallWithExecutionContextStringAttribute", V8TestObject::setterCallWithExecutionContextStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithExecutionContextStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "setterCallWithExecutionContextStringAttribute", V8TestObject::setterCallWithExecutionContextStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithExecutionContextStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "treatNullAsEmptyStringStringAttribute", V8TestObject::treatNullAsEmptyStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsEmptyStringStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "treatNullAsEmptyStringStringAttribute", V8TestObject::treatNullAsEmptyStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsEmptyStringStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "treatNullAsNullStringStringAttribute", V8TestObject::treatNullAsNullStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsNullStringStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "treatNullAsNullStringStringAttribute", V8TestObject::treatNullAsNullStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsNullStringStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingFloatAttribute", V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingFloatAttribute", V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingTestInterfaceAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingTestInterfaceAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingTestInterfaceOrNullAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingTestInterfaceOrNullAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unforgeableLongAttribute", V8TestObject::unforgeableLongAttributeAttributeGetterCallback, V8TestObject::unforgeableLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unforgeableLongAttribute", V8TestObject::unforgeableLongAttributeAttributeGetterCallback, V8TestObject::unforgeableLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "measuredLongAttribute", V8TestObject::measuredLongAttributeAttributeGetterCallback, V8TestObject::measuredLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "measuredLongAttribute", V8TestObject::measuredLongAttributeAttributeGetterCallback, V8TestObject::measuredLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "sameObjectAttribute", V8TestObject::sameObjectAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "sameObjectAttribute", V8TestObject::sameObjectAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "saveSameObjectAttribute", V8TestObject::saveSameObjectAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "saveSameObjectAttribute", V8TestObject::saveSameObjectAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticSaveSameObjectAttribute", V8TestObject::staticSaveSameObjectAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticSaveSameObjectAttribute", V8TestObject::staticSaveSameObjectAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unscopableLongAttribute", V8TestObject::unscopableLongAttributeAttributeGetterCallback, V8TestObject::unscopableLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unscopableLongAttribute", V8TestObject::unscopableLongAttributeAttributeGetterCallback, V8TestObject::unscopableLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceAttribute", V8TestObject::testInterfaceAttributeAttributeGetterCallback, V8TestObject::testInterfaceAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceAttribute", V8TestObject::testInterfaceAttributeAttributeGetterCallback, V8TestObject::testInterfaceAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceGarbageCollectedAttribute", V8TestObject::testInterfaceGarbageCollectedAttributeAttributeGetterCallback, V8TestObject::testInterfaceGarbageCollectedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceGarbageCollectedAttribute", V8TestObject::testInterfaceGarbageCollectedAttributeAttributeGetterCallback, V8TestObject::testInterfaceGarbageCollectedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceGarbageCollectedOrNullAttribute", V8TestObject::testInterfaceGarbageCollectedOrNullAttributeAttributeGetterCallback, V8TestObject::testInterfaceGarbageCollectedOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceGarbageCollectedOrNullAttribute", V8TestObject::testInterfaceGarbageCollectedOrNullAttributeAttributeGetterCallback, V8TestObject::testInterfaceGarbageCollectedOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "size", V8TestObject::sizeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "size", V8TestObject::sizeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestObjectMethods[] = { @@ -13793,9 +13793,9 @@ if (RuntimeEnabledFeatures::FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "runtimeEnabledLongAttribute", V8TestObject::runtimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::runtimeEnabledLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "runtimeEnabledLongAttribute", V8TestObject::runtimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::runtimeEnabledLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unscopableRuntimeEnabledLongAttribute", V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unscopableRuntimeEnabledLongAttribute", V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -13847,12 +13847,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, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds } + { "originTrialEnabledLongAttribute", V8TestObject::originTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::originTrialEnabledLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, 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, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds } + { "unscopableOriginTrialEnabledLongAttribute", V8TestObject::unscopableOriginTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::unscopableOriginTrialEnabledLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds } }; for (const auto& accessorConfig : accessorunscopableOriginTrialEnabledLongAttributeConfiguration) V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, interface, signature, accessorConfig);
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp index a4dd48b..9ac33b7 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
@@ -491,9 +491,9 @@ #endif static const V8DOMConfiguration::AccessorConfiguration V8TestTypedefsAccessors[] = { - { "uLongLongAttribute", V8TestTypedefs::uLongLongAttributeAttributeGetterCallback, V8TestTypedefs::uLongLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "uLongLongAttribute", V8TestTypedefs::uLongLongAttributeAttributeGetterCallback, V8TestTypedefs::uLongLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "domStringOrDoubleOrNullAttribute", V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeGetterCallback, V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "domStringOrDoubleOrNullAttribute", V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeGetterCallback, V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestTypedefsMethods[] = {
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInheritedLegacyUnenumerableNamedProperties.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInheritedLegacyUnenumerableNamedProperties.cpp index 81ffd02..edf2c59 100644 --- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInheritedLegacyUnenumerableNamedProperties.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInheritedLegacyUnenumerableNamedProperties.cpp
@@ -153,7 +153,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInheritedLegacyUnenumerableNamedPropertiesAccessors[] = { - { "longAttribute", V8TestInheritedLegacyUnenumerableNamedProperties::longAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "longAttribute", V8TestInheritedLegacyUnenumerableNamedProperties::longAttributeAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static void installV8TestInheritedLegacyUnenumerableNamedPropertiesTemplate(
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp index d6f58c22..5cae655 100644 --- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
@@ -920,21 +920,21 @@ #endif static const V8DOMConfiguration::AccessorConfiguration V8TestInterface5Accessors[] = { - { "testInterfaceAttribute", V8TestInterface5::testInterfaceAttributeAttributeGetterCallback, V8TestInterface5::testInterfaceAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceAttribute", V8TestInterface5::testInterfaceAttributeAttributeGetterCallback, V8TestInterface5::testInterfaceAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "doubleAttribute", V8TestInterface5::doubleAttributeAttributeGetterCallback, V8TestInterface5::doubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestInterface5::doubleAttributeAttributeGetterCallback, V8TestInterface5::doubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "floatAttribute", V8TestInterface5::floatAttributeAttributeGetterCallback, V8TestInterface5::floatAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "floatAttribute", V8TestInterface5::floatAttributeAttributeGetterCallback, V8TestInterface5::floatAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleAttribute", V8TestInterface5::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedDoubleAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleAttribute", V8TestInterface5::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedDoubleAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedFloatAttribute", V8TestInterface5::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedFloatAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedFloatAttribute", V8TestInterface5::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedFloatAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestInterface5::staticStringAttributeAttributeGetterCallback, V8TestInterface5::staticStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestInterface5::staticStringAttributeAttributeGetterCallback, V8TestInterface5::staticStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "length", V8TestInterface5::lengthAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestInterface5::lengthAttributeGetterCallback, nullptr, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "alwaysExposedAttribute", V8TestInterface5::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface5::alwaysExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "alwaysExposedAttribute", V8TestInterface5::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface5::alwaysExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterface5Methods[] = { @@ -1073,13 +1073,13 @@ if (executionContext && (executionContext->IsDocument())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "windowExposedAttribute", V8TestInterface5::windowExposedAttributeAttributeGetterCallback, V8TestInterface5::windowExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "windowExposedAttribute", V8TestInterface5::windowExposedAttributeAttributeGetterCallback, V8TestInterface5::windowExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); } if (executionContext && (executionContext->IsWorkerGlobalScope())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "workerExposedAttribute", V8TestInterface5::workerExposedAttributeAttributeGetterCallback, V8TestInterface5::workerExposedAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "workerExposedAttribute", V8TestInterface5::workerExposedAttributeAttributeGetterCallback, V8TestInterface5::workerExposedAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors(isolate, world, v8::Local<v8::Object>(), prototypeObject, interfaceObject, signature, accessor_configurations, WTF_ARRAY_LENGTH(accessor_configurations)); }
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp index 393c7c3..4ec3673 100644 --- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
@@ -504,12 +504,12 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate); ALLOW_UNUSED_LOCAL(signature); static const V8DOMConfiguration::AccessorConfiguration accessorpartial4LongAttributeConfiguration[] = { - { "partial4LongAttribute", V8TestInterfacePartial::partial4LongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4LongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds } + { "partial4LongAttribute", V8TestInterfacePartial::partial4LongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4LongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds } }; for (const auto& accessorConfig : accessorpartial4LongAttributeConfiguration) V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, interface, signature, accessorConfig); static const V8DOMConfiguration::AccessorConfiguration accessorpartial4StaticLongAttributeConfiguration[] = { - { "partial4StaticLongAttribute", V8TestInterfacePartial::partial4StaticLongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4StaticLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds } + { "partial4StaticLongAttribute", V8TestInterfacePartial::partial4StaticLongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4StaticLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds } }; for (const auto& accessorConfig : accessorpartial4StaticLongAttributeConfiguration) V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, interface, signature, accessorConfig);
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp index e85750f..d8820043 100644 --- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestSubObject.cpp
@@ -149,9 +149,9 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestSubObjectAccessors[] = { - { "unforgeableStringAttribute", V8TestSubObject::unforgeableStringAttributeAttributeGetterCallback, V8TestSubObject::unforgeableStringAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unforgeableStringAttribute", V8TestSubObject::unforgeableStringAttributeAttributeGetterCallback, V8TestSubObject::unforgeableStringAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, - { "unforgeableLongAttribute", V8TestSubObject::unforgeableLongAttributeAttributeGetterCallback, V8TestSubObject::unforgeableLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, + { "unforgeableLongAttribute", V8TestSubObject::unforgeableLongAttributeAttributeGetterCallback, V8TestSubObject::unforgeableLongAttributeAttributeSetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kAllWorlds }, }; static void installV8TestSubObjectTemplate(
diff --git a/third_party/WebKit/Source/build/scripts/core/css/OWNERS b/third_party/WebKit/Source/build/scripts/core/css/OWNERS index 8e83a81..fd344bc 100644 --- a/third_party/WebKit/Source/build/scripts/core/css/OWNERS +++ b/third_party/WebKit/Source/build/scripts/core/css/OWNERS
@@ -1,5 +1,5 @@ set noparent -file://third_party/WebKit/Source/core/OWNERS +file://third_party/WebKit/Source/core/css/OWNERS nainar@chromium.org shend@chromium.org
diff --git a/third_party/WebKit/Source/build/scripts/core/css/make_css_property_metadata.py b/third_party/WebKit/Source/build/scripts/core/css/make_css_property_metadata.py index 12e5c10..ff61bec 100755 --- a/third_party/WebKit/Source/build/scripts/core/css/make_css_property_metadata.py +++ b/third_party/WebKit/Source/build/scripts/core/css/make_css_property_metadata.py
@@ -30,7 +30,6 @@ return { 'input_files': self._input_files, 'properties_including_aliases': self._properties_including_aliases, - 'switches': [('is_property', 'IsProperty')], 'first_enum_value': self._first_enum_value, }
diff --git a/third_party/WebKit/Source/build/scripts/core/css/properties/make_css_property_api_headers.py b/third_party/WebKit/Source/build/scripts/core/css/properties/make_css_property_api_headers.py index 1082750..a6629071 100755 --- a/third_party/WebKit/Source/build/scripts/core/css/properties/make_css_property_api_headers.py +++ b/third_party/WebKit/Source/build/scripts/core/css/properties/make_css_property_api_headers.py
@@ -56,13 +56,7 @@ return { 'input_files': self._input_files, 'api_classname': api_classname, - 'methods_for_class': property_['api_methods'], - 'is_interpolable': property_['interpolable'], - 'is_inherited': property_['inherited'], - 'separator': property_['separator'], - 'is_repeated': True if property_['separator'] else False, - 'is_descriptor': property_['is_descriptor'], - 'supports_percentage': 'Percent' in property_['typedom_types'], + 'property': property_, } return generate_property_api_h
diff --git a/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPI.h.tmpl b/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPI.h.tmpl index 094c88e..a215838 100644 --- a/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPI.h.tmpl +++ b/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPI.h.tmpl
@@ -27,16 +27,21 @@ constexpr CSSPropertyAPI() {} #endif + // Parses and consumes a longhand property value from the token range. + // Returns nullptr if the input is invalid. virtual const CSSValue* ParseSingleValue(CSSPropertyID, CSSParserTokenRange&, const CSSParserContext&, const CSSParserLocalContext&) const; + // Parses and consumes entire shorthand value from the token range and adds + // all constituent parsed longhand properties to the 'properties' set. + // Returns false if the input is invalid. virtual bool ParseShorthand(CSSPropertyID, bool important, CSSParserTokenRange&, const CSSParserContext&, const CSSParserLocalContext&, - HeapVector<CSSProperty, 256>&) const; + HeapVector<CSSProperty, 256>& properties) const; virtual bool IsInterpolable() const { return false; } virtual bool IsInherited() const { return false; } @@ -47,6 +52,7 @@ } virtual bool IsDescriptor() const { return false; } virtual bool SupportsPercentage() const { return false; } + virtual bool IsProperty() const { return true; } }; {% for api_class_data in api_classes_by_property_id %}
diff --git a/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPISubclass.h.tmpl b/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPISubclass.h.tmpl index 50c29d3..045356cb 100644 --- a/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPISubclass.h.tmpl +++ b/third_party/WebKit/Source/build/scripts/core/css/properties/templates/CSSPropertyAPISubclass.h.tmpl
@@ -22,26 +22,29 @@ class {{api_classname}} : public CSSPropertyAPI { public: - {% for api_method in methods_for_class %} + {% for api_method in property.api_methods %} {{api_method.return_type}} {{api_method.name}}{{api_method.parameters}} const override; {% endfor %} - {% if is_interpolable %} + {% if property.interpolable %} bool IsInterpolable() const override { return true; } {% endif %} - {% if is_inherited %} + {% if property.inherited %} bool IsInherited() const override { return true; } {% endif %} - {% if is_repeated %} + {% if property.separator != None %} bool IsRepeated() const override { return true; } - char RepetitionSeparator() const override { return '{{separator}}'; } + char RepetitionSeparator() const override { return '{{property.separator}}'; } {% endif %} - {% if is_descriptor %} + {% if property.is_descriptor %} bool IsDescriptor() const override { return true; } {% endif %} - {% if supports_percentage %} + {% if 'Percent' in property.typedom_types %} bool SupportsPercentage() const override { return true; } {% endif %} + {% if not property.is_property %} + bool IsProperty() const override { return false; } + {% endif %} }; } // namespace blink
diff --git a/third_party/WebKit/Source/build/scripts/core/css/templates/CSSPropertyMetadata.cpp.tmpl b/third_party/WebKit/Source/build/scripts/core/css/templates/CSSPropertyMetadata.cpp.tmpl index 062743b..c1b3e63 100644 --- a/third_party/WebKit/Source/build/scripts/core/css/templates/CSSPropertyMetadata.cpp.tmpl +++ b/third_party/WebKit/Source/build/scripts/core/css/templates/CSSPropertyMetadata.cpp.tmpl
@@ -9,28 +9,6 @@ #include <bitset> namespace blink { -{% for flag, function_name in switches %} - -bool CSSPropertyMetadata::{{function_name}}(CSSPropertyID unresolvedProperty) { - switch (unresolvedProperty) { - case CSSPropertyInvalid: - NOTREACHED(); - return false; - {% for property in properties_including_aliases if property[flag] %} - case {{property.property_id}}: - {% endfor %} - {% if function_name == "IsProperty" %} - case CSSPropertyVariable: - case CSSPropertyApplyAtRule: - {% endif %} - return true; - default: - return false; - } -} -{% endfor %} - - bool CSSPropertyMetadata::IsEnabledProperty(CSSPropertyID unresolvedProperty) { CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty); static std::bitset<numCSSProperties>* enabledProperties = []() {
diff --git a/third_party/WebKit/Source/build/scripts/templates/ElementTypeHelpers.h.tmpl b/third_party/WebKit/Source/build/scripts/templates/ElementTypeHelpers.h.tmpl index 58d2d9bc..a8b3b98 100644 --- a/third_party/WebKit/Source/build/scripts/templates/ElementTypeHelpers.h.tmpl +++ b/third_party/WebKit/Source/build/scripts/templates/ElementTypeHelpers.h.tmpl
@@ -50,6 +50,7 @@ {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} #define to{{tag.interface}}(x) blink::ToElement<blink::{{tag.interface}}>(x) +#define To{{tag.interface}}OrNull(x) blink::ToElementOrNull<blink::{{tag.interface}}>(x) #define to{{tag.interface}}OrDie(x) blink::ToElementOrDie<blink::{{tag.interface}}>(x) {% endfor %}
diff --git a/third_party/WebKit/Source/core/CoreInitializer.h b/third_party/WebKit/Source/core/CoreInitializer.h index 5bd277b..2c99ec4 100644 --- a/third_party/WebKit/Source/core/CoreInitializer.h +++ b/third_party/WebKit/Source/core/CoreInitializer.h
@@ -50,6 +50,7 @@ class ShadowRoot; class WebCredentialManagerClient; class WebFrameClient; +class WebLayerTreeView; class WebMediaPlayer; class WebMediaPlayerClient; class WebMediaPlayerSource; @@ -102,7 +103,8 @@ WebFrameClient*, HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) const = 0; + WebMediaPlayerClient*, + WebLayerTreeView*) const = 0; virtual WebRemotePlaybackClient* CreateWebRemotePlaybackClient( HTMLMediaElement&) const = 0;
diff --git a/third_party/WebKit/Source/core/css/CSSProperty.cpp b/third_party/WebKit/Source/core/css/CSSProperty.cpp index 3b7a354..2b657233 100644 --- a/third_party/WebKit/Source/core/css/CSSProperty.cpp +++ b/third_party/WebKit/Source/core/css/CSSProperty.cpp
@@ -21,6 +21,7 @@ #include "core/css/CSSProperty.h" #include "core/StylePropertyShorthand.h" +#include "core/css/properties/CSSPropertyAPI.h" #include "core/style/ComputedStyleConstants.h" namespace blink { @@ -308,7 +309,7 @@ if (property_id == CSSPropertyVariable) return false; - if (!CSSPropertyMetadata::IsProperty(property_id)) + if (!CSSPropertyAPI::Get(property_id).IsProperty()) return false; // all shorthand spec says:
diff --git a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp index 566c7c5..67f3c7b 100644 --- a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp +++ b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
@@ -230,7 +230,7 @@ DCHECK(CSSPropertyMetadata::IsEnabledProperty(property_id)); // All shorthand properties should have been expanded at parse time. DCHECK(property_set_.IsDescriptorContext() || - (CSSPropertyMetadata::IsProperty(property_id) && + (CSSPropertyAPI::Get(property_id).IsProperty() && !isShorthandProperty(property_id))); DCHECK(!property_set_.IsDescriptorContext() || CSSPropertyAPI::Get(property_id).IsDescriptor());
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp index 25f92fa..32a46cd 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp
@@ -15,6 +15,7 @@ #include "core/css/StyleColor.h" #include "core/css/parser/CSSParserIdioms.h" #include "core/css/parser/CSSPropertyParser.h" +#include "core/css/properties/CSSPropertyAPI.h" #include "core/html/parser/HTMLParserIdioms.h" #include "platform/RuntimeEnabledFeatures.h" #include "platform/wtf/text/StringToNumber.h" @@ -1001,7 +1002,7 @@ return nullptr; // Descriptors do not support css wide keywords. - if (!CSSPropertyMetadata::IsProperty(property_id)) + if (!CSSPropertyAPI::Get(property_id).IsProperty()) return nullptr; }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp index b3a2727..dc54b42 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -237,7 +237,7 @@ CSSPropertyID property = resolveCSSPropertyID(unresolved_property); const StylePropertyShorthand& shorthand = shorthandForProperty(property); if (!shorthand.length()) { - if (!CSSPropertyMetadata::IsProperty(unresolved_property)) + if (!CSSPropertyAPI::Get(property).IsProperty()) return false; AddParsedProperty(property, CSSPropertyInvalid, *value, important); } else {
diff --git a/third_party/WebKit/Source/core/css/properties/README.md b/third_party/WebKit/Source/core/css/properties/README.md index 315fc64..6a7d9f5 100644 --- a/third_party/WebKit/Source/core/css/properties/README.md +++ b/third_party/WebKit/Source/core/css/properties/README.md
@@ -3,43 +3,48 @@ This directory contains implementations for CSS property APIs, as well as Utils files containing functions commonly used by the property APIs. -A CSS property API represents a single CSS property or a group of CSS -properties, and defines the logic for that property or group of properties. +[TOC] + +## Overview + +CSSPropertyAPI is the base class which all property implementations are derived +from. It contains all the methods that can be called on a property API, and a +default implementation for each. The .cpp implementation files for +CSSPropertyAPI are split between the generated code (CSSPropertyAPI.cpp) and the +hand written code (CSSPropertyAPIBaseCustom.cpp). + +The methods that are overriden from the base class by a property API depends on +the functionality required by that property. Methods may have a working default +implementation in the base class, or may assert that this default implementation +is not reached. + +A derived CSS property API (CSSPropertyAPI<Property/GroupName\>) represents a +single CSS property or a group of CSS properties that share implementation logic. +Property groups can be determined from [CSSProperties.json5](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/css/CSSProperties.json5). +Properties that are a part of a group define the group class name as 'api_class' +here. Examples: * A single property API: the `CSSPropertyAPILineHeight` class is used only by the `line-height` property -* A group of properties that share logic: the `CSSPropertyAPIImage` class - is shared by the `border-image-source` and `list-style-image` properties. +* A group of properties that share logic: the `CSSPropertyAPIImageSource` + class is shared by the `border-image-source` and + `-webkit-mask-box-image-source` properties. -Status (March 16 2017): Eventually, all logic pertaining to a single property -should be found only within its CSS property API. Currently, the code base is in -a transitional state and property specific logic is still scattered around the -code base. See Project Ribbon -[tracking bug](https://bugs.chromium.org/p/chromium/issues/detail?id=545324) and -[design doc](https://docs.google.com/document/d/1ywjUTmnxF5FXlpUTuLpint0w4TdSsjJzdWJqmhNzlss/edit#heading=h.1ckibme4i78b) -for details of progress. +## Special property APIs -## Methods implemented by each property API +### Shorthand properties -Methods implemented by a property API depends on whether it is a longhand or shorthand property. -They implement different methods because a shorthand property will cease to exist after parsing is done. -It will not be relevant in subsequent operations, except for serialization. +Shorthand properties only exist in the context of parsing and serialization. +Therefore only a subset of methods may be implemented by shorthand properties, +e.g. ParseShorthand. -Each <LonghandProperty> has a property API called CSSPropertyAPI<LonghandProperty> and each <ShorthandProperty> -has a property API called CSSShorthandPropertyAPI<ShorthandProperty>. +Shorthand property APIs are named like CSSShorthandPropertyAPI<ShorthandProperty\> -1. CSSPropertyAPI<LonghandProperty> - Aims to implement all property-specific logic for this longhand property. Currently(7/6/2017) it implements: - 1. static const CSSValue* ParseSingleValue(CSSPropertyID, CSSParserTokenRange&, const CSSParserContext&, const CSSParserLocalContext&) const - - Parses a single CSS property and returns the corresponding CSSValue. If the input is invalid it returns nullptr. +### Descriptors -2. CSSShorthandPropertyAPI<ShorthandProperty> - Aims to implement all property-specific logic for this shorthand property. Currently(7/6/2017) it implements: - 1. static bool ParseShorthand(CSSPropertyID,bool important, CSSParserTokenRange&, const CSSParserContext*, HeapVector<CSSProperty, 256>& properties); - - Returns true if the property can be parsed as a shorthand. It also adds parsed properties to the `properties` set. - +TODO(rjwright): write this section ## How to add a new property API @@ -47,7 +52,7 @@ `CSSPropertyAPI<Property/GroupName>.cpp` 2. Implement the property API in the .cpp file 1. Add `#include "core/css/properties/CSSPropertyAPI<Property/GroupName>.h"` - (this will be a generated file) + (this will be a generated file). 2. Implement the required methods on the API. 3. If logic is required by multiple property APIs you may need to create a new Utils file. @@ -70,3 +75,14 @@ using [CSSPropertyFontUtils.cpp](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/css/properties/CSSPropertyFontUtils.h) to access shared font logic. + +## Status + +Eventually, all logic pertaining to a single property will be found only +within its CSS property API where possible. + +Currently (September 1 2017) the code base is in a transitional state and property +specific logic is still scattered around the code base. See Project Ribbon +[tracking bug](https://bugs.chromium.org/p/chromium/issues/detail?id=545324) and +[design doc](https://docs.google.com/document/d/1ywjUTmnxF5FXlpUTuLpint0w4TdSsjJzdWJqmhNzlss/edit#heading=h.1ckibme4i78b) +for details of progress.
diff --git a/third_party/WebKit/Source/core/dom/AccessibleNode.h b/third_party/WebKit/Source/core/dom/AccessibleNode.h index 5f95f8c..da4c05ac 100644 --- a/third_party/WebKit/Source/core/dom/AccessibleNode.h +++ b/third_party/WebKit/Source/core/dom/AccessibleNode.h
@@ -332,6 +332,11 @@ ExecutionContext* GetExecutionContext() const override; DEFINE_ATTRIBUTE_EVENT_LISTENER(accessibleclick); + DEFINE_ATTRIBUTE_EVENT_LISTENER(accessiblecontextmenu); + DEFINE_ATTRIBUTE_EVENT_LISTENER(accessibledecrement); + DEFINE_ATTRIBUTE_EVENT_LISTENER(accessiblefocus); + DEFINE_ATTRIBUTE_EVENT_LISTENER(accessibleincrement); + DEFINE_ATTRIBUTE_EVENT_LISTENER(accessiblescrollintoview); DECLARE_VIRTUAL_TRACE();
diff --git a/third_party/WebKit/Source/core/dom/AccessibleNode.idl b/third_party/WebKit/Source/core/dom/AccessibleNode.idl index 1de11290..a7a5523 100644 --- a/third_party/WebKit/Source/core/dom/AccessibleNode.idl +++ b/third_party/WebKit/Source/core/dom/AccessibleNode.idl
@@ -57,4 +57,9 @@ attribute DOMString? valueText; attribute EventHandler onaccessibleclick; + attribute EventHandler onaccessiblecontextmenu; + attribute EventHandler onaccessibledecrement; + attribute EventHandler onaccessiblefocus; + attribute EventHandler onaccessibleincrement; + attribute EventHandler onaccessiblescrollintoview; };
diff --git a/third_party/WebKit/Source/core/dom/BUILD.gn b/third_party/WebKit/Source/core/dom/BUILD.gn index f2b64fa..491ac12 100644 --- a/third_party/WebKit/Source/core/dom/BUILD.gn +++ b/third_party/WebKit/Source/core/dom/BUILD.gn
@@ -351,8 +351,8 @@ "events/EventQueue.h", "events/EventTarget.cpp", "events/EventTarget.h", - "events/GenericEventQueue.cpp", - "events/GenericEventQueue.h", + "events/MediaElementEventQueue.cpp", + "events/MediaElementEventQueue.h", "events/ScopedEventQueue.cpp", "events/ScopedEventQueue.h", "events/TreeScopeEventContext.cpp",
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp index 4695fde..6717d6c 100644 --- a/third_party/WebKit/Source/core/dom/Document.cpp +++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -204,6 +204,7 @@ #include "core/page/FrameTree.h" #include "core/page/Page.h" #include "core/page/PointerLockController.h" +#include "core/page/scrolling/OverscrollController.h" #include "core/page/scrolling/RootScrollerController.h" #include "core/page/scrolling/ScrollStateCallback.h" #include "core/page/scrolling/ScrollingCoordinator.h" @@ -2018,6 +2019,21 @@ ScrollSnapType snap_type = overflow_style->GetScrollSnapType(); ScrollBehavior scroll_behavior = document_element_style->GetScrollBehavior(); + EScrollBoundaryBehavior scroll_boundary_behavior_x = + overflow_style->ScrollBoundaryBehaviorX(); + EScrollBoundaryBehavior scroll_boundary_behavior_y = + overflow_style->ScrollBoundaryBehaviorY(); + using ScrollBoundaryBehaviorType = + WebScrollBoundaryBehavior::ScrollBoundaryBehaviorType; + if (RuntimeEnabledFeatures::CSSScrollBoundaryBehaviorEnabled() && + IsInMainFrame()) { + GetPage()->GetOverscrollController().SetScrollBoundaryBehavior( + WebScrollBoundaryBehavior( + static_cast<ScrollBoundaryBehaviorType>(scroll_boundary_behavior_x), + static_cast<ScrollBoundaryBehaviorType>( + scroll_boundary_behavior_y))); + } + RefPtr<ComputedStyle> viewport_style; if (change == kForce || !GetLayoutViewItem().Style()) { viewport_style = StyleResolver::StyleForViewport(*this); @@ -2035,7 +2051,9 @@ old_style.HasNormalColumnGap() == column_gap_normal && old_style.ColumnGap() == column_gap && old_style.GetScrollSnapType() == snap_type && - old_style.GetScrollBehavior() == scroll_behavior) { + old_style.GetScrollBehavior() == scroll_behavior && + old_style.ScrollBoundaryBehaviorX() == scroll_boundary_behavior_x && + old_style.ScrollBoundaryBehaviorY() == scroll_boundary_behavior_y) { return; } viewport_style = ComputedStyle::Clone(old_style); @@ -2054,6 +2072,8 @@ viewport_style->SetColumnGap(column_gap); viewport_style->SetScrollSnapType(snap_type); viewport_style->SetScrollBehavior(scroll_behavior); + viewport_style->SetScrollBoundaryBehaviorX(scroll_boundary_behavior_x); + viewport_style->SetScrollBoundaryBehaviorY(scroll_boundary_behavior_y); GetLayoutViewItem().SetStyle(viewport_style); SetupFontBuilder(*viewport_style); }
diff --git a/third_party/WebKit/Source/core/dom/Element.h b/third_party/WebKit/Source/core/dom/Element.h index 43e96cf..f8c3af6 100644 --- a/third_party/WebKit/Source/core/dom/Element.h +++ b/third_party/WebKit/Source/core/dom/Element.h
@@ -1036,6 +1036,26 @@ } template <typename T> +inline T* ToElementOrNull(Node& node) { + return IsElementOfType<const T>(node) ? static_cast<T*>(&node) : nullptr; +} +template <typename T> +inline T* ToElementOrNull(Node* node) { + return (node && IsElementOfType<const T>(*node)) ? static_cast<T*>(node) + : nullptr; +} +template <typename T> +inline const T* ToElementOrNull(const Node& node) { + return IsElementOfType<const T>(node) ? static_cast<const T*>(&node) + : nullptr; +} +template <typename T> +inline const T* ToElementOrNull(const Node* node) { + return (node && IsElementOfType<const T>(*node)) ? static_cast<const T*>(node) + : nullptr; +} + +template <typename T> inline T& ToElementOrDie(Node& node) { CHECK(IsElementOfType<const T>(node)); return static_cast<T&>(node);
diff --git a/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp b/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp index 6b175eb..4681be9 100644 --- a/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp +++ b/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp
@@ -217,9 +217,7 @@ // s and abort these steps." [spec text] if (module_script->IsErrored()) { ScriptValue error = GetError(module_script); - ScriptModule::ReportException(script_state_.Get(), error.V8Value(), - module_script->BaseURL().GetString(), - module_script->StartPosition()); + ScriptModule::ReportException(script_state_.Get(), error.V8Value()); return; }
diff --git a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp index bf4fc7b..c241695 100644 --- a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp +++ b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
@@ -21,7 +21,7 @@ // TODO(haraken): Optimize the mapping from TaskTypes to task runners. switch (type) { case TaskType::kTimer: - return frame ? frame->FrameScheduler()->TimerTaskRunner() + return frame ? frame->FrameScheduler()->ThrottleableTaskRunner() : Platform::Current()->CurrentThread()->GetWebTaskRunner(); case TaskType::kUnspecedLoading: case TaskType::kNetworking: @@ -36,12 +36,9 @@ // or provide a mechanism that web pages can opt-out it if throttling is not // desirable. case TaskType::kDatabaseAccess: - return frame ? frame->FrameScheduler()->SuspendableTaskRunner() - : Platform::Current()->CurrentThread()->GetWebTaskRunner(); case TaskType::kDOMManipulation: case TaskType::kHistoryTraversal: case TaskType::kEmbed: - case TaskType::kMediaElementEvent: case TaskType::kCanvasBlobSerialization: case TaskType::kRemoteEvent: case TaskType::kWebSocket: @@ -54,18 +51,21 @@ case TaskType::kWebGL: case TaskType::kUnspecedTimer: case TaskType::kMiscPlatformAPI: - // TODO(altimin): Move all these tasks to suspendable or unthrottled - // task runner. - return frame - ? frame->FrameScheduler()->UnthrottledButBlockableTaskRunner() - : Platform::Current()->CurrentThread()->GetWebTaskRunner(); - // PostedMessage can be used for navigation, so we shouldn't block it + // TODO(altimin): Move appropriate tasks to throttleable task queue. + return frame ? frame->FrameScheduler()->DeferrableTaskRunner() + : Platform::Current()->CurrentThread()->GetWebTaskRunner(); + // PostedMessage can be used for navigation, so we shouldn't defer it // when expecting a user gesture. case TaskType::kPostedMessage: // UserInteraction tasks should be run even when expecting a user gesture. case TaskType::kUserInteraction: + // Media events should not be deferred to ensure that media playback is + // smooth. + case TaskType::kMediaElementEvent: + return frame ? frame->FrameScheduler()->PausableTaskRunner() + : Platform::Current()->CurrentThread()->GetWebTaskRunner(); case TaskType::kUnthrottled: - return frame ? frame->FrameScheduler()->UnthrottledTaskRunner() + return frame ? frame->FrameScheduler()->UnpausableTaskRunner() : Platform::Current()->CurrentThread()->GetWebTaskRunner(); } NOTREACHED();
diff --git a/third_party/WebKit/Source/core/dom/events/GenericEventQueue.cpp b/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.cpp similarity index 68% rename from third_party/WebKit/Source/core/dom/events/GenericEventQueue.cpp rename to third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.cpp index 07928f3..a17d317c 100644 --- a/third_party/WebKit/Source/core/dom/events/GenericEventQueue.cpp +++ b/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.cpp
@@ -23,41 +23,45 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "core/dom/events/GenericEventQueue.h" +#include "core/dom/events/MediaElementEventQueue.h" +#include "core/dom/TaskRunnerHelper.h" #include "core/dom/events/Event.h" #include "core/probe/CoreProbes.h" #include "platform/instrumentation/tracing/TraceEvent.h" namespace blink { -GenericEventQueue* GenericEventQueue::Create(EventTarget* owner) { - return new GenericEventQueue(owner); +MediaElementEventQueue* MediaElementEventQueue::Create(EventTarget* owner) { + return new MediaElementEventQueue(owner); } -GenericEventQueue::GenericEventQueue(EventTarget* owner) +MediaElementEventQueue::MediaElementEventQueue(EventTarget* owner) : owner_(owner), - timer_(this, &GenericEventQueue::TimerFired), + timer_(TaskRunnerHelper::Get(TaskType::kMediaElementEvent, + owner->GetExecutionContext()), + this, + &MediaElementEventQueue::TimerFired), is_closed_(false) {} -GenericEventQueue::~GenericEventQueue() {} +MediaElementEventQueue::~MediaElementEventQueue() {} -DEFINE_TRACE(GenericEventQueue) { +DEFINE_TRACE(MediaElementEventQueue) { visitor->Trace(owner_); visitor->Trace(pending_events_); EventQueue::Trace(visitor); } -bool GenericEventQueue::EnqueueEvent(const WebTraceLocation& from_here, - Event* event) { +bool MediaElementEventQueue::EnqueueEvent(const WebTraceLocation& from_here, + Event* event) { if (is_closed_) return false; if (event->target() == owner_) event->SetTarget(nullptr); - TRACE_EVENT_ASYNC_BEGIN1("event", "GenericEventQueue:enqueueEvent", event, - "type", event->type().Ascii()); + TRACE_EVENT_ASYNC_BEGIN1("event", "MediaElementEventQueue:enqueueEvent", + event, "type", event->type().Ascii()); EventTarget* target = event->target() ? event->target() : owner_.Get(); probe::AsyncTaskScheduled(target->GetExecutionContext(), event->type(), event); @@ -69,15 +73,15 @@ return true; } -bool GenericEventQueue::CancelEvent(Event* event) { +bool MediaElementEventQueue::CancelEvent(Event* event) { bool found = pending_events_.Contains(event); if (found) { EventTarget* target = event->target() ? event->target() : owner_.Get(); probe::AsyncTaskCanceled(target->GetExecutionContext(), event); pending_events_.erase(pending_events_.Find(event)); - TRACE_EVENT_ASYNC_END2("event", "GenericEventQueue:enqueueEvent", event, - "type", event->type().Ascii(), "status", + TRACE_EVENT_ASYNC_END2("event", "MediaElementEventQueue:enqueueEvent", + event, "type", event->type().Ascii(), "status", "cancelled"); } @@ -87,7 +91,7 @@ return found; } -void GenericEventQueue::TimerFired(TimerBase*) { +void MediaElementEventQueue::TimerFired(TimerBase*) { DCHECK(!timer_.IsActive()); DCHECK(!pending_events_.IsEmpty()); @@ -99,26 +103,26 @@ EventTarget* target = event->target() ? event->target() : owner_.Get(); CString type(event->type().Ascii()); probe::AsyncTask async_task(target->GetExecutionContext(), event); - TRACE_EVENT_ASYNC_STEP_INTO1("event", "GenericEventQueue:enqueueEvent", + TRACE_EVENT_ASYNC_STEP_INTO1("event", "MediaElementEventQueue:enqueueEvent", event, "dispatch", "type", type); target->DispatchEvent(pending_event); - TRACE_EVENT_ASYNC_END1("event", "GenericEventQueue:enqueueEvent", event, - "type", type); + TRACE_EVENT_ASYNC_END1("event", "MediaElementEventQueue:enqueueEvent", + event, "type", type); } } -void GenericEventQueue::Close() { +void MediaElementEventQueue::Close() { is_closed_ = true; CancelAllEvents(); } -void GenericEventQueue::CancelAllEvents() { +void MediaElementEventQueue::CancelAllEvents() { timer_.Stop(); for (const auto& pending_event : pending_events_) { Event* event = pending_event.Get(); - TRACE_EVENT_ASYNC_END2("event", "GenericEventQueue:enqueueEvent", event, - "type", event->type().Ascii(), "status", + TRACE_EVENT_ASYNC_END2("event", "MediaElementEventQueue:enqueueEvent", + event, "type", event->type().Ascii(), "status", "cancelled"); EventTarget* target = event->target() ? event->target() : owner_.Get(); probe::AsyncTaskCanceled(target->GetExecutionContext(), event); @@ -126,7 +130,7 @@ pending_events_.clear(); } -bool GenericEventQueue::HasPendingEvents() const { +bool MediaElementEventQueue::HasPendingEvents() const { return pending_events_.size(); }
diff --git a/third_party/WebKit/Source/core/dom/events/GenericEventQueue.h b/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.h similarity index 82% rename from third_party/WebKit/Source/core/dom/events/GenericEventQueue.h rename to third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.h index aa4530c6..6ffdae6 100644 --- a/third_party/WebKit/Source/core/dom/events/GenericEventQueue.h +++ b/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.h
@@ -23,8 +23,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef GenericEventQueue_h -#define GenericEventQueue_h +#ifndef MediaElementEventQueue_h +#define MediaElementEventQueue_h #include "core/CoreExport.h" #include "core/dom/events/EventQueue.h" @@ -36,10 +36,12 @@ namespace blink { -class CORE_EXPORT GenericEventQueue final : public EventQueue { +// Queue for events originating in MediaElement and having +// "media element event" task type according to the spec. +class CORE_EXPORT MediaElementEventQueue final : public EventQueue { public: - static GenericEventQueue* Create(EventTarget*); - ~GenericEventQueue() override; + static MediaElementEventQueue* Create(EventTarget*); + ~MediaElementEventQueue() override; // EventQueue DECLARE_VIRTUAL_TRACE(); @@ -51,12 +53,12 @@ bool HasPendingEvents() const; private: - explicit GenericEventQueue(EventTarget*); + explicit MediaElementEventQueue(EventTarget*); void TimerFired(TimerBase*); Member<EventTarget> owner_; HeapVector<Member<Event>> pending_events_; - Timer<GenericEventQueue> timer_; + TaskRunnerTimer<MediaElementEventQueue> timer_; bool is_closed_; };
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp index 1004b72a..7e51ab3 100644 --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -342,7 +342,8 @@ BackwardsTextBuffer string; string.PushRange(suffix_string.Data(), suffix_string.Size()); - SimplifiedBackwardsTextIteratorAlgorithm<Strategy> it(start, end); + SimplifiedBackwardsTextIteratorAlgorithm<Strategy> it( + EphemeralRangeTemplate<Strategy>(start, end)); int remaining_length = 0; unsigned next = 0; bool need_more_context = false; @@ -415,7 +416,8 @@ BackwardsTextBuffer prefix_string; if (RequiresContextForWordBoundary(CharacterAfter(c))) { SimplifiedBackwardsTextIteratorAlgorithm<Strategy> backwards_iterator( - PositionTemplate<Strategy>::FirstPositionInNode(d), start); + EphemeralRangeTemplate<Strategy>( + PositionTemplate<Strategy>::FirstPositionInNode(d), start)); while (!backwards_iterator.AtEnd()) { backwards_iterator.CopyTextTo(&prefix_string); int context_start_index = StartOfLastWordBoundaryContext(
diff --git a/third_party/WebKit/Source/core/editing/iterators/BackwardsCharacterIterator.cpp b/third_party/WebKit/Source/core/editing/iterators/BackwardsCharacterIterator.cpp index 765c471..151bb2e 100644 --- a/third_party/WebKit/Source/core/editing/iterators/BackwardsCharacterIterator.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/BackwardsCharacterIterator.cpp
@@ -37,7 +37,7 @@ : offset_(0), run_offset_(0), at_break_(true), - text_iterator_(range.StartPosition(), range.EndPosition(), behavior) { + text_iterator_(range, behavior) { while (!AtEnd() && !text_iterator_.length()) text_iterator_.Advance(); }
diff --git a/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp b/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp index 5160fc443..c21a969 100644 --- a/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp
@@ -331,10 +331,11 @@ if (buffer.NeedsMoreContext()) { for (SimplifiedBackwardsTextIteratorAlgorithm<Strategy> backwards_iterator( - PositionTemplate<Strategy>::FirstPositionInNode( - *it.OwnerDocument()), - PositionTemplate<Strategy>(it.CurrentContainer(), - it.StartOffset())); + EphemeralRangeTemplate<Strategy>( + PositionTemplate<Strategy>::FirstPositionInNode( + *it.OwnerDocument()), + PositionTemplate<Strategy>(it.CurrentContainer(), + it.StartOffset()))); !backwards_iterator.AtEnd(); backwards_iterator.Advance()) { BackwardsTextBuffer characters; backwards_iterator.CopyTextTo(&characters);
diff --git a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp index 9e84c9f..500e8c02 100644 --- a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.cpp
@@ -59,8 +59,7 @@ template <typename Strategy> SimplifiedBackwardsTextIteratorAlgorithm<Strategy>:: SimplifiedBackwardsTextIteratorAlgorithm( - const PositionTemplate<Strategy>& start, - const PositionTemplate<Strategy>& end, + const EphemeralRangeTemplate<Strategy>& range, const TextIteratorBehavior& behavior) : node_(nullptr), offset_(0), @@ -86,12 +85,12 @@ behavior == TextIteratorBehavior::Builder().SetStopsOnFormControls(true).Build()); - Node* start_node = start.AnchorNode(); + Node* start_node = range.StartPosition().AnchorNode(); if (!start_node) return; - Node* end_node = end.AnchorNode(); - int start_offset = start.ComputeEditingOffset(); - int end_offset = end.ComputeEditingOffset(); + Node* end_node = range.EndPosition().AnchorNode(); + int start_offset = range.StartPosition().ComputeEditingOffset(); + int end_offset = range.EndPosition().ComputeEditingOffset(); Init(start_node, end_node, start_offset, end_offset); }
diff --git a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.h b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.h index df652b1..f6fb836 100644 --- a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.h +++ b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIterator.h
@@ -26,6 +26,7 @@ #ifndef SimplifiedBackwardsTextIterator_h #define SimplifiedBackwardsTextIterator_h +#include "core/editing/EphemeralRange.h" #include "core/editing/Position.h" #include "core/editing/iterators/BackwardsTextBuffer.h" #include "core/editing/iterators/FullyClippedStateStack.h" @@ -45,8 +46,7 @@ public: SimplifiedBackwardsTextIteratorAlgorithm( - const PositionTemplate<Strategy>& start, - const PositionTemplate<Strategy>& end, + const EphemeralRangeTemplate<Strategy>&, const TextIteratorBehavior& = TextIteratorBehavior()); bool AtEnd() const { return !position_node_ || should_stop_; }
diff --git a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIteratorTest.cpp b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIteratorTest.cpp index 62a75c5..40bd799 100644 --- a/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIteratorTest.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/SimplifiedBackwardsTextIteratorTest.cpp
@@ -18,8 +18,7 @@ const EphemeralRangeTemplate<Strategy> range = EphemeralRangeTemplate<Strategy>::RangeOfContents(element); BackwardsTextBuffer buffer; - for (SimplifiedBackwardsTextIteratorAlgorithm<Strategy> it( - range.StartPosition(), range.EndPosition()); + for (SimplifiedBackwardsTextIteratorAlgorithm<Strategy> it(range); !it.AtEnd(); it.Advance()) { it.CopyTextTo(&buffer); } @@ -29,8 +28,8 @@ TEST_F(SimplifiedBackwardsTextIteratorTest, Basic) { SetBodyContent("<p> [(3)]678</p>"); const Element* const sample = GetDocument().QuerySelector("p"); - SimplifiedBackwardsTextIterator iterator(Position(sample->firstChild(), 0), - Position(sample->firstChild(), 9)); + SimplifiedBackwardsTextIterator iterator(EphemeralRange( + Position(sample->firstChild(), 0), Position(sample->firstChild(), 9))); // TODO(editing-dev): |SimplifiedBackwardsTextIterator| should not account // collapsed whitespace (http://crbug.com/760428) EXPECT_EQ(9, iterator.length()) @@ -60,8 +59,8 @@ "<style>p::first-letter {font-size: 200%}</style>" "<p> [(3)]678</p>"); const Element* const sample = GetDocument().QuerySelector("p"); - SimplifiedBackwardsTextIterator iterator(Position(sample->firstChild(), 0), - Position(sample->firstChild(), 9)); + SimplifiedBackwardsTextIterator iterator(EphemeralRange( + Position(sample->firstChild(), 0), Position(sample->firstChild(), 9))); EXPECT_EQ(3, iterator.length()); EXPECT_EQ(Position(sample->firstChild(), 6), iterator.StartPosition()); EXPECT_EQ(Position(sample->firstChild(), 9), iterator.EndPosition()); @@ -126,8 +125,7 @@ EphemeralRangeTemplate<EditingStrategy> range1( EphemeralRangeTemplate<EditingStrategy>::RangeOfContents(*host)); - SimplifiedBackwardsTextIteratorAlgorithm<EditingStrategy> back_iter1( - range1.StartPosition(), range1.EndPosition()); + SimplifiedBackwardsTextIteratorAlgorithm<EditingStrategy> back_iter1(range1); const char* message1 = "|backIter1| should emit 'one' and 'two' in reverse order."; EXPECT_EQ('o', back_iter1.CharacterAt(0)) << message1; @@ -142,7 +140,7 @@ EphemeralRangeTemplate<EditingInFlatTreeStrategy>::RangeOfContents( *host)); SimplifiedBackwardsTextIteratorAlgorithm<EditingInFlatTreeStrategy> - back_iter2(range2.StartPosition(), range2.EndPosition()); + back_iter2(range2); const char* message2 = "|backIter2| should emit 'three ', 'two', ' ', 'one' and ' zero' in " "reverse order."; @@ -185,8 +183,7 @@ EphemeralRangeTemplate<EditingStrategy> range1( EphemeralRangeTemplate<EditingStrategy>::RangeOfContents(*host)); - SimplifiedBackwardsTextIteratorAlgorithm<EditingStrategy> back_iter1( - range1.StartPosition(), range1.EndPosition()); + SimplifiedBackwardsTextIteratorAlgorithm<EditingStrategy> back_iter1(range1); BackwardsTextBuffer output1; back_iter1.CopyTextTo(&output1, 0, 2); EXPECT_EQ("wo", String(output1.Data(), output1.Size())) @@ -206,7 +203,7 @@ EphemeralRangeTemplate<EditingInFlatTreeStrategy>::RangeOfContents( *host)); SimplifiedBackwardsTextIteratorAlgorithm<EditingInFlatTreeStrategy> - back_iter2(range2.StartPosition(), range2.EndPosition()); + back_iter2(range2); BackwardsTextBuffer output2; back_iter2.CopyTextTo(&output2, 0, 2); EXPECT_EQ("ro", String(output2.Data(), output2.Size())) @@ -249,8 +246,7 @@ ' ', 0xD80C, 0xDD40, 0xD80C, 0xDD41, '.'}; EphemeralRange range(EphemeralRange::RangeOfContents(GetDocument())); - SimplifiedBackwardsTextIterator iter(range.StartPosition(), - range.EndPosition()); + SimplifiedBackwardsTextIterator iter(range); BackwardsTextBuffer buffer; EXPECT_EQ(1, iter.CopyTextTo(&buffer, 0, 1)) << "Should emit 1 UChar for '.'.";
diff --git a/third_party/WebKit/Source/core/events/EventTypeNames.json5 b/third_party/WebKit/Source/core/events/EventTypeNames.json5 index e50d894..8f0c487 100644 --- a/third_party/WebKit/Source/core/events/EventTypeNames.json5 +++ b/third_party/WebKit/Source/core/events/EventTypeNames.json5
@@ -18,6 +18,11 @@ "abort", "abortpayment", "accessibleclick", + "accessiblecontextmenu", + "accessibledecrement", + "accessiblefocus", + "accessibleincrement", + "accessiblescrollintoview", "activate", "active", "addsourcebuffer",
diff --git a/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp b/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp index f9f68788..57f24336 100644 --- a/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp +++ b/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp
@@ -814,7 +814,8 @@ std::unique_ptr<WebMediaPlayer> LocalFrameClientImpl::CreateWebMediaPlayer( HTMLMediaElement& html_media_element, const WebMediaPlayerSource& source, - WebMediaPlayerClient* client) { + WebMediaPlayerClient* client, + WebLayerTreeView* layer_tree_view) { WebLocalFrameImpl* web_frame = WebLocalFrameImpl::FromFrame(html_media_element.GetDocument().GetFrame()); @@ -822,7 +823,7 @@ return nullptr; return CoreInitializer::GetInstance().CreateWebMediaPlayer( - web_frame->Client(), html_media_element, source, client); + web_frame->Client(), html_media_element, source, client, layer_tree_view); } WebRemotePlaybackClient* LocalFrameClientImpl::CreateWebRemotePlaybackClient(
diff --git a/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.h b/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.h index 4e8327b..e91878d 100644 --- a/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.h +++ b/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.h
@@ -166,7 +166,8 @@ std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) override; + WebMediaPlayerClient*, + WebLayerTreeView*) override; WebRemotePlaybackClient* CreateWebRemotePlaybackClient( HTMLMediaElement&) override; void DidChangeScrollOffset() override;
diff --git a/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp index bebc60c..b451f9d 100644 --- a/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp
@@ -222,18 +222,19 @@ return; } - WebCORS::HTTPHeaderSet exposed_headers; + WebHTTPHeaderSet exposed_headers; WebCORS::ExtractCorsExposedHeaderNamesList(WrappedResourceResponse(response), exposed_headers); - WebCORS::HTTPHeaderSet blocked_headers; + WebHTTPHeaderSet blocked_headers; for (const auto& header : response.HttpHeaderFields()) { if (FetchUtils::IsForbiddenResponseHeaderName(header.key) || (!WebCORS::IsOnAccessControlResponseHeaderWhitelist(header.key) && - !exposed_headers.Contains(header.key))) - blocked_headers.insert(header.key); + exposed_headers.find(header.key.Ascii().data()) == + exposed_headers.end())) + blocked_headers.insert(header.key.Ascii().data()); } - if (blocked_headers.IsEmpty()) { + if (blocked_headers.empty()) { // Use the original ResourceResponse. client_->DidReceiveResponse(WrappedResourceResponse(response)); return; @@ -242,7 +243,7 @@ // If there are blocked headers, copy the response so we can remove them. WebURLResponse validated_response = WrappedResourceResponse(response); for (const auto& header : blocked_headers) - validated_response.ClearHTTPHeaderField(header); + validated_response.ClearHTTPHeaderField(WebString::FromASCII(header)); client_->DidReceiveResponse(validated_response); }
diff --git a/third_party/WebKit/Source/core/exported/WebFrameTest.cpp b/third_party/WebKit/Source/core/exported/WebFrameTest.cpp index 8686685b..2ff225fd 100644 --- a/third_party/WebKit/Source/core/exported/WebFrameTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebFrameTest.cpp
@@ -10021,11 +10021,12 @@ class OverscrollWebViewClient : public FrameTestHelpers::TestWebViewClient { public: - MOCK_METHOD4(DidOverscroll, + MOCK_METHOD5(DidOverscroll, void(const WebFloatSize&, const WebFloatSize&, const WebFloatPoint&, - const WebFloatSize&)); + const WebFloatSize&, + const WebScrollBoundaryBehavior&)); }; typedef std::pair<bool, blink::WebGestureDevice> WebFrameOverscrollTestParam; @@ -10102,38 +10103,42 @@ // scrollUpdate. ScrollBegin(&web_view_helper, -300, -316); EXPECT_CALL(client, DidOverscroll(WebFloatSize(8, 16), WebFloatSize(8, 16), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, -308, -316); Mock::VerifyAndClearExpectations(&client); EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, 13), WebFloatSize(8, 29), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, -13); Mock::VerifyAndClearExpectations(&client); EXPECT_CALL(client, DidOverscroll(WebFloatSize(20, 13), WebFloatSize(28, 42), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, -20, -13); Mock::VerifyAndClearExpectations(&client); // Overscroll is not reported. - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 0, 1); Mock::VerifyAndClearExpectations(&client); - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 1, 0); Mock::VerifyAndClearExpectations(&client); // Overscroll is reported. EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, -701), WebFloatSize(0, -701), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, 1000); Mock::VerifyAndClearExpectations(&client); // Overscroll is not reported. - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollEnd(&web_view_helper); Mock::VerifyAndClearExpectations(&client); } @@ -10151,7 +10156,7 @@ ScrollBegin(&web_view_helper, 0, -316); // Scroll the Div to the end. - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 0, -316); Mock::VerifyAndClearExpectations(&client); @@ -10160,7 +10165,8 @@ // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled. EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, 100), WebFloatSize(0, 100), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, -100); ScrollUpdate(&web_view_helper, 0, -100); Mock::VerifyAndClearExpectations(&client); @@ -10170,18 +10176,19 @@ // the bug, crbug.com/589320. // Page scrolls vertically, but over-scrolls horizontally. // EXPECT_CALL(client, didOverscroll(WebFloatSize(-100, 0), WebFloatSize(-100, - // 0), WebFloatPoint(100, 100), WebFloatSize())); + // 0), WebFloatPoint(100, 100), WebFloatSize(), WebScrollBoundaryBehavior())); // ScrollUpdate(&webViewHelper, 100, 50); // Mock::VerifyAndClearExpectations(&client); // Scrolling up, Overscroll is not reported. - // EXPECT_CALL(client, didOverscroll(_, _, _, _)).Times(0); + // EXPECT_CALL(client, didOverscroll(_, _, _, _, _)).Times(0); // ScrollUpdate(&webViewHelper, 0, -50); // Mock::VerifyAndClearExpectations(&client); // Page scrolls horizontally, but over-scrolls vertically. // EXPECT_CALL(client, didOverscroll(WebFloatSize(0, 100), WebFloatSize(0, - // 100), WebFloatPoint(100, 100), WebFloatSize())); + // 100), WebFloatPoint(100, 100), WebFloatSize(), + // WebScrollBoundaryBehavior())); // ScrollUpdate(&webViewHelper, -100, -100); // Mock::VerifyAndClearExpectations(&client); } @@ -10198,7 +10205,7 @@ ScrollBegin(&web_view_helper, 0, -316); // Scroll the Div to the end. - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 0, -316); Mock::VerifyAndClearExpectations(&client); @@ -10207,7 +10214,8 @@ // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled. EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, 50), WebFloatSize(0, 50), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, -150); Mock::VerifyAndClearExpectations(&client); } @@ -10224,7 +10232,7 @@ ScrollBegin(&web_view_helper, 0, -320); // Scroll the IFrame to the end. - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); // This scroll will fully scroll the iframe but will be consumed before being // counted as overscroll. @@ -10240,7 +10248,8 @@ // Now On Scrolling IFrame, scroll is bubbled and root layer is over-scrolled. EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, 50), WebFloatSize(0, 50), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, -150); Mock::VerifyAndClearExpectations(&client); @@ -10262,29 +10271,33 @@ // we go back to viewport coordinates it becomes (99, 99). ScrollBegin(&web_view_helper, 0, 30); EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, -30), WebFloatSize(0, -30), - WebFloatPoint(99, 99), WebFloatSize())); + WebFloatPoint(99, 99), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, 30); Mock::VerifyAndClearExpectations(&client); EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, -30), WebFloatSize(0, -60), - WebFloatPoint(99, 99), WebFloatSize())); + WebFloatPoint(99, 99), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, 30); Mock::VerifyAndClearExpectations(&client); EXPECT_CALL(client, DidOverscroll(WebFloatSize(-30, -30), WebFloatSize(-30, -90), - WebFloatPoint(99, 99), WebFloatSize())); + WebFloatPoint(99, 99), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 30, 30); Mock::VerifyAndClearExpectations(&client); EXPECT_CALL(client, DidOverscroll(WebFloatSize(-30, 0), WebFloatSize(-60, -90), - WebFloatPoint(99, 99), WebFloatSize())); + WebFloatPoint(99, 99), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 30, 0); Mock::VerifyAndClearExpectations(&client); // Overscroll is not reported. - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollEnd(&web_view_helper); Mock::VerifyAndClearExpectations(&client); } @@ -10301,55 +10314,57 @@ ScrollBegin(&web_view_helper, 10, 10); EXPECT_CALL(client, DidOverscroll(WebFloatSize(-10, -10), WebFloatSize(-10, -10), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 10, 10); Mock::VerifyAndClearExpectations(&client); EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, -0.10), WebFloatSize(-10, -10.10), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0, 0.10); Mock::VerifyAndClearExpectations(&client); EXPECT_CALL(client, DidOverscroll(WebFloatSize(-0.10, 0), WebFloatSize(-10.10, -10.10), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); ScrollUpdate(&web_view_helper, 0.10, 0); Mock::VerifyAndClearExpectations(&client); // For residual values overscrollDelta should be reset and didOverscroll // shouldn't be called. - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 0, 0.09); Mock::VerifyAndClearExpectations(&client); - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 0.09, 0.09); Mock::VerifyAndClearExpectations(&client); - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 0.09, 0); Mock::VerifyAndClearExpectations(&client); - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, 0, -0.09); Mock::VerifyAndClearExpectations(&client); - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, -0.09, -0.09); Mock::VerifyAndClearExpectations(&client); - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollUpdate(&web_view_helper, -0.09, 0); Mock::VerifyAndClearExpectations(&client); - EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0); + EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0); ScrollEnd(&web_view_helper); Mock::VerifyAndClearExpectations(&client); } -TEST_P(WebFrameOverscrollTest, - ScrollBoundaryBehaviorOnBodyDoesNotPreventOverscroll) { +TEST_P(WebFrameOverscrollTest, ScrollBoundaryBehaviorAffectsDidOverscroll) { OverscrollWebViewClient client; RegisterMockedHttpURLLoad("overscroll/overscroll.html"); FrameTestHelpers::WebViewHelper web_view_helper; @@ -10362,12 +10377,93 @@ web_view_helper.WebView()->MainFrame()->ToWebLocalFrame(); mainFrame->ExecuteScript( WebScriptSource(WebString("document.body.style=" + "'scroll-boundary-behavior: auto;'"))); + + ScrollBegin(&web_view_helper, 100, 116); + EXPECT_CALL( + client, + DidOverscroll(WebFloatSize(-100, -100), WebFloatSize(-100, -100), + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior( + WebScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeAuto))); + ScrollUpdate(&web_view_helper, 100, 100); + Mock::VerifyAndClearExpectations(&client); + + mainFrame->ExecuteScript( + WebScriptSource(WebString("document.body.style=" "'scroll-boundary-behavior: contain;'"))); - ScrollBegin(&web_view_helper, 100, 100); - EXPECT_CALL(client, - DidOverscroll(WebFloatSize(-100, -100), WebFloatSize(-100, -100), - WebFloatPoint(100, 100), WebFloatSize())); + ScrollBegin(&web_view_helper, 100, 116); + EXPECT_CALL( + client, + DidOverscroll(WebFloatSize(-100, -100), WebFloatSize(-200, -200), + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior( + WebScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeContain))); + ScrollUpdate(&web_view_helper, 100, 100); + Mock::VerifyAndClearExpectations(&client); + + mainFrame->ExecuteScript( + WebScriptSource(WebString("document.body.style=" + "'scroll-boundary-behavior: none;'"))); + + ScrollBegin(&web_view_helper, 100, 116); + EXPECT_CALL( + client, + DidOverscroll(WebFloatSize(-100, -100), WebFloatSize(-300, -300), + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior( + WebScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeNone))); + ScrollUpdate(&web_view_helper, 100, 100); + Mock::VerifyAndClearExpectations(&client); +} + +TEST_P(WebFrameOverscrollTest, OnlyMainFrameScrollBoundaryBehaviorHasEffect) { + OverscrollWebViewClient client; + RegisterMockedHttpURLLoad("overscroll/iframe-overscroll.html"); + RegisterMockedHttpURLLoad("overscroll/scrollable-iframe.html"); + FrameTestHelpers::WebViewHelper web_view_helper; + web_view_helper.InitializeAndLoad( + base_url_ + "overscroll/iframe-overscroll.html", nullptr, &client, + nullptr, ConfigureAndroid); + web_view_helper.Resize(WebSize(200, 200)); + + WebLocalFrame* mainFrame = + web_view_helper.WebView()->MainFrame()->ToWebLocalFrame(); + mainFrame->ExecuteScript( + WebScriptSource(WebString("document.body.style=" + "'scroll-boundary-behavior: auto;'"))); + WebLocalFrame* subframe = + web_view_helper.WebView()->MainFrame()->FirstChild()->ToWebLocalFrame(); + subframe->ExecuteScript( + WebScriptSource(WebString("document.body.style=" + "'scroll-boundary-behavior: none;'"))); + + ScrollBegin(&web_view_helper, 100, 116); + EXPECT_CALL( + client, + DidOverscroll(WebFloatSize(-100, -100), WebFloatSize(-100, -100), + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior( + WebScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeAuto))); + ScrollUpdate(&web_view_helper, 100, 100); + Mock::VerifyAndClearExpectations(&client); + + mainFrame->ExecuteScript( + WebScriptSource(WebString("document.body.style=" + "'scroll-boundary-behavior: contain;'"))); + + EXPECT_CALL( + client, + DidOverscroll(WebFloatSize(-100, -100), WebFloatSize(-200, -200), + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior( + WebScrollBoundaryBehavior::ScrollBoundaryBehaviorType:: + kScrollBoundaryBehaviorTypeContain))); ScrollUpdate(&web_view_helper, 100, 100); Mock::VerifyAndClearExpectations(&client); }
diff --git a/third_party/WebKit/Source/core/exported/WebViewImpl.cpp b/third_party/WebKit/Source/core/exported/WebViewImpl.cpp index 5cbf3f3d..827581a 100644 --- a/third_party/WebKit/Source/core/exported/WebViewImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebViewImpl.cpp
@@ -148,7 +148,6 @@ #include "public/platform/WebTextInputInfo.h" #include "public/platform/WebURLRequest.h" #include "public/platform/WebVector.h" -#include "public/web/WebActiveWheelFlingParameters.h" #include "public/web/WebAutofillClient.h" #include "public/web/WebConsoleMessage.h" #include "public/web/WebElement.h" @@ -353,8 +352,6 @@ root_graphics_layer_(nullptr), visual_viewport_container_layer_(nullptr), matches_heuristics_for_gpu_rasterization_(false), - fling_modifier_(0), - fling_source_device_(kWebGestureDeviceUninitialized), fullscreen_controller_(FullscreenController::Create(this)), base_background_color_(Color::kWhite), base_background_color_override_enabled_(false), @@ -553,104 +550,14 @@ LocalFrame& main_frame, const WebMouseWheelEvent& event) { // Halt an in-progress fling on a wheel tick. - if (!event.has_precise_scrolling_deltas) - EndActiveFlingAnimation(); - + if (!event.has_precise_scrolling_deltas) { + if (WebFrameWidgetBase* widget = MainFrameImpl()->FrameWidget()) + widget->EndActiveFlingAnimation(); + } HidePopups(); return PageWidgetEventHandler::HandleMouseWheel(main_frame, event); } -WebGestureEvent WebViewImpl::CreateGestureScrollEventFromFling( - WebInputEvent::Type type, - WebGestureDevice source_device) const { - WebGestureEvent gesture_event(type, fling_modifier_, - WTF::MonotonicallyIncreasingTime()); - gesture_event.source_device = source_device; - gesture_event.x = position_on_fling_start_.x; - gesture_event.y = position_on_fling_start_.y; - gesture_event.global_x = global_position_on_fling_start_.x; - gesture_event.global_y = global_position_on_fling_start_.y; - return gesture_event; -} - -bool WebViewImpl::ScrollBy(const WebFloatSize& delta, - const WebFloatSize& velocity) { - DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized); - if (!page_ || !page_->MainFrame() || !page_->MainFrame()->IsLocalFrame() || - !page_->DeprecatedLocalMainFrame()->View()) { - return false; - } - - if (fling_source_device_ == kWebGestureDeviceTouchpad) { - bool enable_touchpad_scroll_latching = - RuntimeEnabledFeatures::TouchpadAndWheelScrollLatchingEnabled(); - WebMouseWheelEvent synthetic_wheel(WebInputEvent::kMouseWheel, - fling_modifier_, - WTF::MonotonicallyIncreasingTime()); - const float kTickDivisor = WheelEvent::kTickMultiplier; - - synthetic_wheel.delta_x = delta.width; - synthetic_wheel.delta_y = delta.height; - synthetic_wheel.wheel_ticks_x = delta.width / kTickDivisor; - synthetic_wheel.wheel_ticks_y = delta.height / kTickDivisor; - synthetic_wheel.has_precise_scrolling_deltas = true; - synthetic_wheel.phase = WebMouseWheelEvent::kPhaseChanged; - synthetic_wheel.SetPositionInWidget(position_on_fling_start_.x, - position_on_fling_start_.y); - synthetic_wheel.SetPositionInScreen(global_position_on_fling_start_.x, - global_position_on_fling_start_.y); - - if (HandleMouseWheel(*page_->DeprecatedLocalMainFrame(), synthetic_wheel) != - WebInputEventResult::kNotHandled) - return true; - - if (!enable_touchpad_scroll_latching) { - WebGestureEvent synthetic_scroll_begin = - CreateGestureScrollEventFromFling(WebInputEvent::kGestureScrollBegin, - kWebGestureDeviceTouchpad); - synthetic_scroll_begin.data.scroll_begin.delta_x_hint = delta.width; - synthetic_scroll_begin.data.scroll_begin.delta_y_hint = delta.height; - synthetic_scroll_begin.data.scroll_begin.inertial_phase = - WebGestureEvent::kMomentumPhase; - HandleGestureEvent(synthetic_scroll_begin); - } - - WebGestureEvent synthetic_scroll_update = CreateGestureScrollEventFromFling( - WebInputEvent::kGestureScrollUpdate, kWebGestureDeviceTouchpad); - synthetic_scroll_update.data.scroll_update.delta_x = delta.width; - synthetic_scroll_update.data.scroll_update.delta_y = delta.height; - synthetic_scroll_update.data.scroll_update.velocity_x = velocity.width; - synthetic_scroll_update.data.scroll_update.velocity_y = velocity.height; - synthetic_scroll_update.data.scroll_update.inertial_phase = - WebGestureEvent::kMomentumPhase; - bool scroll_update_handled = HandleGestureEvent(synthetic_scroll_update) != - WebInputEventResult::kNotHandled; - - if (!enable_touchpad_scroll_latching) { - WebGestureEvent synthetic_scroll_end = CreateGestureScrollEventFromFling( - WebInputEvent::kGestureScrollEnd, kWebGestureDeviceTouchpad); - synthetic_scroll_end.data.scroll_end.inertial_phase = - WebGestureEvent::kMomentumPhase; - HandleGestureEvent(synthetic_scroll_end); - } - - return scroll_update_handled; - } - - WebGestureEvent synthetic_gesture_event = CreateGestureScrollEventFromFling( - WebInputEvent::kGestureScrollUpdate, fling_source_device_); - synthetic_gesture_event.data.scroll_update.prevent_propagation = true; - synthetic_gesture_event.data.scroll_update.delta_x = delta.width; - synthetic_gesture_event.data.scroll_update.delta_y = delta.height; - synthetic_gesture_event.data.scroll_update.velocity_x = velocity.width; - synthetic_gesture_event.data.scroll_update.velocity_y = velocity.height; - synthetic_gesture_event.data.scroll_update.inertial_phase = - WebGestureEvent::kMomentumPhase; - - return HandleGestureEvent(synthetic_gesture_event) != - WebInputEventResult::kNotHandled; -} - WebInputEventResult WebViewImpl::HandleGestureEvent( const WebGestureEvent& event) { if (!client_ || !client_->CanHandleGestureEvent()) { @@ -662,50 +569,14 @@ // Special handling for slow-path fling gestures. switch (event.GetType()) { - case WebInputEvent::kGestureFlingStart: { - if (MainFrameImpl() - ->GetFrame() - ->GetEventHandler() - .IsScrollbarHandlingGestures()) - break; - if (event.source_device != kWebGestureDeviceSyntheticAutoscroll) - EndActiveFlingAnimation(); - position_on_fling_start_ = WebPoint(event.x, event.y); - global_position_on_fling_start_ = - WebPoint(event.global_x, event.global_y); - fling_modifier_ = event.GetModifiers(); - fling_source_device_ = event.source_device; - DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized); - std::unique_ptr<WebGestureCurve> fling_curve = - Platform::Current()->CreateFlingAnimationCurve( - event.source_device, - WebFloatPoint(event.data.fling_start.velocity_x, - event.data.fling_start.velocity_y), - WebSize()); - DCHECK(fling_curve); - gesture_animation_ = WebActiveGestureAnimation::CreateWithTimeOffset( - std::move(fling_curve), this, event.TimeStampSeconds()); - MainFrameImpl()->FrameWidget()->ScheduleAnimation(); - event_result = WebInputEventResult::kHandledSystem; - - WebGestureEvent scaled_event = - TransformWebGestureEvent(MainFrameImpl()->GetFrameView(), event); - // Plugins may need to see GestureFlingStart to balance - // GestureScrollBegin (since the former replaces GestureScrollEnd when - // transitioning to a fling). - // TODO(dtapuska): Why isn't the response used? - MainFrameImpl()->GetFrame()->GetEventHandler().HandleGestureScrollEvent( - scaled_event); - - client_->DidHandleGestureEvent(event, event_cancelled); - return WebInputEventResult::kHandledSystem; - } - case WebInputEvent::kGestureFlingCancel: - if (EndActiveFlingAnimation()) - event_result = WebInputEventResult::kHandledSuppressed; + case WebInputEvent::kGestureFlingStart: + case WebInputEvent::kGestureFlingCancel: { + if (WebFrameWidgetBase* widget = MainFrameImpl()->FrameWidget()) + event_result = widget->HandleGestureFlingEvent(event); client_->DidHandleGestureEvent(event, event_cancelled); return event_result; + } default: break; } @@ -985,36 +856,6 @@ return HandleInputEvent(blink::WebCoalescedInputEvent(wheel_event)); } -void WebViewImpl::TransferActiveWheelFlingAnimation( - const WebActiveWheelFlingParameters& parameters) { - TRACE_EVENT0("blink", "WebViewImpl::transferActiveWheelFlingAnimation"); - DCHECK(!gesture_animation_); - position_on_fling_start_ = parameters.point; - global_position_on_fling_start_ = parameters.global_point; - fling_modifier_ = parameters.modifiers; - std::unique_ptr<WebGestureCurve> curve = - Platform::Current()->CreateFlingAnimationCurve( - parameters.source_device, WebFloatPoint(parameters.delta), - parameters.cumulative_scroll); - DCHECK(curve); - gesture_animation_ = WebActiveGestureAnimation::CreateWithTimeOffset( - std::move(curve), this, parameters.start_time); - DCHECK_NE(parameters.source_device, kWebGestureDeviceUninitialized); - fling_source_device_ = parameters.source_device; - MainFrameImpl()->FrameWidget()->ScheduleAnimation(); -} - -bool WebViewImpl::EndActiveFlingAnimation() { - if (gesture_animation_) { - gesture_animation_.reset(); - fling_source_device_ = kWebGestureDeviceUninitialized; - if (layer_tree_view_) - layer_tree_view_->DidStopFlinging(); - return true; - } - return false; -} - bool WebViewImpl::StartPageScaleAnimation(const IntPoint& target_position, bool use_anchor, float new_scale, @@ -1114,7 +955,8 @@ String(event.text).Utf8()); // Halt an in-progress fling on a key event. - EndActiveFlingAnimation(); + if (WebFrameWidgetBase* widget = MainFrameImpl()->FrameWidget()) + widget->EndActiveFlingAnimation(); // Please refer to the comments explaining the m_suppressNextKeypressEvent // member. @@ -1858,6 +1700,12 @@ } } +void WebViewImpl::SetScrollBoundaryBehavior( + const WebScrollBoundaryBehavior& scroll_boundary_behavior) { + if (layer_tree_view_) + layer_tree_view_->SetScrollBoundaryBehavior(scroll_boundary_behavior); +} + BrowserControls& WebViewImpl::GetBrowserControls() { return GetPage()->GetBrowserControls(); } @@ -1978,27 +1826,12 @@ last_frame_time_monotonic); DCHECK(last_frame_time_monotonic); - // Create synthetic wheel events as necessary for fling. - if (gesture_animation_) { - if (gesture_animation_->Animate(last_frame_time_monotonic)) { - MainFrameImpl()->FrameWidget()->ScheduleAnimation(); - } else { - DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized); - WebGestureDevice last_fling_source_device = fling_source_device_; - EndActiveFlingAnimation(); - - if (last_fling_source_device != kWebGestureDeviceSyntheticAutoscroll) { - WebGestureEvent end_scroll_event = CreateGestureScrollEventFromFling( - WebInputEvent::kGestureScrollEnd, last_fling_source_device); - MainFrameImpl()->GetFrame()->GetEventHandler().HandleGestureScrollEnd( - end_scroll_event); - } - } - } - if (!MainFrameImpl()) return; + if (WebFrameWidgetBase* widget = MainFrameImpl()->FrameWidget()) + widget->UpdateGestureAnimation(last_frame_time_monotonic); + last_frame_time_monotonic_ = last_frame_time_monotonic; DocumentLifecycle::AllowThrottlingScope throttling_scope( @@ -3598,7 +3431,11 @@ // Make sure link highlight from previous page is cleared. link_highlights_.clear(); - EndActiveFlingAnimation(); + if (!MainFrameImpl()) + return; + + if (WebFrameWidgetBase* widget = MainFrameImpl()->FrameWidget()) + widget->EndActiveFlingAnimation(); } void WebViewImpl::ResizeAfterLayout() {
diff --git a/third_party/WebKit/Source/core/exported/WebViewImpl.h b/third_party/WebKit/Source/core/exported/WebViewImpl.h index cfbd48a0..7ea90b0 100644 --- a/third_party/WebKit/Source/core/exported/WebViewImpl.h +++ b/third_party/WebKit/Source/core/exported/WebViewImpl.h
@@ -85,7 +85,6 @@ class PaintLayerCompositor; class UserGestureToken; class ValidationMessageClient; -class WebActiveGestureAnimation; class WebDevToolsAgentImpl; class WebElement; class WebInputMethodController; @@ -100,7 +99,6 @@ class CORE_EXPORT WebViewImpl final : public WebView, public RefCounted<WebViewImpl>, - public WebGestureCurveTarget, public PageWidgetEventHandler, public WebScheduler::InterventionReporter, public WebViewScheduler::WebViewSchedulerDelegate { @@ -239,10 +237,6 @@ void HidePopups() override; void SetPageOverlayColor(WebColor) override; WebPageImportanceSignals* PageImportanceSignals() override; - void TransferActiveWheelFlingAnimation( - const WebActiveWheelFlingParameters&) override; - bool EndActiveFlingAnimation() override; - bool IsFlinging() const override { return !!gesture_animation_.get(); } void SetShowPaintRects(bool) override; void SetShowDebugBorders(bool); void SetShowFPSCounter(bool) override; @@ -315,10 +309,6 @@ float new_scale, double duration_in_seconds); - // WebGestureCurveTarget implementation for fling. - bool ScrollBy(const WebFloatSize& delta, - const WebFloatSize& velocity) override; - // Handles context menu events orignated via the the keyboard. These // include the VK_APPS virtual key and the Shift+F10 combine. Code is // based on the Webkit function bool WebView::handleContextMenuEvent(WPARAM @@ -458,6 +448,8 @@ // changed. void DidUpdateBrowserControls(); + void SetScrollBoundaryBehavior(const WebScrollBoundaryBehavior&); + void ForceNextWebGLContextCreationToFail() override; void ForceNextDrawingBufferCreationToFail() override; @@ -556,9 +548,6 @@ WebInputEventResult HandleSyntheticWheelFromTouchpadPinchEvent( const WebGestureEvent&); - WebGestureEvent CreateGestureScrollEventFromFling(WebInputEvent::Type, - WebGestureDevice) const; - void EnablePopupMouseWheelEventListener(WebLocalFrameImpl* local_root); void DisablePopupMouseWheelEventListener(); @@ -666,11 +655,6 @@ GraphicsLayer* visual_viewport_container_layer_; bool matches_heuristics_for_gpu_rasterization_; - std::unique_ptr<WebActiveGestureAnimation> gesture_animation_; - WebPoint position_on_fling_start_; - WebPoint global_position_on_fling_start_; - int fling_modifier_; - WebGestureDevice fling_source_device_; Vector<std::unique_ptr<LinkHighlightImpl>> link_highlights_; std::unique_ptr<CompositorAnimationTimeline> link_highlights_timeline_; std::unique_ptr<FullscreenController> fullscreen_controller_;
diff --git a/third_party/WebKit/Source/core/fileapi/Blob.cpp b/third_party/WebKit/Source/core/fileapi/Blob.cpp index ca88b3c..ee0cdc12 100644 --- a/third_party/WebKit/Source/core/fileapi/Blob.cpp +++ b/third_party/WebKit/Source/core/fileapi/Blob.cpp
@@ -175,12 +175,6 @@ long long end, const String& content_type, ExceptionState& exception_state) const { - if (isClosed()) { - exception_state.ThrowDOMException(kInvalidStateError, - "Blob has been closed."); - return nullptr; - } - long long size = this->size(); ClampSliceOffsets(size, start, end); @@ -191,28 +185,6 @@ return Blob::Create(BlobDataHandle::Create(std::move(blob_data), length)); } -void Blob::close(ScriptState* script_state, ExceptionState& exception_state) { - if (isClosed()) { - exception_state.ThrowDOMException(kInvalidStateError, - "Blob has been closed."); - return; - } - - // Dereferencing a Blob that has been closed should result in - // a network error. Revoke URLs registered against it through - // its UUID. - DOMURL::RevokeObjectUUID(ExecutionContext::From(script_state), Uuid()); - - // A Blob enters a 'readability state' of closed, where it will report its - // size as zero. Blob and FileReader operations now throws on - // being passed a Blob in that state. Downstream uses of closed Blobs - // (e.g., XHR.send()) consider them as empty. - std::unique_ptr<BlobData> blob_data = BlobData::Create(); - blob_data->SetContentType(type()); - blob_data_handle_ = BlobDataHandle::Create(std::move(blob_data), 0); - is_closed_ = true; -} - void Blob::AppendTo(BlobData& blob_data) const { blob_data.AppendBlob(blob_data_handle_, 0, blob_data_handle_->size()); }
diff --git a/third_party/WebKit/Source/core/fileapi/Blob.h b/third_party/WebKit/Source/core/fileapi/Blob.h index bbd4947..b65c412 100644 --- a/third_party/WebKit/Source/core/fileapi/Blob.h +++ b/third_party/WebKit/Source/core/fileapi/Blob.h
@@ -48,7 +48,6 @@ class BlobPropertyBag; class ExceptionState; class ExecutionContext; -class ScriptState; class CORE_EXPORT Blob : public GarbageCollectedFinalized<Blob>, public ScriptWrappable, @@ -99,8 +98,6 @@ return slice(start, end, String(), exception_state); } - virtual void close(ScriptState*, ExceptionState&); - String type() const { return blob_data_handle_->GetType(); } String Uuid() const { return blob_data_handle_->Uuid(); } RefPtr<BlobDataHandle> GetBlobDataHandle() const { return blob_data_handle_; } @@ -108,7 +105,6 @@ virtual bool IsFile() const { return false; } // Only true for File instances that are backed by platform files. virtual bool HasBackingFile() const { return false; } - bool isClosed() const { return is_closed_; } // Used by the JavaScript Blob and File constructors. virtual void AppendTo(BlobData&) const;
diff --git a/third_party/WebKit/Source/core/fileapi/Blob.idl b/third_party/WebKit/Source/core/fileapi/Blob.idl index 327a59c2..fa0d250 100644 --- a/third_party/WebKit/Source/core/fileapi/Blob.idl +++ b/third_party/WebKit/Source/core/fileapi/Blob.idl
@@ -39,9 +39,7 @@ ] interface Blob { readonly attribute unsigned long long size; readonly attribute DOMString type; - [RuntimeEnabled=FileAPIBlobClose] readonly attribute boolean isClosed; // TODO(jsbell): start and end arguments should be [Clamp] [RaisesException] Blob slice(optional long long start, optional long long end, optional DOMString contentType); - [RaisesException, CallWith=ScriptState, RuntimeEnabled=FileAPIBlobClose] void close(); };
diff --git a/third_party/WebKit/Source/core/fileapi/File.cpp b/third_party/WebKit/Source/core/fileapi/File.cpp index 1b78022..9a941741 100644 --- a/third_party/WebKit/Source/core/fileapi/File.cpp +++ b/third_party/WebKit/Source/core/fileapi/File.cpp
@@ -306,12 +306,6 @@ long long end, const String& content_type, ExceptionState& exception_state) const { - if (isClosed()) { - exception_state.ThrowDOMException(kInvalidStateError, - "File has been closed."); - return nullptr; - } - if (!has_backing_file_) return Blob::slice(start, end, content_type, exception_state); @@ -359,24 +353,6 @@ snapshot_modification_time_ms = metadata.modification_time; } -void File::close(ScriptState* script_state, ExceptionState& exception_state) { - if (isClosed()) { - exception_state.ThrowDOMException(kInvalidStateError, - "Blob has been closed."); - return; - } - - // Reset the File to its closed representation, an empty - // Blob. The name isn't cleared, as it should still be - // available. - has_backing_file_ = false; - path_ = String(); - file_system_url_ = KURL(); - InvalidateSnapshotMetadata(); - relative_path_ = String(); - Blob::close(script_state, exception_state); -} - void File::AppendTo(BlobData& blob_data) const { if (!has_backing_file_) { Blob::AppendTo(blob_data);
diff --git a/third_party/WebKit/Source/core/fileapi/File.h b/third_party/WebKit/Source/core/fileapi/File.h index b61f23e..da78499 100644 --- a/third_party/WebKit/Source/core/fileapi/File.h +++ b/third_party/WebKit/Source/core/fileapi/File.h
@@ -40,7 +40,6 @@ class FilePropertyBag; class FileMetadata; class KURL; -class ScriptState; class CORE_EXPORT File final : public Blob { DEFINE_WRAPPERTYPEINFO(); @@ -155,7 +154,6 @@ long long end, const String& content_type, ExceptionState&) const override; - void close(ScriptState*, ExceptionState&) override; bool IsFile() const override { return true; } bool HasBackingFile() const override { return has_backing_file_; }
diff --git a/third_party/WebKit/Source/core/fileapi/FileReader.cpp b/third_party/WebKit/Source/core/fileapi/FileReader.cpp index 133e93d..b6bc2ce 100644 --- a/third_party/WebKit/Source/core/fileapi/FileReader.cpp +++ b/third_party/WebKit/Source/core/fileapi/FileReader.cpp
@@ -274,13 +274,6 @@ return; } - if (blob->isClosed()) { - exception_state.ThrowDOMException( - kInvalidStateError, - String(blob->IsFile() ? "File" : "Blob") + " has been closed."); - return; - } - ExecutionContext* context = GetExecutionContext(); if (!context) { exception_state.ThrowDOMException(
diff --git a/third_party/WebKit/Source/core/fileapi/URLFileAPI.cpp b/third_party/WebKit/Source/core/fileapi/URLFileAPI.cpp index 3e02558..95803a7 100644 --- a/third_party/WebKit/Source/core/fileapi/URLFileAPI.cpp +++ b/third_party/WebKit/Source/core/fileapi/URLFileAPI.cpp
@@ -22,15 +22,6 @@ ExecutionContext* execution_context = ExecutionContext::From(script_state); DCHECK(execution_context); - if (blob->isClosed()) { - // TODO(jsbell): The spec doesn't throw, but rather returns a blob: URL - // without adding it to the store. - exception_state.ThrowDOMException( - kInvalidStateError, - String(blob->IsFile() ? "File" : "Blob") + " has been closed."); - return String(); - } - UseCounter::Count(execution_context, WebFeature::kCreateObjectURLBlob); return DOMURL::CreatePublicURL(execution_context, blob, blob->Uuid()); }
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp index 18fa95c..dc10048 100644 --- a/third_party/WebKit/Source/core/frame/Deprecation.cpp +++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -331,8 +331,8 @@ "For more help, check https://xhr.spec.whatwg.org/."; case WebFeature::kGetMatchedCSSRules: - return "'getMatchedCSSRules()' is deprecated. For more help, check " - "https://code.google.com/p/chromium/issues/detail?id=437569#c2"; + return willBeRemoved("document.getMatchedCSSRules()", M63, + "4606972603138048"); case WebFeature::kPrefixedWindowURL: return replacedBy("'webkitURL'", "'URL'");
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameClient.h b/third_party/WebKit/Source/core/frame/LocalFrameClient.h index 61e1e53..a9711c0 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrameClient.h +++ b/third_party/WebKit/Source/core/frame/LocalFrameClient.h
@@ -89,6 +89,7 @@ class WebApplicationCacheHostClient; class WebCookieJar; class WebFrame; +class WebLayerTreeView; class WebMediaPlayer; class WebMediaPlayerClient; class WebMediaPlayerSource; @@ -231,7 +232,8 @@ virtual std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) = 0; + WebMediaPlayerClient*, + WebLayerTreeView*) = 0; virtual WebRemotePlaybackClient* CreateWebRemotePlaybackClient( HTMLMediaElement&) = 0;
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp index d4f8e3d..0db0b83 100644 --- a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp +++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp
@@ -6,6 +6,7 @@ #include "core/dom/UserGestureIndicator.h" #include "core/events/WebInputEventConversion.h" +#include "core/events/WheelEvent.h" #include "core/exported/WebViewImpl.h" #include "core/frame/LocalFrameView.h" #include "core/frame/VisualViewport.h" @@ -20,7 +21,11 @@ #include "core/page/FocusController.h" #include "core/page/Page.h" #include "core/page/PointerLockController.h" +#include "platform/exported/WebActiveGestureAnimation.h" #include "platform/wtf/Assertions.h" +#include "public/platform/Platform.h" +#include "public/platform/WebGestureCurve.h" +#include "public/web/WebActiveWheelFlingParameters.h" #include "public/web/WebWidgetClient.h" namespace blink { @@ -48,6 +53,12 @@ bool WebFrameWidgetBase::ignore_input_events_ = false; +WebFrameWidgetBase::WebFrameWidgetBase() + : fling_modifier_(0), + fling_source_device_(kWebGestureDeviceUninitialized) {} + +WebFrameWidgetBase::~WebFrameWidgetBase() {} + WebDragOperation WebFrameWidgetBase::DragTargetDragEnter( const WebDragData& web_drag_data, const WebPoint& point_in_viewport, @@ -332,4 +343,200 @@ : nullptr; } +bool WebFrameWidgetBase::EndActiveFlingAnimation() { + if (gesture_animation_) { + gesture_animation_.reset(); + fling_source_device_ = kWebGestureDeviceUninitialized; + if (WebLayerTreeView* layer_tree_view = GetLayerTreeView()) + layer_tree_view->DidStopFlinging(); + return true; + } + return false; +} + +bool WebFrameWidgetBase::ScrollBy(const WebFloatSize& delta, + const WebFloatSize& velocity) { + DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized); + + if (fling_source_device_ == kWebGestureDeviceTouchpad) { + bool enable_touchpad_scroll_latching = + RuntimeEnabledFeatures::TouchpadAndWheelScrollLatchingEnabled(); + WebMouseWheelEvent synthetic_wheel(WebInputEvent::kMouseWheel, + fling_modifier_, + WTF::MonotonicallyIncreasingTime()); + const float kTickDivisor = WheelEvent::kTickMultiplier; + + synthetic_wheel.delta_x = delta.width; + synthetic_wheel.delta_y = delta.height; + synthetic_wheel.wheel_ticks_x = delta.width / kTickDivisor; + synthetic_wheel.wheel_ticks_y = delta.height / kTickDivisor; + synthetic_wheel.has_precise_scrolling_deltas = true; + synthetic_wheel.phase = WebMouseWheelEvent::kPhaseChanged; + synthetic_wheel.SetPositionInWidget(position_on_fling_start_.x, + position_on_fling_start_.y); + synthetic_wheel.SetPositionInScreen(global_position_on_fling_start_.x, + global_position_on_fling_start_.y); + + // TODO(wjmaclean): Is LocalRoot() the right frame to use here? + if (GetPageWidgetEventHandler()->HandleMouseWheel(*ToCoreFrame(LocalRoot()), + synthetic_wheel) != + WebInputEventResult::kNotHandled) { + return true; + } + + if (!enable_touchpad_scroll_latching) { + WebGestureEvent synthetic_scroll_begin = + CreateGestureScrollEventFromFling(WebInputEvent::kGestureScrollBegin, + kWebGestureDeviceTouchpad); + synthetic_scroll_begin.data.scroll_begin.delta_x_hint = delta.width; + synthetic_scroll_begin.data.scroll_begin.delta_y_hint = delta.height; + synthetic_scroll_begin.data.scroll_begin.inertial_phase = + WebGestureEvent::kMomentumPhase; + GetPageWidgetEventHandler()->HandleGestureEvent(synthetic_scroll_begin); + } + + WebGestureEvent synthetic_scroll_update = CreateGestureScrollEventFromFling( + WebInputEvent::kGestureScrollUpdate, kWebGestureDeviceTouchpad); + synthetic_scroll_update.data.scroll_update.delta_x = delta.width; + synthetic_scroll_update.data.scroll_update.delta_y = delta.height; + synthetic_scroll_update.data.scroll_update.velocity_x = velocity.width; + synthetic_scroll_update.data.scroll_update.velocity_y = velocity.height; + synthetic_scroll_update.data.scroll_update.inertial_phase = + WebGestureEvent::kMomentumPhase; + bool scroll_update_handled = + GetPageWidgetEventHandler()->HandleGestureEvent( + synthetic_scroll_update) != WebInputEventResult::kNotHandled; + + if (!enable_touchpad_scroll_latching) { + WebGestureEvent synthetic_scroll_end = CreateGestureScrollEventFromFling( + WebInputEvent::kGestureScrollEnd, kWebGestureDeviceTouchpad); + synthetic_scroll_end.data.scroll_end.inertial_phase = + WebGestureEvent::kMomentumPhase; + GetPageWidgetEventHandler()->HandleGestureEvent(synthetic_scroll_end); + } + + return scroll_update_handled; + } + + WebGestureEvent synthetic_gesture_event = CreateGestureScrollEventFromFling( + WebInputEvent::kGestureScrollUpdate, fling_source_device_); + synthetic_gesture_event.data.scroll_update.prevent_propagation = true; + synthetic_gesture_event.data.scroll_update.delta_x = delta.width; + synthetic_gesture_event.data.scroll_update.delta_y = delta.height; + synthetic_gesture_event.data.scroll_update.velocity_x = velocity.width; + synthetic_gesture_event.data.scroll_update.velocity_y = velocity.height; + synthetic_gesture_event.data.scroll_update.inertial_phase = + WebGestureEvent::kMomentumPhase; + + return GetPageWidgetEventHandler()->HandleGestureEvent( + synthetic_gesture_event) != WebInputEventResult::kNotHandled; +} + +WebInputEventResult WebFrameWidgetBase::HandleGestureFlingEvent( + const WebGestureEvent& event) { + WebInputEventResult event_result = WebInputEventResult::kNotHandled; + switch (event.GetType()) { + case WebInputEvent::kGestureFlingStart: { + if (event.source_device != kWebGestureDeviceSyntheticAutoscroll) + EndActiveFlingAnimation(); + position_on_fling_start_ = WebPoint(event.x, event.y); + global_position_on_fling_start_ = + WebPoint(event.global_x, event.global_y); + fling_modifier_ = event.GetModifiers(); + fling_source_device_ = event.source_device; + DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized); + std::unique_ptr<WebGestureCurve> fling_curve = + Platform::Current()->CreateFlingAnimationCurve( + event.source_device, + WebFloatPoint(event.data.fling_start.velocity_x, + event.data.fling_start.velocity_y), + WebSize()); + DCHECK(fling_curve); + gesture_animation_ = WebActiveGestureAnimation::CreateWithTimeOffset( + std::move(fling_curve), this, event.TimeStampSeconds()); + ScheduleAnimation(); + + WebGestureEvent scaled_event = + TransformWebGestureEvent(ToCoreFrame(LocalRoot())->View(), event); + // Plugins may need to see GestureFlingStart to balance + // GestureScrollBegin (since the former replaces GestureScrollEnd when + // transitioning to a fling). + // TODO(dtapuska): Why isn't the response used? + ToCoreFrame(LocalRoot()) + ->GetEventHandler() + .HandleGestureScrollEvent(scaled_event); + + event_result = WebInputEventResult::kHandledSystem; + break; + } + case WebInputEvent::kGestureFlingCancel: + if (EndActiveFlingAnimation()) + event_result = WebInputEventResult::kHandledSuppressed; + + break; + default: + NOTREACHED(); + } + return event_result; +} + +void WebFrameWidgetBase::TransferActiveWheelFlingAnimation( + const WebActiveWheelFlingParameters& parameters) { + TRACE_EVENT0("blink", + "WebFrameWidgetBase::TransferActiveWheelFlingAnimation"); + DCHECK(!gesture_animation_); + position_on_fling_start_ = parameters.point; + global_position_on_fling_start_ = parameters.global_point; + fling_modifier_ = parameters.modifiers; + std::unique_ptr<WebGestureCurve> curve = + Platform::Current()->CreateFlingAnimationCurve( + parameters.source_device, WebFloatPoint(parameters.delta), + parameters.cumulative_scroll); + DCHECK(curve); + gesture_animation_ = WebActiveGestureAnimation::CreateWithTimeOffset( + std::move(curve), this, parameters.start_time); + DCHECK_NE(parameters.source_device, kWebGestureDeviceUninitialized); + fling_source_device_ = parameters.source_device; + ScheduleAnimation(); +} + +WebGestureEvent WebFrameWidgetBase::CreateGestureScrollEventFromFling( + WebInputEvent::Type type, + WebGestureDevice source_device) const { + WebGestureEvent gesture_event(type, fling_modifier_, + WTF::MonotonicallyIncreasingTime()); + gesture_event.source_device = source_device; + gesture_event.x = position_on_fling_start_.x; + gesture_event.y = position_on_fling_start_.y; + gesture_event.global_x = global_position_on_fling_start_.x; + gesture_event.global_y = global_position_on_fling_start_.y; + return gesture_event; +} + +bool WebFrameWidgetBase::IsFlinging() const { + return !!gesture_animation_; +} + +void WebFrameWidgetBase::UpdateGestureAnimation( + double last_frame_time_monotonic) { + if (!gesture_animation_) + return; + + if (gesture_animation_->Animate(last_frame_time_monotonic)) { + ScheduleAnimation(); + } else { + DCHECK_NE(fling_source_device_, kWebGestureDeviceUninitialized); + WebGestureDevice last_fling_source_device = fling_source_device_; + EndActiveFlingAnimation(); + + if (last_fling_source_device != kWebGestureDeviceSyntheticAutoscroll) { + WebGestureEvent end_scroll_event = CreateGestureScrollEventFromFling( + WebInputEvent::kGestureScrollEnd, last_fling_source_device); + ToCoreFrame(LocalRoot()) + ->GetEventHandler() + .HandleGestureScrollEnd(end_scroll_event); + } + } +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h index 4a3d5e5..b56b408 100644 --- a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h +++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.h
@@ -13,6 +13,7 @@ #include "platform/wtf/Assertions.h" #include "public/platform/WebCoalescedInputEvent.h" #include "public/platform/WebDragData.h" +#include "public/platform/WebGestureCurveTarget.h" #include "public/web/WebFrameWidget.h" namespace blink { @@ -20,6 +21,8 @@ class CompositorAnimationHost; class CompositorMutatorImpl; class GraphicsLayer; +class PageWidgetEventHandler; +class WebActiveGestureAnimation; class WebImage; class WebLayer; class WebLayerTreeView; @@ -29,9 +32,11 @@ class CORE_EXPORT WebFrameWidgetBase : public GarbageCollectedFinalized<WebFrameWidgetBase>, - public WebFrameWidget { + public WebFrameWidget, + public WebGestureCurveTarget { public: - virtual ~WebFrameWidgetBase() {} + WebFrameWidgetBase(); + virtual ~WebFrameWidgetBase(); virtual bool ForSubframe() const = 0; virtual void ScheduleAnimation() = 0; @@ -52,6 +57,15 @@ virtual HitTestResult CoreHitTestResultAt(const WebPoint&) = 0; + // Fling operations. + bool EndActiveFlingAnimation(); + WebInputEventResult HandleGestureFlingEvent(const WebGestureEvent&); + void UpdateGestureAnimation(double last_frame_time_monotonic); + + // WebGestureCurveTarget implementation. + bool ScrollBy(const WebFloatSize& delta, + const WebFloatSize& velocity) override; + // WebFrameWidget implementation. WebDragOperation DragTargetDragEnter(const WebDragData&, const WebPoint& point_in_viewport, @@ -73,6 +87,9 @@ WebDragOperation) override; void DragSourceSystemDragEnded() override; + void TransferActiveWheelFlingAnimation( + const WebActiveWheelFlingParameters&) override; + // Called when a drag-n-drop operation should begin. void StartDragging(WebReferrerPolicy, const WebDragData&, @@ -89,6 +106,7 @@ void DidNotAcquirePointerLock() override; void DidLosePointerLock() override; void ShowContextMenu(WebMenuSourceType) override; + bool IsFlinging() const override; // Image decode functionality. void RequestDecode(const PaintImage&, WTF::Function<void(bool)> callback); @@ -118,6 +136,8 @@ // Helper function to process events while pointer locked. void PointerLockMouseEvent(const WebCoalescedInputEvent&); + virtual PageWidgetEventHandler* GetPageWidgetEventHandler() = 0; + // A copy of the web drop data object we received from the browser. Member<DataObject> current_drag_data_; @@ -132,9 +152,18 @@ WebDragOperation drag_operation_ = kWebDragOperationNone; private: + // Fling local. + WebGestureEvent CreateGestureScrollEventFromFling(WebInputEvent::Type, + WebGestureDevice) const; void CancelDrag(); LocalFrame* FocusedLocalFrameInWidget() const; + std::unique_ptr<WebActiveGestureAnimation> gesture_animation_; + WebPoint position_on_fling_start_; + WebPoint global_position_on_fling_start_; + int fling_modifier_; + WebGestureDevice fling_source_device_; + static bool ignore_input_events_; RefPtr<UserGestureToken> pointer_lock_gesture_token_;
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp b/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp index 45c6e0e..6f54ba8e 100644 --- a/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp +++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp
@@ -250,6 +250,7 @@ TRACE_EVENT1("blink", "WebFrameWidgetImpl::beginFrame", "frameTime", last_frame_time_monotonic); DCHECK(last_frame_time_monotonic); + UpdateGestureAnimation(last_frame_time_monotonic); PageWidgetDelegate::Animate(*GetPage(), last_frame_time_monotonic); GetPage()->GetValidationMessageClient().LayoutOverlay(); } @@ -884,10 +885,14 @@ } WebInputEventResult WebFrameWidgetImpl::HandleMouseWheel( - LocalFrame& main_frame, + LocalFrame& frame, const WebMouseWheelEvent& event) { + // Halt an in-progress fling on a wheel tick. + if (!event.has_precise_scrolling_deltas) + EndActiveFlingAnimation(); + View()->HidePopups(); - return PageWidgetEventHandler::HandleMouseWheel(main_frame, event); + return PageWidgetEventHandler::HandleMouseWheel(frame, event); } WebInputEventResult WebFrameWidgetImpl::HandleGestureEvent( @@ -922,8 +927,9 @@ break; case WebInputEvent::kGestureFlingStart: case WebInputEvent::kGestureFlingCancel: + event_result = HandleGestureFlingEvent(event); client_->DidHandleGestureEvent(event, event_cancelled); - return WebInputEventResult::kNotHandled; + return event_result; default: NOTREACHED(); } @@ -934,6 +940,10 @@ return event_result; } +PageWidgetEventHandler* WebFrameWidgetImpl::GetPageWidgetEventHandler() { + return this; +} + WebInputEventResult WebFrameWidgetImpl::HandleKeyEvent( const WebKeyboardEvent& event) { DCHECK((event.GetType() == WebInputEvent::kRawKeyDown) ||
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.h b/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.h index 4644b6ac..a63f7e6f 100644 --- a/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.h +++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.h
@@ -179,6 +179,8 @@ WebInputEventResult HandleKeyEvent(const WebKeyboardEvent&) override; WebInputEventResult HandleCharEvent(const WebKeyboardEvent&) override; + PageWidgetEventHandler* GetPageWidgetEventHandler() override; + // This method returns the focused frame belonging to this WebWidget, that // is, a focused frame with the same local root as the one corresponding // to this widget. It will return nullptr if no frame is focused or, the
diff --git a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp index 55a5a46e..70f7cc3 100644 --- a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp +++ b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
@@ -2437,7 +2437,7 @@ SingleThreadTaskRunner* WebLocalFrameImpl::TimerTaskRunner() { return GetFrame() ->FrameScheduler() - ->TimerTaskRunner() + ->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner(); } @@ -2451,7 +2451,7 @@ SingleThreadTaskRunner* WebLocalFrameImpl::UnthrottledTaskRunner() { return GetFrame() ->FrameScheduler() - ->UnthrottledTaskRunner() + ->PausableTaskRunner() ->ToSingleThreadTaskRunner(); }
diff --git a/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp b/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp index 1dc8e17d..7e15b777 100644 --- a/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp +++ b/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp
@@ -7,6 +7,7 @@ #include "core/exported/WebViewImpl.h" #include "core/frame/WebLocalFrameImpl.h" #include "core/layout/HitTestResult.h" +#include "platform/exported/WebActiveGestureAnimation.h" namespace blink { @@ -250,4 +251,8 @@ WebFrameWidgetBase::Trace(visitor); } +PageWidgetEventHandler* WebViewFrameWidget::GetPageWidgetEventHandler() { + return web_view_.Get(); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/WebViewFrameWidget.h b/third_party/WebKit/Source/core/frame/WebViewFrameWidget.h index 2d5c740..ff6d07a 100644 --- a/third_party/WebKit/Source/core/frame/WebViewFrameWidget.h +++ b/third_party/WebKit/Source/core/frame/WebViewFrameWidget.h
@@ -109,6 +109,8 @@ DECLARE_VIRTUAL_TRACE(); private: + PageWidgetEventHandler* GetPageWidgetEventHandler() override; + WebWidgetClient* client_; RefPtr<WebViewImpl> web_view_; Member<WebLocalFrameImpl> main_frame_;
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp index c47fe95..91cb3a7d 100644 --- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -72,6 +72,7 @@ #include "platform/RuntimeEnabledFeatures.h" #include "platform/graphics/CanvasHeuristicParameters.h" #include "platform/graphics/CanvasMetrics.h" +#include "platform/graphics/GraphicsLayer.h" #include "platform/graphics/ImageBuffer.h" #include "platform/graphics/RecordingImageBufferSurface.h" #include "platform/graphics/UnacceleratedImageBufferSurface.h" @@ -140,7 +141,8 @@ externally_allocated_memory_(0), origin_clean_(true), did_fail_to_create_image_buffer_(false), - image_buffer_is_clear_(false) { + image_buffer_is_clear_(false), + surface_layer_bridge_(nullptr) { CanvasMetrics::CountCanvasContextUsage(CanvasMetrics::kCanvasCreated); UseCounter::Count(document, WebFeature::kHTMLCanvasElement); } @@ -148,6 +150,10 @@ DEFINE_NODE_FACTORY(HTMLCanvasElement) HTMLCanvasElement::~HTMLCanvasElement() { + if (surface_layer_bridge_ && surface_layer_bridge_->GetWebLayer()) { + GraphicsLayer::UnregisterContentsLayer( + surface_layer_bridge_->GetWebLayer()); + } v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( -externally_allocated_memory_); } @@ -1467,13 +1473,14 @@ layer_tree_view = frame->GetPage()->GetChromeClient().GetWebLayerTreeView(frame); surface_layer_bridge_ = - WTF::MakeUnique<::blink::SurfaceLayerBridge>(this, layer_tree_view); + WTF::MakeUnique<::blink::SurfaceLayerBridge>(layer_tree_view, this); // Creates a placeholder layer first before Surface is created. surface_layer_bridge_->CreateSolidColorLayer(); } } void HTMLCanvasElement::OnWebLayerReplaced() { + GraphicsLayer::RegisterContentsLayer(surface_layer_bridge_->GetWebLayer()); SetNeedsCompositingUpdate(); }
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.h b/third_party/WebKit/Source/core/html/HTMLCanvasElement.h index 92f54b88..fbc7b3d 100644 --- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.h +++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.h
@@ -75,15 +75,16 @@ typedef CanvasRenderingContext2DOrWebGLRenderingContextOrWebGL2RenderingContextOrImageBitmapRenderingContext RenderingContext; -class CORE_EXPORT HTMLCanvasElement final : public HTMLElement, - public ContextLifecycleObserver, - public PageVisibilityObserver, - public CanvasImageSource, - public CanvasRenderingContextHost, - public SurfaceLayerBridgeObserver, - public ImageBufferClient, - public ImageBitmapSource, - public OffscreenCanvasPlaceholder { +class CORE_EXPORT HTMLCanvasElement final + : public HTMLElement, + public ContextLifecycleObserver, + public PageVisibilityObserver, + public CanvasImageSource, + public CanvasRenderingContextHost, + public WebSurfaceLayerBridgeObserver, + public ImageBufferClient, + public ImageBitmapSource, + public OffscreenCanvasPlaceholder { DEFINE_WRAPPERTYPEINFO(); USING_GARBAGE_COLLECTED_MIXIN(HTMLCanvasElement); USING_PRE_FINALIZER(HTMLCanvasElement, Dispose);
diff --git a/third_party/WebKit/Source/core/html/HTMLFormElement.cpp b/third_party/WebKit/Source/core/html/HTMLFormElement.cpp index 311e0ea..2e70625 100644 --- a/third_party/WebKit/Source/core/html/HTMLFormElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLFormElement.cpp
@@ -360,8 +360,8 @@ void HTMLFormElement::SubmitDialog(FormSubmission* form_submission) { for (Node* node = this; node; node = node->ParentOrShadowHostNode()) { - if (isHTMLDialogElement(*node)) { - toHTMLDialogElement(*node).CloseDialog(form_submission->Result()); + if (auto* dialog = ToHTMLDialogElementOrNull(*node)) { + dialog->CloseDialog(form_submission->Result()); return; } }
diff --git a/third_party/WebKit/Source/core/html/HTMLInputElement.cpp b/third_party/WebKit/Source/core/html/HTMLInputElement.cpp index 894ca0e..e9727ed 100644 --- a/third_party/WebKit/Source/core/html/HTMLInputElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLInputElement.cpp
@@ -424,6 +424,14 @@ PseudoStateChanged(CSSSelector::kPseudoReadOnly); PseudoStateChanged(CSSSelector::kPseudoReadWrite); } + if (input_type_->IsCheckable() != new_type->IsCheckable()) { + PseudoStateChanged(CSSSelector::kPseudoChecked); + } + PseudoStateChanged(CSSSelector::kPseudoIndeterminate); + if (input_type_->IsSteppable() || new_type->IsSteppable()) { + PseudoStateChanged(CSSSelector::kPseudoInRange); + PseudoStateChanged(CSSSelector::kPseudoOutOfRange); + } bool placeholder_changed = input_type_->SupportsPlaceholder() != new_type->SupportsPlaceholder(); @@ -1584,13 +1592,8 @@ if (!input_type_->ShouldRespectListAttribute()) return nullptr; - Element* element = GetTreeScope().getElementById(FastGetAttribute(listAttr)); - if (!element) - return nullptr; - if (!isHTMLDataListElement(*element)) - return nullptr; - - return toHTMLDataListElement(element); + return ToHTMLDataListElementOrNull( + GetTreeScope().getElementById(FastGetAttribute(listAttr))); } bool HTMLInputElement::HasValidDataListOptions() const {
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp index bbe5544..76a3653 100644 --- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -458,7 +458,7 @@ this, &HTMLMediaElement::CheckViewportIntersectionTimerFired), played_time_ranges_(), - async_event_queue_(GenericEventQueue::Create(this)), + async_event_queue_(MediaElementEventQueue::Create(this)), playback_rate_(1.0f), default_playback_rate_(1.0f), network_state_(kNetworkEmpty), @@ -1233,8 +1233,10 @@ return; } - web_media_player_ = - frame->Client()->CreateWebMediaPlayer(*this, source, this); + web_media_player_ = frame->Client()->CreateWebMediaPlayer( + *this, source, this, + frame->GetPage()->GetChromeClient().GetWebLayerTreeView(frame)); + if (!web_media_player_) { MediaLoadingFailed(WebMediaPlayer::kNetworkStateFormatError, BuildElementErrorMessage(
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.h b/third_party/WebKit/Source/core/html/HTMLMediaElement.h index a5b341b..cb5d248 100644 --- a/third_party/WebKit/Source/core/html/HTMLMediaElement.h +++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.h
@@ -33,7 +33,7 @@ #include "core/CoreExport.h" #include "core/dom/ExceptionCode.h" #include "core/dom/SuspendableObject.h" -#include "core/dom/events/GenericEventQueue.h" +#include "core/dom/events/MediaElementEventQueue.h" #include "core/html/HTMLElement.h" #include "core/html/media/MediaControls.h" #include "core/html/track/TextTrack.h" @@ -546,7 +546,7 @@ TaskRunnerTimer<HTMLMediaElement> check_viewport_intersection_timer_; Member<TimeRanges> played_time_ranges_; - Member<GenericEventQueue> async_event_queue_; + Member<MediaElementEventQueue> async_event_queue_; double playback_rate_; double default_playback_rate_;
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElementEventListenersTest.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElementEventListenersTest.cpp index e1dbd36..0e7dde2 100644 --- a/third_party/WebKit/Source/core/html/HTMLMediaElementEventListenersTest.cpp +++ b/third_party/WebKit/Source/core/html/HTMLMediaElementEventListenersTest.cpp
@@ -35,7 +35,8 @@ std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) override { + WebMediaPlayerClient*, + WebLayerTreeView*) override { return WTF::WrapUnique(new MockWebMediaPlayer()); } };
diff --git a/third_party/WebKit/Source/core/html/HTMLSelectElement.cpp b/third_party/WebKit/Source/core/html/HTMLSelectElement.cpp index a70353b4..a1320d2b 100644 --- a/third_party/WebKit/Source/core/html/HTMLSelectElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLSelectElement.cpp
@@ -449,10 +449,9 @@ if (list_index < 0) return nullptr; const ListItems& items = GetListItems(); - if (static_cast<size_t>(list_index) >= items.size() || - !isHTMLOptionElement(items[list_index])) + if (static_cast<size_t>(list_index) >= items.size()) return nullptr; - return toHTMLOptionElement(items[list_index]); + return ToHTMLOptionElementOrNull(items[list_index]); } // Returns the 1st valid OPTION |skip| items from |listIndex| in direction @@ -1842,11 +1841,10 @@ String HTMLSelectElement::ItemText(const Element& element) const { String item_string; - if (isHTMLOptGroupElement(element)) - item_string = toHTMLOptGroupElement(element).GroupLabelText(); - else if (isHTMLOptionElement(element)) - item_string = - toHTMLOptionElement(element).TextIndentedToRespectGroupLabel(); + if (auto* optgroup = ToHTMLOptGroupElementOrNull(element)) + item_string = optgroup->GroupLabelText(); + else if (auto* option = ToHTMLOptionElementOrNull(element)) + item_string = option->TextIndentedToRespectGroupLabel(); if (GetLayoutObject()) ApplyTextTransform(GetLayoutObject()->Style(), item_string, ' '); @@ -1854,8 +1852,8 @@ } bool HTMLSelectElement::ItemIsDisplayNone(Element& element) const { - if (isHTMLOptionElement(element)) - return toHTMLOptionElement(element).IsDisplayNone(); + if (auto* option = ToHTMLOptionElementOrNull(element)) + return option->IsDisplayNone(); if (const ComputedStyle* style = ItemComputedStyle(element)) return style->Display() == EDisplay::kNone; return false;
diff --git a/third_party/WebKit/Source/core/html/media/MediaDocument.cpp b/third_party/WebKit/Source/core/html/media/MediaDocument.cpp index be903636..7bbc7c8 100644 --- a/third_party/WebKit/Source/core/html/media/MediaDocument.cpp +++ b/third_party/WebKit/Source/core/html/media/MediaDocument.cpp
@@ -124,7 +124,6 @@ media->AppendChild(source); HTMLBodyElement* body = HTMLBodyElement::Create(*GetDocument()); - body->setAttribute(styleAttr, "margin: 0px;"); GetDocument()->WillInsertBody();
diff --git a/third_party/WebKit/Source/core/html/track/TextTrackList.cpp b/third_party/WebKit/Source/core/html/track/TextTrackList.cpp index 74eb4f8b..866c431 100644 --- a/third_party/WebKit/Source/core/html/track/TextTrackList.cpp +++ b/third_party/WebKit/Source/core/html/track/TextTrackList.cpp
@@ -26,7 +26,7 @@ #include "core/html/track/TextTrackList.h" #include "bindings/core/v8/ExceptionState.h" -#include "core/dom/events/GenericEventQueue.h" +#include "core/dom/events/MediaElementEventQueue.h" #include "core/html/HTMLMediaElement.h" #include "core/html/track/InbandTextTrack.h" #include "core/html/track/LoadableTextTrack.h" @@ -36,7 +36,7 @@ namespace blink { TextTrackList::TextTrackList(HTMLMediaElement* owner) - : owner_(owner), async_event_queue_(GenericEventQueue::Create(this)) {} + : owner_(owner), async_event_queue_(MediaElementEventQueue::Create(this)) {} TextTrackList::~TextTrackList() {}
diff --git a/third_party/WebKit/Source/core/html/track/TextTrackList.h b/third_party/WebKit/Source/core/html/track/TextTrackList.h index 642dfbba..6a9e26be5 100644 --- a/third_party/WebKit/Source/core/html/track/TextTrackList.h +++ b/third_party/WebKit/Source/core/html/track/TextTrackList.h
@@ -36,7 +36,7 @@ namespace blink { -class GenericEventQueue; +class MediaElementEventQueue; class TextTrack; class CORE_EXPORT TextTrackList final : public EventTargetWithInlineData { @@ -89,7 +89,7 @@ Member<HTMLMediaElement> owner_; - Member<GenericEventQueue> async_event_queue_; + Member<MediaElementEventQueue> async_event_queue_; HeapVector<TraceWrapperMember<TextTrack>> add_track_tracks_; HeapVector<TraceWrapperMember<TextTrack>> element_tracks_;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp index 6e3ccbd7..f5ac065 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
@@ -51,6 +51,7 @@ #include "core/css/StyleSheetList.h" #include "core/css/parser/CSSParser.h" #include "core/css/parser/CSSParserContext.h" +#include "core/css/properties/CSSPropertyAPI.h" #include "core/css/resolver/StyleResolver.h" #include "core/css/resolver/StyleRuleUsageTracker.h" #include "core/dom/DOMException.h" @@ -1101,7 +1102,7 @@ CSSPropertyID property_id = static_cast<CSSPropertyID>(id); if (!CSSPropertyMetadata::IsEnabledProperty(property_id) || isShorthandProperty(property_id) || - !CSSPropertyMetadata::IsProperty(property_id)) + !CSSPropertyAPI::Get(property_id).IsProperty()) continue; (*style)->addItem( protocol::CSS::CSSComputedStyleProperty::create()
diff --git a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp index 188b4916..7c086eb 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp
@@ -13,7 +13,6 @@ #include "core/page/Page.h" #include "platform/geometry/DoubleRect.h" #include "platform/graphics/Color.h" -#include "platform/scheduler/renderer/web_view_scheduler.h" #include "platform/wtf/Time.h" #include "public/platform/Platform.h" #include "public/platform/WebFloatPoint.h" @@ -43,7 +42,9 @@ InspectorEmulationAgent::InspectorEmulationAgent( WebLocalFrameImpl* web_local_frame_impl, Client* client) - : web_local_frame_(web_local_frame_impl), client_(client) {} + : web_local_frame_(web_local_frame_impl), + client_(client), + virtual_time_observer_registered_(false) {} InspectorEmulationAgent::~InspectorEmulationAgent() {} @@ -79,6 +80,10 @@ setEmulatedMedia(String()); setCPUThrottlingRate(1); setDefaultBackgroundColorOverride(Maybe<protocol::DOM::RGBA>()); + if (virtual_time_observer_registered_) { + web_local_frame_->View()->Scheduler()->RemoveVirtualTimeObserver(this); + virtual_time_observer_registered_ = false; + } return Response::OK(); } @@ -139,6 +144,10 @@ WebViewScheduler::VirtualTimePolicy::DETERMINISTIC_LOADING); } web_local_frame_->View()->Scheduler()->EnableVirtualTime(); + if (!virtual_time_observer_registered_) { + web_local_frame_->View()->Scheduler()->AddVirtualTimeObserver(this); + virtual_time_observer_registered_ = true; + } if (budget.isJust()) { WTF::TimeDelta budget_amount = @@ -157,6 +166,11 @@ GetFrontend()->virtualTimeBudgetExpired(); } +void InspectorEmulationAgent::OnVirtualTimePaused( + WTF::TimeDelta virtual_time_offset) { + GetFrontend()->virtualTimePaused(virtual_time_offset.InMilliseconds()); +} + Response InspectorEmulationAgent::setDefaultBackgroundColorOverride( Maybe<protocol::DOM::RGBA> color) { if (!color.isJust()) {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h index 3504843..830a7c7a 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.h
@@ -8,6 +8,8 @@ #include "core/CoreExport.h" #include "core/inspector/InspectorBaseAgent.h" #include "core/inspector/protocol/Emulation.h" +#include "platform/scheduler/renderer/web_view_scheduler.h" +#include "platform/wtf/Time.h" namespace blink { @@ -21,7 +23,8 @@ } // namespace protocol class CORE_EXPORT InspectorEmulationAgent final - : public InspectorBaseAgent<protocol::Emulation::Metainfo> { + : public InspectorBaseAgent<protocol::Emulation::Metainfo>, + public WebViewScheduler::VirtualTimeObserver { WTF_MAKE_NONCOPYABLE(InspectorEmulationAgent); public: @@ -54,6 +57,9 @@ protocol::Response disable() override; void Restore() override; + // scheduler::WebViewScheduler::VirtualTimeObserver implementation. + void OnVirtualTimePaused(WTF::TimeDelta virtual_time_offset) override; + DECLARE_VIRTUAL_TRACE(); private: @@ -63,6 +69,7 @@ Member<WebLocalFrameImpl> web_local_frame_; Client* client_; + bool virtual_time_observer_registered_; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp b/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp index ff4ecf2..a8534d3 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp
@@ -231,15 +231,18 @@ std::unique_ptr<protocol::Value> BuildGapAndPositions( double origin, LayoutUnit gap, - const Vector<LayoutUnit>& positions) { + const Vector<LayoutUnit>& positions, + float scale) { std::unique_ptr<protocol::DictionaryValue> result = protocol::DictionaryValue::create(); - result->setDouble("origin", origin); - result->setDouble("gap", gap.Round()); + result->setDouble("origin", floor(origin * scale)); + result->setDouble("gap", round(gap * scale)); std::unique_ptr<protocol::ListValue> spans = protocol::ListValue::create(); - for (const LayoutUnit& position : positions) - spans->pushValue(protocol::FundamentalValue::create(position.Round())); + for (const LayoutUnit& position : positions) { + spans->pushValue( + protocol::FundamentalValue::create(round(position * scale))); + } result->setValue("positions", std::move(spans)); return result; @@ -249,6 +252,7 @@ LayoutGrid* layout_grid, FloatPoint origin, Color color, + float scale, bool isPrimary) { std::unique_ptr<protocol::DictionaryValue> grid_info = protocol::DictionaryValue::create(); @@ -257,13 +261,13 @@ "rows", BuildGapAndPositions(origin.Y(), layout_grid->GridGap(kForRows) + layout_grid->GridItemOffset(kForRows), - layout_grid->RowPositions())); + layout_grid->RowPositions(), scale)); grid_info->setValue( "columns", BuildGapAndPositions(origin.X(), layout_grid->GridGap(kForColumns) + layout_grid->GridItemOffset(kForColumns), - layout_grid->ColumnPositions())); + layout_grid->ColumnPositions(), scale)); grid_info->setString("color", color.Serialized()); grid_info->setBoolean("isPrimaryGrid", isPrimary); return grid_info; @@ -404,7 +408,7 @@ if (layout_object->IsLayoutGrid()) { grid_info_->pushValue(BuildGridInfo(ToLayoutGrid(layout_object), border.P1(), highlight_config.css_grid, - true)); + scale_, true)); } LayoutObject* parent = layout_object->Parent(); if (!parent || !parent->IsLayoutGrid()) @@ -412,7 +416,8 @@ if (!BuildNodeQuads(parent->GetNode(), &content, &padding, &border, &margin)) return; grid_info_->pushValue(BuildGridInfo(ToLayoutGrid(parent), border.P1(), - highlight_config.css_grid, false)); + highlight_config.css_grid, scale_, + false)); } std::unique_ptr<protocol::DictionaryValue> InspectorHighlight::AsProtocolValue()
diff --git a/third_party/WebKit/Source/core/inspector/InspectorOverlayPage.html b/third_party/WebKit/Source/core/inspector/InspectorOverlayPage.html index 231c3ae..7b9c1569 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorOverlayPage.html +++ b/third_party/WebKit/Source/core/inspector/InspectorOverlayPage.html
@@ -722,8 +722,8 @@ function _drawLayoutGridHighlight(highlight, context) { - var originX = highlight.columns.origin - 0.5; - var originY = highlight.rows.origin - 0.5; + var originX = highlight.columns.origin; + var originY = highlight.rows.origin; var columnGap = highlight.columns.gap; var rowGap = highlight.rows.gap; @@ -734,37 +734,41 @@ if (!rows.length || !columns.length) return; + context.save(); + context.translate(originX + 0.5, originY + 0.5); + context.scale(pageScaleFactor, pageScaleFactor) + if (columnGap > 1 && highlight.isPrimaryGrid) { - var top = rows[0] + originY; - var height = rows[rows.length - 1] - rows[0] + 1; + var top = rows[0]; + var height = rows[rows.length - 1] - rows[0]; for (var i = 1; i < columns.length - 1; i++) - context.clearRect(columns[i] - columnGap + originX, top, columnGap, height); + context.clearRect(columns[i] - columnGap, top, columnGap, height); } if (rowGap > 1 && highlight.isPrimaryGrid) { - var left = columns[0] + originX; - var width = columns[columns.length - 1] - columns[0] + 1; + var left = columns[0]; + var width = columns[columns.length - 1] - columns[0]; for (var i = 1; i < rows.length - 1; i++) - context.clearRect(left, rows[i] - rowGap + originY, width, rowGap); + context.clearRect(left, rows[i] - rowGap, width, rowGap); } context.setLineDash([3, 3]); context.strokeStyle = highlight.color; for (var column = 1; column < columns.length; column++) { - var x = originX + columns[column - 1]; - var width = columns[column] - columns[column - 1] + 1; + var x = columns[column - 1]; + var width = columns[column] - columns[column - 1]; if (column !== columns.length - 1) width -= columnGap; - for (var row = 1; row < rows.length; row++) { - var y = originY + rows[row - 1]; - var height = rows[row] - rows[row - 1] + 1; + var y = rows[row - 1]; + var height = rows[row] - rows[row - 1]; if (row !== rows.length - 1) height -= rowGap; context.strokeRect(x, y, width, height); } } + context.restore(); } function drawHighlight(highlight, context)
diff --git a/third_party/WebKit/Source/core/inspector/browser_protocol.json b/third_party/WebKit/Source/core/inspector/browser_protocol.json index 7550fa6..243ca2d 100644 --- a/third_party/WebKit/Source/core/inspector/browser_protocol.json +++ b/third_party/WebKit/Source/core/inspector/browser_protocol.json
@@ -1094,7 +1094,15 @@ { "name": "virtualTimeBudgetExpired", "experimental": true, - "description": "Notification sent after the virual time budget for the current VirtualTimePolicy has run out." + "description": "Notification sent after the virtual time budget for the current VirtualTimePolicy has run out." + }, + { + "name": "virtualTimePaused", + "experimental": true, + "parameters": [ + { "name": "virtualTimeElapsed", "type": "integer", "description": "The amount of virtual time that has elapsed in milliseconds since virtual time was first enabled." } + ], + "description": "Notification sent after the virtual time has paused." } ] },
diff --git a/third_party/WebKit/Source/core/inspector/inspector_protocol_config.json b/third_party/WebKit/Source/core/inspector/inspector_protocol_config.json index cd0917e..73ffa93 100644 --- a/third_party/WebKit/Source/core/inspector/inspector_protocol_config.json +++ b/third_party/WebKit/Source/core/inspector/inspector_protocol_config.json
@@ -91,7 +91,7 @@ "domain": "Emulation", "include": ["forceViewport", "resetViewport", "resetPageScaleFactor", "setPageScaleFactor", "setScriptExecutionDisabled", "setTouchEmulationEnabled", "setEmulatedMedia", "setCPUThrottlingRate", "setVirtualTimePolicy", "setDefaultBackgroundColorOverride"], - "include_events": ["virtualTimeBudgetExpired"] + "include_events": ["virtualTimeBudgetExpired", "virtualTimePaused"] }, { "domain": "Network",
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp index 7745f071..60d6453 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
@@ -1390,6 +1390,17 @@ ComputeIntrinsicLogicalWidths(min_preferred_logical_width_, max_preferred_logical_width_); + if (style_to_use.LogicalMaxWidth().IsFixed()) { + max_preferred_logical_width_ = + std::min(max_preferred_logical_width_, + AdjustContentBoxLogicalWidthForBoxSizing( + LayoutUnit(style_to_use.LogicalMaxWidth().Value()))); + min_preferred_logical_width_ = + std::min(min_preferred_logical_width_, + AdjustContentBoxLogicalWidthForBoxSizing( + LayoutUnit(style_to_use.LogicalMaxWidth().Value()))); + } + if (style_to_use.LogicalMinWidth().IsFixed() && style_to_use.LogicalMinWidth().Value() > 0) { max_preferred_logical_width_ = @@ -1402,17 +1413,6 @@ LayoutUnit(style_to_use.LogicalMinWidth().Value()))); } - if (style_to_use.LogicalMaxWidth().IsFixed()) { - max_preferred_logical_width_ = - std::min(max_preferred_logical_width_, - AdjustContentBoxLogicalWidthForBoxSizing( - LayoutUnit(style_to_use.LogicalMaxWidth().Value()))); - min_preferred_logical_width_ = - std::min(min_preferred_logical_width_, - AdjustContentBoxLogicalWidthForBoxSizing( - LayoutUnit(style_to_use.LogicalMaxWidth().Value()))); - } - // Table layout uses integers, ceil the preferred widths to ensure that they // can contain the contents. if (IsTableCell()) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp b/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp index 5f67971..f385f0a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp
@@ -62,6 +62,7 @@ void Reset() { current_child_ = 0; + natural_current_child_ = 0; ordinal_iteration_ = -1; } @@ -107,6 +108,19 @@ } while (!current_child_ || (!current_child_->IsAnonymous() && current_child_->Style()->BoxOrdinalGroup() != current_ordinal_)); + + // This peice of code just exists for detecting if this iterator actually + // does something other than returning the default order. + if (!natural_current_child_) + natural_current_child_ = box_->FirstChildBox(); + else + natural_current_child_ = natural_current_child_->NextSiblingBox(); + + if (natural_current_child_ != current_child_) { + UseCounter::Count(box_->GetDocument(), + WebFeature::kWebkitBoxNotDefaultOrder); + } + return current_child_; } @@ -119,6 +133,7 @@ LayoutDeprecatedFlexibleBox* box_; LayoutBox* current_child_; + LayoutBox* natural_current_child_; bool forward_; unsigned current_ordinal_; unsigned largest_ordinal_; @@ -364,6 +379,34 @@ void LayoutDeprecatedFlexibleBox::UpdateBlockLayout(bool relayout_children) { DCHECK(NeedsLayout()); + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLayout); + + if (Style()->BoxAlign() != ComputedStyle::InitialBoxAlign()) + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxAlignNotInitial); + + if (Style()->BoxDirection() != ComputedStyle::InitialBoxDirection()) + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxDirectionNotInitial); + + if (Style()->BoxLines() != ComputedStyle::InitialBoxLines()) + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLinesNotInitial); + + if (Style()->BoxPack() != ComputedStyle::InitialBoxPack()) + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxPackNotInitial); + + if (!FirstChildBox()) { + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxNoChildren); + } else if (!FirstChildBox()->NextSiblingBox()) { + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxOneChild); + + if (FirstChildBox()->IsLayoutBlockFlow() && + ToLayoutBlockFlow(FirstChildBox())->ChildrenInline()) { + UseCounter::Count(GetDocument(), + WebFeature::kWebkitBoxOneChildIsLayoutBlockFlowInline); + } + } else { + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxManyChildren); + } + if (!relayout_children && SimplifiedLayout()) return; @@ -388,10 +431,13 @@ stretching_children_ = false; - if (IsHorizontal()) + if (IsHorizontal()) { + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLayoutHorizontal); LayoutHorizontalBox(relayout_children); - else + } else { + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLayoutVertical); LayoutVerticalBox(relayout_children); + } LayoutUnit old_client_after_edge = ClientLogicalBottom(); UpdateLogicalHeight(); @@ -411,11 +457,27 @@ // The first walk over our kids is to find out if we have any flexible children. static void GatherFlexChildrenInfo(FlexBoxIterator& iterator, + Document& document, bool relayout_children, unsigned& highest_flex_group, unsigned& lowest_flex_group, bool& have_flex) { for (LayoutBox* child = iterator.First(); child; child = iterator.Next()) { + if (child->Style()->BoxFlex() != ComputedStyle::InitialBoxFlex()) + UseCounter::Count(document, WebFeature::kWebkitBoxChildFlexNotInitial); + + if (child->Style()->BoxFlexGroup() != + ComputedStyle::InitialBoxFlexGroup()) { + UseCounter::Count(document, + WebFeature::kWebkitBoxChildFlexGroupNotInitial); + } + + if (child->Style()->BoxOrdinalGroup() != + ComputedStyle::InitialBoxOrdinalGroup()) { + UseCounter::Count(document, + WebFeature::kWebkitBoxChildOrdinalGroupNotInitial); + } + // Check to see if this child flexes. if (!ChildDoesNotAffectWidthOrFlexing(child) && child->Style()->BoxFlex() > 0.0f) { @@ -452,8 +514,8 @@ unsigned highest_flex_group = 0; unsigned lowest_flex_group = 0; bool have_flex = false, flexing_children = false; - GatherFlexChildrenInfo(iterator, relayout_children, highest_flex_group, - lowest_flex_group, have_flex); + GatherFlexChildrenInfo(iterator, GetDocument(), relayout_children, + highest_flex_group, lowest_flex_group, have_flex); PaintLayerScrollableArea::DelayScrollOffsetClampScope delay_clamp_scope; @@ -798,8 +860,8 @@ unsigned highest_flex_group = 0; unsigned lowest_flex_group = 0; bool have_flex = false, flexing_children = false; - GatherFlexChildrenInfo(iterator, relayout_children, highest_flex_group, - lowest_flex_group, have_flex); + GatherFlexChildrenInfo(iterator, GetDocument(), relayout_children, + highest_flex_group, lowest_flex_group, have_flex); // We confine the line clamp ugliness to vertical flexible boxes (thus keeping // it out of @@ -1091,6 +1153,27 @@ void LayoutDeprecatedFlexibleBox::ApplyLineClamp(FlexBoxIterator& iterator, bool relayout_children) { UseCounter::Count(GetDocument(), WebFeature::kLineClamp); + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLineClamp); + + if (Style()->LineClamp().IsPercentage()) + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLineClampPercentage); + + LayoutBox* child = FirstChildBox(); + if (!child) { + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLineClampNoChildren); + } else if (!child->NextSiblingBox()) { + UseCounter::Count(GetDocument(), WebFeature::kWebkitBoxLineClampOneChild); + + if (child->IsLayoutBlockFlow() && + ToLayoutBlockFlow(child)->ChildrenInline()) { + UseCounter::Count( + GetDocument(), + WebFeature::kWebkitBoxLineClampOneChildIsLayoutBlockFlowInline); + } + } else { + UseCounter::Count(GetDocument(), + WebFeature::kWebkitBoxLineClampManyChildren); + } int max_line_count = 0; for (LayoutBox* child = iterator.First(); child; child = iterator.Next()) { @@ -1190,6 +1273,9 @@ LayoutUnit(total_width))) continue; + UseCounter::Count(GetDocument(), + WebFeature::kWebkitBoxLineClampDoesSomething); + // Let the truncation code kick in. // FIXME: the text alignment should be recomputed after the width changes // due to truncation.
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp index c383eb29..73381a9 100644 --- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
@@ -1110,6 +1110,10 @@ grid_.SetNeedsItemsPlacement(true); grid_items_overflowing_grid_area_.resize(0); + // TODO (jfernandez): Should we store the baseline context data into the Grid + // structure ? + row_axis_alignment_context_.clear(); + col_axis_alignment_context_.clear(); } Vector<LayoutUnit> LayoutGrid::TrackSizesForComputedStyle(
diff --git a/third_party/WebKit/Source/core/layout/LayoutImage.cpp b/third_party/WebKit/Source/core/layout/LayoutImage.cpp index 7ab5f843..0c204c2c 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImage.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutImage.cpp
@@ -327,8 +327,10 @@ return nullptr; ImageResourceContent* cached_image = image_resource_->CachedImage(); - if (cached_image && cached_image->GetImage() && - cached_image->GetImage()->IsSVGImage()) + // TODO(japhet): This shouldn't need to worry about cache validation. + // https://crbug.com/761026 + if (cached_image && !cached_image->IsCacheValidator() && + cached_image->GetImage() && cached_image->GetImage()->IsSVGImage()) return ToSVGImage(cached_image->GetImage())->EmbeddedReplacedContent(); return nullptr;
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp index be213a9..951364c 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
@@ -113,6 +113,11 @@ LayoutTableBoxComponent::StyleDidChange(diff, old_style); PropagateStyleToAnonymousChildren(); + // We allow transforms on table sections, so they must be able to act as + // containers for style reasons. + SetCanContainFixedPositionObjects( + StyleRef().CanContainFixedPositionObjects()); + if (!old_style) return; @@ -124,9 +129,10 @@ *this, *table, diff, *old_style); if (LayoutTableBoxComponent::DoCellsHaveDirtyWidth(*this, *table, diff, - *old_style)) + *old_style)) { MarkAllCellsWidthsDirtyAndOrNeedsLayout( LayoutTable::kMarkDirtyAndNeedsLayout); + } } void LayoutTableSection::WillBeRemovedFromTree() {
diff --git a/third_party/WebKit/Source/core/layout/LayoutText.h b/third_party/WebKit/Source/core/layout/LayoutText.h index 6f54889..b460175 100644 --- a/third_party/WebKit/Source/core/layout/LayoutText.h +++ b/third_party/WebKit/Source/core/layout/LayoutText.h
@@ -228,14 +228,14 @@ known_to_have_no_overflow_and_no_fallback_fonts_ = false; } + virtual UChar PreviousCharacter() const; + protected: void WillBeDestroyed() override; void StyleWillChange(StyleDifference, const ComputedStyle&) final {} void StyleDidChange(StyleDifference, const ComputedStyle* old_style) override; - virtual UChar PreviousCharacter() const; - void AddLayerHitTestRects(LayerHitTestRects&, const PaintLayer* current_layer, const LayoutPoint& layer_offset,
diff --git a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.cpp b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.cpp index 95561701..6a7cbd9 100644 --- a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.cpp +++ b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.cpp
@@ -21,6 +21,7 @@ #include "core/layout/TableLayoutAlgorithmFixed.h" +#include "core/frame/UseCounter.h" #include "core/layout/LayoutTable.h" #include "core/layout/LayoutTableCell.h" #include "core/layout/LayoutTableCol.h" @@ -71,7 +72,7 @@ namespace blink { TableLayoutAlgorithmFixed::TableLayoutAlgorithmFixed(LayoutTable* table) - : TableLayoutAlgorithm(table) {} + : TableLayoutAlgorithm(table), recorded_width_difference_(false) {} int TableLayoutAlgorithmFixed::CalcWidthArray() { // FIXME: We might want to wait until we have all of the first row before @@ -274,10 +275,26 @@ if (total_width != table_logical_width) { // Fixed widths only scale up if (total_fixed_width && total_width < table_logical_width) { + int first_pass_fixed_width_total = total_fixed_width; total_fixed_width = 0; + int width_available_for_fixed = + table_logical_width - total_percent_width; for (unsigned i = 0; i < n_eff_cols; i++) { if (width_[i].IsFixed()) { - calc_width[i] = calc_width[i] * table_logical_width / total_width; + int legacy_expanded_width = + calc_width[i] * table_logical_width / total_width; + if (!recorded_width_difference_) { + int future_expanded_width = calc_width[i] * + width_available_for_fixed / + first_pass_fixed_width_total; + if (future_expanded_width != legacy_expanded_width) { + recorded_width_difference_ = true; + UseCounter::Count( + table_->GetDocument(), + WebFeature::kFixedWidthTableDistributionChanged); + } + } + calc_width[i] = legacy_expanded_width; total_fixed_width += calc_width[i]; } }
diff --git a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.h b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.h index 8e10a49..4d1fb9f0 100644 --- a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.h +++ b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmFixed.h
@@ -42,6 +42,7 @@ private: int CalcWidthArray(); + bool recorded_width_difference_; Vector<Length> width_; };
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutText.h b/third_party/WebKit/Source/core/layout/api/LineLayoutText.h index 08c678db..1898676 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutText.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutText.h
@@ -115,6 +115,8 @@ float MinLogicalWidth() const { return ToText()->MinLogicalWidth(); } + UChar PreviousCharacter() const { return ToText()->PreviousCharacter(); } + private: LayoutText* ToText() { return ToLayoutText(GetLayoutObject()); } const LayoutText* ToText() const { return ToLayoutText(GetLayoutObject()); }
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc index 721c4dd..1de4bda5 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc
@@ -11,7 +11,15 @@ NGBlockChildIterator::NGBlockChildIterator(NGLayoutInputNode first_child, NGBlockBreakToken* break_token) - : child_(first_child), break_token_(break_token), child_token_idx_(0) {} + : child_(first_child), break_token_(break_token), child_token_idx_(0) { + // Locate the first child to resume layout at. + if (!break_token) + return; + const auto& child_break_tokens = break_token->ChildBreakTokens(); + if (!child_break_tokens.size()) + return; + child_ = child_break_tokens[0]->InputNode(); +} NGBlockChildIterator::Entry NGBlockChildIterator::NextChild() { NGBreakToken* child_break_token = nullptr;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator_test.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator_test.cc index 2ec30e5..773660c 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator_test.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator_test.cc
@@ -79,9 +79,10 @@ parent_token = NGBlockBreakToken::Create(container, LayoutUnit(50), child_break_tokens); - // The iterator should loop through two children. + // The first break token is for the #child2. That means that everything + // preceding it (i.e. #child1) has already been finished. The break token for + // #child2 is marked as finished, so all we need to visit is #child3. NGBlockChildIterator iterator2(node1, parent_token.Get()); - ASSERT_EQ(NGBlockChildIterator::Entry(node1, nullptr), iterator2.NextChild()); ASSERT_EQ(NGBlockChildIterator::Entry(node3, nullptr), iterator2.NextChild()); ASSERT_EQ(NGBlockChildIterator::Entry(nullptr, nullptr), iterator2.NextChild()); @@ -123,9 +124,11 @@ parent_token = NGBlockBreakToken::Create(container, LayoutUnit(50), child_break_tokens); - // The iterator should loop through three children, one with a break token. + // The first break token is for the #child2. That means that everything + // preceding it (i.e. #child1) has already been finished. The break token for + // #child2 is not marked as finished, so we need to visit that child, and + // #child3. NGBlockChildIterator iterator2(node1, parent_token.Get()); - ASSERT_EQ(NGBlockChildIterator::Entry(node1, nullptr), iterator2.NextChild()); ASSERT_EQ(NGBlockChildIterator::Entry(node2, child_token.Get()), iterator2.NextChild()); ASSERT_EQ(NGBlockChildIterator::Entry(node3, nullptr), iterator2.NextChild());
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.cpp b/third_party/WebKit/Source/core/loader/EmptyClients.cpp index 4f034592..5295c27 100644 --- a/third_party/WebKit/Source/core/loader/EmptyClients.cpp +++ b/third_party/WebKit/Source/core/loader/EmptyClients.cpp
@@ -76,10 +76,10 @@ void SetFrameVisible(bool) override {} RefPtr<WebTaskRunner> LoadingTaskRunner() override; RefPtr<WebTaskRunner> LoadingControlTaskRunner() override; - RefPtr<WebTaskRunner> TimerTaskRunner() override; - RefPtr<WebTaskRunner> UnthrottledTaskRunner() override; - RefPtr<WebTaskRunner> SuspendableTaskRunner() override; - RefPtr<WebTaskRunner> UnthrottledButBlockableTaskRunner() override; + RefPtr<WebTaskRunner> ThrottleableTaskRunner() override; + RefPtr<WebTaskRunner> DeferrableTaskRunner() override; + RefPtr<WebTaskRunner> PausableTaskRunner() override; + RefPtr<WebTaskRunner> UnpausableTaskRunner() override; }; RefPtr<WebTaskRunner> EmptyFrameScheduler::LoadingTaskRunner() { @@ -90,19 +90,19 @@ return Platform::Current()->MainThread()->GetWebTaskRunner(); } -RefPtr<WebTaskRunner> EmptyFrameScheduler::TimerTaskRunner() { +RefPtr<WebTaskRunner> EmptyFrameScheduler::ThrottleableTaskRunner() { return Platform::Current()->MainThread()->GetWebTaskRunner(); } -RefPtr<WebTaskRunner> EmptyFrameScheduler::UnthrottledTaskRunner() { +RefPtr<WebTaskRunner> EmptyFrameScheduler::DeferrableTaskRunner() { return Platform::Current()->MainThread()->GetWebTaskRunner(); } -RefPtr<WebTaskRunner> EmptyFrameScheduler::SuspendableTaskRunner() { +RefPtr<WebTaskRunner> EmptyFrameScheduler::PausableTaskRunner() { return Platform::Current()->MainThread()->GetWebTaskRunner(); } -RefPtr<WebTaskRunner> EmptyFrameScheduler::UnthrottledButBlockableTaskRunner() { +RefPtr<WebTaskRunner> EmptyFrameScheduler::UnpausableTaskRunner() { return Platform::Current()->MainThread()->GetWebTaskRunner(); } @@ -190,7 +190,8 @@ std::unique_ptr<WebMediaPlayer> EmptyLocalFrameClient::CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) { + WebMediaPlayerClient*, + WebLayerTreeView*) { return nullptr; }
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.h b/third_party/WebKit/Source/core/loader/EmptyClients.h index ee6d297..cf11046 100644 --- a/third_party/WebKit/Source/core/loader/EmptyClients.h +++ b/third_party/WebKit/Source/core/loader/EmptyClients.h
@@ -109,7 +109,8 @@ void DidOverscroll(const FloatSize&, const FloatSize&, const FloatPoint&, - const FloatSize&) override {} + const FloatSize&, + const WebScrollBoundaryBehavior&) override {} void BeginLifecycleUpdates() override {} @@ -328,7 +329,8 @@ std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) override; + WebMediaPlayerClient*, + WebLayerTreeView*) override; WebRemotePlaybackClient* CreateWebRemotePlaybackClient( HTMLMediaElement&) override;
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp index 11210a7..6aa815c9 100644 --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
@@ -626,4 +626,8 @@ return info_->GetResourceError(); } +bool ImageResourceContent::IsCacheValidator() const { + return info_->IsCacheValidator(); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h index 3de40eea..489d046 100644 --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.h
@@ -122,6 +122,9 @@ bool IsAccessAllowed(SecurityOrigin*); const ResourceResponse& GetResponse() const; const ResourceError& GetResourceError() const; + // DEPRECATED: ImageResourceContents consumers shouldn't need to worry about + // whether the underlying Resource is being revalidated. + bool IsCacheValidator() const; // For FrameSerializer. bool HasCacheControlNoStoreHeader() const;
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp index be2e0f48..8aa36faf 100644 --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp
@@ -931,6 +931,36 @@ WebCachePolicy::kBypassingCache, false); } +TEST_P(ImageResourceReloadTest, ReloadLoFiImagesWithDuplicateURLs) { + KURL test_url(kParsedURLString, kTestURL); + ScopedMockedURLLoad scoped_mocked_url_load(test_url, GetTestFilePath()); + ResourceFetcher* fetcher = CreateFetcher(); + + FetchParameters placeholder_params{ResourceRequest(test_url)}; + placeholder_params.SetAllowImagePlaceholder(); + ImageResource* placeholder_resource = + ImageResource::Fetch(placeholder_params, fetcher); + EXPECT_EQ(FetchParameters::kAllowPlaceholder, + placeholder_params.GetPlaceholderImageRequestType()); + EXPECT_TRUE(placeholder_resource->ShouldShowPlaceholder()); + + FetchParameters full_image_params{ResourceRequest(test_url)}; + ImageResource* full_image_resource = + ImageResource::Fetch(full_image_params, fetcher); + EXPECT_EQ(FetchParameters::kDisallowPlaceholder, + full_image_params.GetPlaceholderImageRequestType()); + EXPECT_FALSE(full_image_resource->ShouldShowPlaceholder()); + + // The |placeholder_resource| should not be reused for the + // |full_image_resource|. + EXPECT_NE(placeholder_resource, full_image_resource); + + fetcher->ReloadLoFiImages(); + + EXPECT_FALSE(placeholder_resource->ShouldShowPlaceholder()); + EXPECT_FALSE(full_image_resource->ShouldShowPlaceholder()); +} + INSTANTIATE_TEST_CASE_P(/* no prefix */, ImageResourceReloadTest, ::testing::Bool());
diff --git a/third_party/WebKit/Source/core/mojo/Mojo.cpp b/third_party/WebKit/Source/core/mojo/Mojo.cpp index 5ab2d3cf..896174d 100644 --- a/third_party/WebKit/Source/core/mojo/Mojo.cpp +++ b/third_party/WebKit/Source/core/mojo/Mojo.cpp
@@ -19,6 +19,8 @@ #include "mojo/public/cpp/system/message_pipe.h" #include "platform/bindings/ScriptState.h" #include "platform/wtf/text/StringUTF8Adaptor.h" +#include "public/platform/InterfaceProvider.h" +#include "public/platform/Platform.h" #include "services/service_manager/public/cpp/interface_provider.h" namespace blink { @@ -79,12 +81,19 @@ // static void Mojo::bindInterface(ScriptState* script_state, const String& interface_name, - MojoHandle* request_handle) { + MojoHandle* request_handle, + const String& scope) { std::string name = StringUTF8Adaptor(interface_name).AsStringPiece().as_string(); auto handle = mojo::ScopedMessagePipeHandle::From(request_handle->TakeHandle()); + if (scope == "process") { + Platform::Current()->GetInterfaceProvider()->GetInterface( + name.c_str(), std::move(handle)); + return; + } + ExecutionContext* context = ExecutionContext::From(script_state); if (context->IsWorkerGlobalScope()) { WorkerThread* thread = ToWorkerGlobalScope(context)->GetThread();
diff --git a/third_party/WebKit/Source/core/mojo/Mojo.h b/third_party/WebKit/Source/core/mojo/Mojo.h index e33c0d2..cc235b8 100644 --- a/third_party/WebKit/Source/core/mojo/Mojo.h +++ b/third_party/WebKit/Source/core/mojo/Mojo.h
@@ -54,7 +54,8 @@ static void bindInterface(ScriptState*, const String& interface_name, - MojoHandle*); + MojoHandle*, + const String& scope); DEFINE_INLINE_TRACE() {} };
diff --git a/third_party/WebKit/Source/core/mojo/Mojo.idl b/third_party/WebKit/Source/core/mojo/Mojo.idl index df7e12e1..294f0b8 100644 --- a/third_party/WebKit/Source/core/mojo/Mojo.idl +++ b/third_party/WebKit/Source/core/mojo/Mojo.idl
@@ -6,6 +6,18 @@ typedef unsigned long MojoResult; +enum MojoScope { + // Refers to the InterfaceProvider associated with the current execution + // context. Either a Document or WorkerGlobalScope. + "context", + // Refers to the InterfaceProvider of the current process. + // + // Note: A "process" is not a web concept. In some cases the browser process + // concept of a "site instance" may be useful however there is currently no + // InterfaceProvider per site instance. + "process", +}; + [ ContextEnabled=MojoJS, Exposed=(Window,Worker), @@ -34,5 +46,5 @@ static MojoCreateDataPipeResult createDataPipe(MojoCreateDataPipeOptions options); static MojoCreateSharedBufferResult createSharedBuffer(unsigned long numBytes); - [CallWith=ScriptState] static void bindInterface(DOMString interfaceName, MojoHandle request_handle); + [CallWith=ScriptState] static void bindInterface(DOMString interfaceName, MojoHandle request_handle, optional MojoScope scope = "context"); };
diff --git a/third_party/WebKit/Source/core/page/ChromeClient.h b/third_party/WebKit/Source/core/page/ChromeClient.h index b31b312f..9629d01 100644 --- a/third_party/WebKit/Source/core/page/ChromeClient.h +++ b/third_party/WebKit/Source/core/page/ChromeClient.h
@@ -47,6 +47,7 @@ #include "public/platform/WebDragOperation.h" #include "public/platform/WebEventListenerProperties.h" #include "public/platform/WebFocusType.h" +#include "public/platform/WebScrollBoundaryBehavior.h" // To avoid conflicts with the CreateWindow macro from the Windows SDK... #undef CreateWindow @@ -142,7 +143,8 @@ virtual void DidOverscroll(const FloatSize& overscroll_delta, const FloatSize& accumulated_overscroll, const FloatPoint& position_in_viewport, - const FloatSize& velocity_in_viewport) = 0; + const FloatSize& velocity_in_viewport, + const WebScrollBoundaryBehavior&) = 0; virtual bool ShouldReportDetailedMessageForSource(LocalFrame&, const String& source) = 0; @@ -329,6 +331,8 @@ virtual void DidUpdateBrowserControls() const {} + virtual void SetScrollBoundaryBehavior(const WebScrollBoundaryBehavior&) {} + virtual void RegisterPopupOpeningObserver(PopupOpeningObserver*) = 0; virtual void UnregisterPopupOpeningObserver(PopupOpeningObserver*) = 0; virtual void NotifyPopupOpeningObservers() const = 0;
diff --git a/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp b/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp index 129cb7f..581b6b5 100644 --- a/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp +++ b/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp
@@ -283,16 +283,18 @@ return new_view->GetPage(); } -void ChromeClientImpl::DidOverscroll(const FloatSize& overscroll_delta, - const FloatSize& accumulated_overscroll, - const FloatPoint& position_in_viewport, - const FloatSize& velocity_in_viewport) { +void ChromeClientImpl::DidOverscroll( + const FloatSize& overscroll_delta, + const FloatSize& accumulated_overscroll, + const FloatPoint& position_in_viewport, + const FloatSize& velocity_in_viewport, + const WebScrollBoundaryBehavior& behavior) { if (!web_view_->Client()) return; web_view_->Client()->DidOverscroll(overscroll_delta, accumulated_overscroll, - position_in_viewport, - velocity_in_viewport); + position_in_viewport, velocity_in_viewport, + behavior); } void ChromeClientImpl::Show(NavigationPolicy navigation_policy) { @@ -1059,6 +1061,11 @@ web_view_->DidUpdateBrowserControls(); } +void ChromeClientImpl::SetScrollBoundaryBehavior( + const WebScrollBoundaryBehavior& scroll_boundary_behavior) { + web_view_->SetScrollBoundaryBehavior(scroll_boundary_behavior); +} + void ChromeClientImpl::RegisterPopupOpeningObserver( PopupOpeningObserver* observer) { DCHECK(observer);
diff --git a/third_party/WebKit/Source/core/page/ChromeClientImpl.h b/third_party/WebKit/Source/core/page/ChromeClientImpl.h index df5a47c..8d329b3d 100644 --- a/third_party/WebKit/Source/core/page/ChromeClientImpl.h +++ b/third_party/WebKit/Source/core/page/ChromeClientImpl.h
@@ -81,7 +81,8 @@ void DidOverscroll(const FloatSize& overscroll_delta, const FloatSize& accumulated_overscroll, const FloatPoint& position_in_viewport, - const FloatSize& velocity_in_viewport) override; + const FloatSize& velocity_in_viewport, + const WebScrollBoundaryBehavior&) override; bool ShouldReportDetailedMessageForSource(LocalFrame&, const String&) override; void AddMessageToConsole(LocalFrame*, @@ -214,6 +215,7 @@ void ShowUnhandledTapUIIfNeeded(WebTappedInfo&) override; void OnMouseDown(Node&) override; void DidUpdateBrowserControls() const override; + void SetScrollBoundaryBehavior(const WebScrollBoundaryBehavior&) override; FloatSize ElasticOverscroll() const override;
diff --git a/third_party/WebKit/Source/core/page/PageWidgetDelegate.cpp b/third_party/WebKit/Source/core/page/PageWidgetDelegate.cpp index 813eb22..ad8de25 100644 --- a/third_party/WebKit/Source/core/page/PageWidgetDelegate.cpp +++ b/third_party/WebKit/Source/core/page/PageWidgetDelegate.cpp
@@ -260,11 +260,11 @@ } WebInputEventResult PageWidgetEventHandler::HandleMouseWheel( - LocalFrame& main_frame, + LocalFrame& frame, const WebMouseWheelEvent& event) { WebMouseWheelEvent transformed_event = - TransformWebMouseWheelEvent(main_frame.View(), event); - return main_frame.GetEventHandler().HandleWheelEvent(transformed_event); + TransformWebMouseWheelEvent(frame.View(), event); + return frame.GetEventHandler().HandleWheelEvent(transformed_event); } WebInputEventResult PageWidgetEventHandler::HandleTouchEvent(
diff --git a/third_party/WebKit/Source/core/page/scrolling/OverscrollController.cpp b/third_party/WebKit/Source/core/page/scrolling/OverscrollController.cpp index 696be5612..86acaa53 100644 --- a/third_party/WebKit/Source/core/page/scrolling/OverscrollController.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/OverscrollController.cpp
@@ -67,9 +67,17 @@ if (delta_in_viewport != FloatSize()) { accumulated_root_overscroll_ += delta_in_viewport; - chrome_client_->DidOverscroll(delta_in_viewport, - accumulated_root_overscroll_, - position_in_viewport, velocity_in_viewport); + chrome_client_->DidOverscroll( + delta_in_viewport, accumulated_root_overscroll_, position_in_viewport, + velocity_in_viewport, scroll_boundary_behavior_); + } +} + +void OverscrollController::SetScrollBoundaryBehavior( + const WebScrollBoundaryBehavior& behavior) { + if (behavior != scroll_boundary_behavior_) { + scroll_boundary_behavior_ = behavior; + chrome_client_->SetScrollBoundaryBehavior(behavior); } }
diff --git a/third_party/WebKit/Source/core/page/scrolling/OverscrollController.h b/third_party/WebKit/Source/core/page/scrolling/OverscrollController.h index 88ed8c80..3f159b32 100644 --- a/third_party/WebKit/Source/core/page/scrolling/OverscrollController.h +++ b/third_party/WebKit/Source/core/page/scrolling/OverscrollController.h
@@ -7,6 +7,7 @@ #include "platform/geometry/FloatSize.h" #include "platform/heap/Handle.h" +#include "public/platform/WebScrollBoundaryBehavior.h" namespace blink { @@ -38,6 +39,8 @@ const FloatPoint& position_in_root_frame, const FloatSize& velocity_in_root_frame); + void SetScrollBoundaryBehavior(const WebScrollBoundaryBehavior&); + DECLARE_TRACE(); private: @@ -47,6 +50,8 @@ WeakMember<ChromeClient> chrome_client_; FloatSize accumulated_root_overscroll_; + + WebScrollBoundaryBehavior scroll_boundary_behavior_; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/page/scrolling/RootScrollerTest.cpp b/third_party/WebKit/Source/core/page/scrolling/RootScrollerTest.cpp index 3fb263f..512064bd 100644 --- a/third_party/WebKit/Source/core/page/scrolling/RootScrollerTest.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/RootScrollerTest.cpp
@@ -230,11 +230,12 @@ class OverscrollTestWebViewClient : public FrameTestHelpers::TestWebViewClient { public: - MOCK_METHOD4(DidOverscroll, + MOCK_METHOD5(DidOverscroll, void(const WebFloatSize&, const WebFloatSize&, const WebFloatPoint&, - const WebFloatSize&)); + const WebFloatSize&, + const WebScrollBoundaryBehavior&)); }; // Tests that setting an element as the root scroller causes it to control url @@ -276,7 +277,8 @@ // Scroll 50 pixels past the end. Ensure we report the 50 pixels as // overscroll. EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, 50), WebFloatSize(0, 50), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); GetWebView()->HandleInputEvent(GenerateTouchGestureEvent( WebInputEvent::kGestureScrollUpdate, 0, -500)); EXPECT_FLOAT_EQ(maximum_scroll, container->scrollTop()); @@ -287,7 +289,8 @@ { // Continue the gesture overscroll. EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, 20), WebFloatSize(0, 70), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); GetWebView()->HandleInputEvent( GenerateTouchGestureEvent(WebInputEvent::kGestureScrollUpdate, 0, -20)); EXPECT_FLOAT_EQ(maximum_scroll, container->scrollTop()); @@ -305,7 +308,8 @@ GenerateTouchGestureEvent(WebInputEvent::kGestureScrollBegin)); EXPECT_CALL(client, DidOverscroll(WebFloatSize(0, 30), WebFloatSize(0, 30), - WebFloatPoint(100, 100), WebFloatSize())); + WebFloatPoint(100, 100), WebFloatSize(), + WebScrollBoundaryBehavior())); GetWebView()->HandleInputEvent( GenerateTouchGestureEvent(WebInputEvent::kGestureScrollUpdate, 0, -30)); EXPECT_FLOAT_EQ(maximum_scroll, container->scrollTop());
diff --git a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp index 84d3365..4d0ca83 100644 --- a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp +++ b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
@@ -339,8 +339,19 @@ inline_text_box_.GetLineLayoutItem().GetText(); // TODO(szager): Figure out why this CHECK sometimes fails, it shouldn't. CHECK(inline_text_box_.Start() + length <= layout_item_string.length()); + String first_line_string; + if (inline_text_box_.IsFirstLineStyle()) { + first_line_string = layout_item_string; + ApplyTextTransform( + inline_text_box_.GetLineLayoutItem().Style( + inline_text_box_.IsFirstLineStyle()), + first_line_string, + inline_text_box_.GetLineLayoutItem().PreviousCharacter()); + } StringView string = - StringView(layout_item_string, inline_text_box_.Start(), length); + StringView(inline_text_box_.IsFirstLineStyle() ? first_line_string + : layout_item_string, + inline_text_box_.Start(), length); int maximum_length = inline_text_box_.GetLineLayoutItem().TextLength() - inline_text_box_.Start();
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp index 4c69713..6360376 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -568,31 +568,39 @@ ShowOverlayScrollbars(); } -IntRect PaintLayerScrollableArea::VisibleContentRect( +LayoutRect PaintLayerScrollableArea::LayoutContentRect( IncludeScrollbarsInRect scrollbar_inclusion) const { - // VisibleContentRect is conceptually the same as the box's client rect. - int border_width = Box().BorderWidth().Round(); - int border_height = Box().BorderHeight().Round(); - int horizontal_scrollbar_height = 0; - int vertical_scrollbar_width = 0; + // LayoutContentRect is conceptually the same as the box's client rect. + LayoutSize layer_size = LayoutSize(Layer()->size()); + LayoutUnit border_width = Box().BorderWidth(); + LayoutUnit border_height = Box().BorderHeight(); + LayoutUnit horizontal_scrollbar_height, vertical_scrollbar_width; if (scrollbar_inclusion == kExcludeScrollbars) { - horizontal_scrollbar_height = - (HorizontalScrollbar() && !HorizontalScrollbar()->IsOverlayScrollbar()) + horizontal_scrollbar_height = LayoutUnit( + HorizontalScrollbar() && !HorizontalScrollbar()->IsOverlayScrollbar() ? HorizontalScrollbar()->ScrollbarThickness() - : 0; - vertical_scrollbar_width = - (VerticalScrollbar() && !VerticalScrollbar()->IsOverlayScrollbar()) + : 0); + vertical_scrollbar_width = LayoutUnit( + VerticalScrollbar() && !VerticalScrollbar()->IsOverlayScrollbar() ? VerticalScrollbar()->ScrollbarThickness() - : 0; + : 0); } - // TOOO(szager): Handle fractional scroll offsets correctly. - return IntRect( - FlooredIntPoint(ScrollPosition()), - IntSize(max(0, Layer()->size().Width() - vertical_scrollbar_width - - border_width), - max(0, Layer()->size().Height() - horizontal_scrollbar_height - - border_height))); + return LayoutRect( + LayoutPoint(ScrollPosition()), + LayoutSize( + layer_size.Width() - border_width - vertical_scrollbar_width, + layer_size.Height() - border_height - horizontal_scrollbar_height) + .ExpandedTo(LayoutSize())); +} + +IntRect PaintLayerScrollableArea::VisibleContentRect( + IncludeScrollbarsInRect scrollbar_inclusion) const { + LayoutRect layout_content_rect(LayoutContentRect(scrollbar_inclusion)); + // TODO(szager): It's not clear that Floor() is the right thing to do here; + // what is the correct behavior for fractional scroll offsets? + return IntRect(FlooredIntPoint(layout_content_rect.Location()), + RoundedIntSize(layout_content_rect.Size())); } IntSize PaintLayerScrollableArea::ContentsSize() const { @@ -968,26 +976,32 @@ bool PaintLayerScrollableArea::HasHorizontalOverflow() const { // TODO(szager): Make the algorithm for adding/subtracting overflow:auto - // scrollbars memoryless (crbug.com/625300). This clientWidth hack will + // scrollbars memoryless (crbug.com/625300). This client_width hack will // prevent the spurious horizontal scrollbar, but it can cause a converse // problem: it can leave a sliver of horizontal overflow hidden behind the // vertical scrollbar without creating a horizontal scrollbar. This // converse problem seems to happen much less frequently in practice, so we // bias the logic towards preventing unwanted horizontal scrollbars, which // are more common and annoying. - int client_width = - VisibleContentRect(kIncludeScrollbars).Width() - + LayoutUnit client_width = + LayoutContentRect(kIncludeScrollbars).Width() - VerticalScrollbarWidth(kIgnorePlatformAndCSSOverlayScrollbarSize); if (NeedsRelayout() && !HadVerticalScrollbarBeforeRelayout()) client_width += VerticalScrollbarWidth(); - return PixelSnappedScrollWidth() > client_width; + LayoutUnit scroll_width(ScrollWidth()); + LayoutUnit box_x = Box().Location().X(); + return SnapSizeToPixel(scroll_width, box_x) > + SnapSizeToPixel(client_width, box_x); } bool PaintLayerScrollableArea::HasVerticalOverflow() const { - int client_height = - VisibleContentRect(kIncludeScrollbars).Height() - + LayoutUnit client_height = + LayoutContentRect(kIncludeScrollbars).Height() - HorizontalScrollbarHeight(kIgnorePlatformAndCSSOverlayScrollbarSize); - return PixelSnappedScrollHeight() > client_height; + LayoutUnit scroll_height(ScrollHeight()); + LayoutUnit box_y = Box().Location().Y(); + return SnapSizeToPixel(scroll_height, box_y) > + SnapSizeToPixel(client_height, box_y); } // This function returns true if the given box requires overflow scrollbars (as
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h index 9766a56a..a8156bb 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
@@ -528,6 +528,7 @@ void UpdateScrollCornerStyle(); LayoutSize MinimumSizeForResizing(float zoom_factor); + LayoutRect LayoutContentRect(IncludeScrollbarsInRect) const; // See comments on isPointInResizeControl. void UpdateResizerAreaSet();
diff --git a/third_party/WebKit/Source/core/paint/VideoPainterTest.cpp b/third_party/WebKit/Source/core/paint/VideoPainterTest.cpp index 9e24b456..c9044f4 100644 --- a/third_party/WebKit/Source/core/paint/VideoPainterTest.cpp +++ b/third_party/WebKit/Source/core/paint/VideoPainterTest.cpp
@@ -55,7 +55,8 @@ std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient* client) override { + WebMediaPlayerClient* client, + WebLayerTreeView* view) override { return WTF::MakeUnique<StubWebMediaPlayer>(client); } };
diff --git a/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp index 28e45ab..57622a1e 100644 --- a/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp
@@ -2654,11 +2654,20 @@ } Color CompositedLayerMapping::LayoutObjectBackgroundColor() const { - return GetLayoutObject().ResolveColor(CSSPropertyBackgroundColor); + const auto& object = GetLayoutObject(); + auto background_color = object.ResolveColor(CSSPropertyBackgroundColor); + if (object.IsLayoutView() && object.GetDocument().IsInMainFrame()) { + return ToLayoutView(object).GetFrameView()->BaseBackgroundColor().Blend( + background_color); + } + return background_color; } void CompositedLayerMapping::UpdateBackgroundColor() { - graphics_layer_->SetBackgroundColor(LayoutObjectBackgroundColor()); + auto color = LayoutObjectBackgroundColor(); + graphics_layer_->SetBackgroundColor(color); + if (scrolling_contents_layer_) + scrolling_contents_layer_->SetBackgroundColor(color); } bool CompositedLayerMapping::PaintsChildren() const {
diff --git a/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMappingTest.cpp b/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMappingTest.cpp index 6df8ae1..ac50b10 100644 --- a/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMappingTest.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMappingTest.cpp
@@ -2323,4 +2323,45 @@ EXPECT_EQ(100, scrolling_layer->ScrollContainerBoundsForTesting().height); } +TEST_P(CompositedLayerMappingTest, MainFrameLayerBackgroundColor) { + GetDocument().View()->UpdateAllLifecyclePhases(); + EXPECT_EQ(Color::kWhite, GetDocument().View()->BaseBackgroundColor()); + auto* view_layer = + GetDocument().GetLayoutViewItem().Layer()->GraphicsLayerBacking(); + EXPECT_EQ(Color::kWhite, view_layer->BackgroundColor()); + + Color base_background(255, 0, 0); + GetDocument().View()->SetBaseBackgroundColor(base_background); + GetDocument().body()->setAttribute(HTMLNames::styleAttr, + "background: rgba(0, 255, 0, 0.5)"); + GetDocument().View()->UpdateAllLifecyclePhases(); + EXPECT_EQ(base_background, GetDocument().View()->BaseBackgroundColor()); + EXPECT_EQ(Color(127, 128, 0, 255), view_layer->BackgroundColor()); +} + +TEST_P(CompositedLayerMappingTest, ScrollingLayerBackgroundColor) { + SetBodyInnerHTML( + "<style>.color {background-color: blue}</style>" + "<div id='target' style='width: 100px; height: 100px;" + " overflow: scroll; will-change: transform'>" + " <div style='height: 200px'></div>" + "</div>"); + + auto* target = GetDocument().getElementById("target"); + auto* mapping = ToLayoutBoxModelObject(target->GetLayoutObject()) + ->Layer() + ->GetCompositedLayerMapping(); + auto* graphics_layer = mapping->MainGraphicsLayer(); + auto* scrolling_contents_layer = mapping->ScrollingContentsLayer(); + ASSERT_TRUE(graphics_layer); + ASSERT_TRUE(scrolling_contents_layer); + EXPECT_EQ(Color::kTransparent, graphics_layer->BackgroundColor()); + EXPECT_EQ(Color::kTransparent, scrolling_contents_layer->BackgroundColor()); + + target->setAttribute(HTMLNames::classAttr, "color"); + GetDocument().View()->UpdateAllLifecyclePhases(); + EXPECT_EQ(Color(0, 0, 255), graphics_layer->BackgroundColor()); + EXPECT_EQ(Color(0, 0, 255), scrolling_contents_layer->BackgroundColor()); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp index df12ced..24784359 100644 --- a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp +++ b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
@@ -1032,8 +1032,15 @@ if (!fmod(repeating_duration.Value(), simple_duration.Value())) repeat--; - double percent = (interval_.end.Value() - interval_.begin.Value()) / - simple_duration.Value(); + // Use the interval to compute the interval position if we've passed the + // interval end, otherwise use the "repeating duration". This prevents a + // stale interval (with for instance an 'indefinite' end) from yielding an + // invalid interval position. + double last_active_duration = + elapsed >= interval_.end + ? interval_.end.Value() - interval_.begin.Value() + : repeating_duration.Value(); + double percent = last_active_duration / simple_duration.Value(); percent = percent - floor(percent); if (percent < std::numeric_limits<float>::epsilon() || 1 - percent < std::numeric_limits<float>::epsilon())
diff --git a/third_party/WebKit/Source/core/xml/DocumentXSLT.cpp b/third_party/WebKit/Source/core/xml/DocumentXSLT.cpp index a17657d6..afe340ad 100644 --- a/third_party/WebKit/Source/core/xml/DocumentXSLT.cpp +++ b/third_party/WebKit/Source/core/xml/DocumentXSLT.cpp
@@ -39,7 +39,8 @@ DCHECK_EQ(event->type(), "DOMContentLoaded"); ScriptState::Scope scope(script_state); - Document& document = *ToDocument(ExecutionContext::From(script_state)); + Document& document = + *ToDocument(ToExecutionContext(script_state->GetContext())); DCHECK(!document.Parsing()); // Processing instruction (XML documents only).
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp index 4692fd0..29d2c56 100644 --- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp +++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
@@ -1413,7 +1413,7 @@ StringBuilder string_builder; - WebCORS::HTTPHeaderSet access_control_expose_header_set; + WebHTTPHeaderSet access_control_expose_header_set; WebCORS::ExtractCorsExposedHeaderNamesList(WrappedResourceResponse(response_), access_control_expose_header_set); @@ -1431,7 +1431,8 @@ if (!same_origin_request_ && !WebCORS::IsOnAccessControlResponseHeaderWhitelist(it->key) && - !access_control_expose_header_set.Contains(it->key)) + access_control_expose_header_set.find(it->key.Ascii().data()) == + access_control_expose_header_set.end()) continue; string_builder.Append(it->key.LowerASCII()); @@ -1458,13 +1459,14 @@ return g_null_atom; } - WebCORS::HTTPHeaderSet access_control_expose_header_set; + WebHTTPHeaderSet access_control_expose_header_set; WebCORS::ExtractCorsExposedHeaderNamesList(WrappedResourceResponse(response_), access_control_expose_header_set); if (!same_origin_request_ && !WebCORS::IsOnAccessControlResponseHeaderWhitelist(name) && - !access_control_expose_header_set.Contains(name)) { + access_control_expose_header_set.find(name.Ascii().data()) == + access_control_expose_header_set.end()) { LogConsoleError(GetExecutionContext(), "Refused to get unsafe header \"" + name + "\""); return g_null_atom;
diff --git a/third_party/WebKit/Source/devtools/front_end/Tests.js b/third_party/WebKit/Source/devtools/front_end/Tests.js index 7d2ee70f..deeccf62 100644 --- a/third_party/WebKit/Source/devtools/front_end/Tests.js +++ b/third_party/WebKit/Source/devtools/front_end/Tests.js
@@ -930,6 +930,50 @@ } }; + TestSuite.prototype.testRawHeadersWithHSTS = function(url) { + var test = this; + test.takeControl(); + SDK.targetManager.addModelListener( + SDK.NetworkManager, SDK.NetworkManager.Events.ResponseReceived, onResponseReceived); + + this.evaluateInConsole_(` + var img = document.createElement('img'); + img.src = "${url}"; + document.body.appendChild(img); + `, () => {}); + + var count = 0; + function onResponseReceived(event) { + var networkRequest = event.data; + if (!networkRequest.url().startsWith('http')) + return; + switch (++count) { + case 1: // Original redirect + test.assertEquals(301, networkRequest.statusCode); + test.assertEquals('Moved Permanently', networkRequest.statusText); + test.assertTrue(url.endsWith(networkRequest.responseHeaderValue('Location'))); + break; + + case 2: // HSTS internal redirect + test.assertTrue(networkRequest.url().startsWith('http://')); + test.assertEquals(undefined, networkRequest.requestHeadersText()); + test.assertEquals(307, networkRequest.statusCode); + test.assertEquals('Internal Redirect', networkRequest.statusText); + test.assertEquals('HSTS', networkRequest.responseHeaderValue('Non-Authoritative-Reason')); + test.assertTrue(networkRequest.responseHeaderValue('Location').startsWith('https://')); + break; + + case 3: // Final response + test.assertTrue(networkRequest.url().startsWith('https://')); + test.assertTrue(networkRequest.requestHeaderValue('Referer').startsWith('http://127.0.0.1')); + test.assertEquals(200, networkRequest.statusCode); + test.assertEquals('OK', networkRequest.statusText); + test.assertEquals('132', networkRequest.responseHeaderValue('Content-Length')); + test.releaseControl(); + } + } + }; + TestSuite.prototype.waitForTestResultsInConsole = function() { var messages = ConsoleModel.consoleModel.messages(); for (var i = 0; i < messages.length; ++i) {
diff --git a/third_party/WebKit/Source/modules/ModulesInitializer.cpp b/third_party/WebKit/Source/modules/ModulesInitializer.cpp index b23c4d0..48e1227 100644 --- a/third_party/WebKit/Source/modules/ModulesInitializer.cpp +++ b/third_party/WebKit/Source/modules/ModulesInitializer.cpp
@@ -238,14 +238,15 @@ WebFrameClient* web_frame_client, HTMLMediaElement& html_media_element, const WebMediaPlayerSource& source, - WebMediaPlayerClient* media_player_client) const { + WebMediaPlayerClient* media_player_client, + WebLayerTreeView* view) const { HTMLMediaElementEncryptedMedia& encrypted_media = HTMLMediaElementEncryptedMedia::From(html_media_element); WebString sink_id( HTMLMediaElementAudioOutputDevice::sinkId(html_media_element)); return WTF::WrapUnique(web_frame_client->CreateMediaPlayer( source, media_player_client, &encrypted_media, - encrypted_media.ContentDecryptionModule(), sink_id)); + encrypted_media.ContentDecryptionModule(), sink_id, view)); } WebRemotePlaybackClient* ModulesInitializer::CreateWebRemotePlaybackClient(
diff --git a/third_party/WebKit/Source/modules/ModulesInitializer.h b/third_party/WebKit/Source/modules/ModulesInitializer.h index e492ab8..b1d4210a 100644 --- a/third_party/WebKit/Source/modules/ModulesInitializer.h +++ b/third_party/WebKit/Source/modules/ModulesInitializer.h
@@ -34,7 +34,8 @@ WebFrameClient*, HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) const override; + WebMediaPlayerClient*, + WebLayerTreeView*) const override; WebRemotePlaybackClient* CreateWebRemotePlaybackClient( HTMLMediaElement&) const override;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp index 4bb9d3da..21f3dd7 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.cpp
@@ -28,9 +28,9 @@ #include "modules/accessibility/AXARIAGrid.h" +#include "modules/accessibility/AXARIAGridRow.h" #include "modules/accessibility/AXObjectCacheImpl.h" #include "modules/accessibility/AXTableColumn.h" -#include "modules/accessibility/AXTableRow.h" namespace blink { @@ -45,90 +45,74 @@ return new AXARIAGrid(layout_object, ax_object_cache); } -bool AXARIAGrid::AddTableRowChild(AXObject* child, - HeapHashSet<Member<AXObject>>& appended_rows, - unsigned& column_count) { - if (!child || child->RoleValue() != kRowRole) +bool AXARIAGrid::AddRow(AXObject* possible_row) { + if (!possible_row || possible_row->RoleValue() != kRowRole) return false; - if (appended_rows.Contains(child)) - return false; - - // store the maximum number of columns - const unsigned row_cell_count = child->Children().size(); - if (row_cell_count > column_count) - column_count = row_cell_count; - - AXTableRow* row = child->IsTableRow() ? ToAXTableRow(child) : 0; - if (row) { - row->SetRowIndex((int)rows_.size()); - } - rows_.push_back(child); - - // Try adding the row if it's not ignoring accessibility, - // otherwise add its children (the cells) as the grid's children. - if (!child->AccessibilityIsIgnored()) - children_.push_back(child); - else - children_.AppendVector(child->Children()); - - appended_rows.insert(child); + DCHECK(possible_row->IsARIARow()); + AXARIAGridRow* row = ToAXARIAGridRow(possible_row); + row->SetRowIndex(static_cast<int>(rows_.size())); + rows_.push_back(possible_row); return true; } +void AXARIAGrid::ComputeRows(AXObjectVector possible_rows) { + // Only add children that are actually rows. + for (const auto& possible_row : possible_rows) { + if (!AddRow(possible_row)) { + // Normally with good authoring practices, the rows should be children of + // the grid. However, if this is not the case, recursively look for rows + // in the descendants of the non-row child. + if (!possible_row->HasChildren()) + possible_row->AddChildren(); + + ComputeRows(possible_row->Children()); + } + } +} + +unsigned AXARIAGrid::CalculateNumColumns() { + unsigned num_cols = 0; + for (const auto& row : rows_) { + // Store the maximum number of columns. + // TODO do not assume that the children of the rows are the cells. + const unsigned num_cells_in_row = row->Children().size(); + if (num_cells_in_row > num_cols) + num_cols = num_cells_in_row; + } + return num_cols; +} + +void AXARIAGrid::AddColumnChildren(unsigned num_cols) { + AXObjectCacheImpl& ax_cache = AxObjectCache(); + for (unsigned i = 0; i < num_cols; ++i) { + AXTableColumn* column = ToAXTableColumn(ax_cache.GetOrCreate(kColumnRole)); + column->SetColumnIndex((int)i); + column->SetParent(this); + columns_.push_back(column); + if (!column->AccessibilityIsIgnored()) // TODO is this check necessary? + children_.push_back(column); + } +} + +void AXARIAGrid::AddHeaderContainerChild() { + AXObject* header_container_object = HeaderContainer(); + if (header_container_object && + !header_container_object->AccessibilityIsIgnored()) + children_.push_back(header_container_object); +} + void AXARIAGrid::AddChildren() { DCHECK(!IsDetached()); DCHECK(!have_children_); - if (!IsAXTable()) { - AXLayoutObject::AddChildren(); - return; + AXLayoutObject::AddChildren(); + + if (IsAXTable() && layout_object_) { + ComputeRows(children_); + AddColumnChildren(CalculateNumColumns()); + AddHeaderContainerChild(); } - - have_children_ = true; - if (!layout_object_) - return; - - HeapVector<Member<AXObject>> children; - for (AXObject* child = RawFirstChild(); child; - child = child->RawNextSibling()) - children.push_back(child); - ComputeAriaOwnsChildren(children); - - AXObjectCacheImpl& ax_cache = AxObjectCache(); - - // Only add children that are actually rows. - HeapHashSet<Member<AXObject>> appended_rows; - unsigned column_count = 0; - for (const auto& child : children) { - if (!AddTableRowChild(child, appended_rows, column_count)) { - // in case the layout tree doesn't match the expected ARIA hierarchy, look - // at the children - if (!child->HasChildren()) - child->AddChildren(); - - // The children of this non-row will contain all non-ignored elements - // (recursing to find them). This allows the table to dive arbitrarily - // deep to find the rows. - for (const auto& child_object : child->Children()) - AddTableRowChild(child_object.Get(), appended_rows, column_count); - } - } - - // make the columns based on the number of columns in the first body - for (unsigned i = 0; i < column_count; ++i) { - AXTableColumn* column = ToAXTableColumn(ax_cache.GetOrCreate(kColumnRole)); - column->SetColumnIndex((int)i); - column->SetParent(this); - columns_.push_back(column); - if (!column->AccessibilityIsIgnored()) - children_.push_back(column); - } - - AXObject* header_container_object = HeaderContainer(); - if (header_container_object && - !header_container_object->AccessibilityIsIgnored()) - children_.push_back(header_container_object); } } // namespace blink
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h index 4a9cc7fb..d42a08d 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGrid.h
@@ -59,9 +59,11 @@ bool SupportsSelectedRows() override { return true; } bool IsTableExposableThroughAccessibility() const override { return true; } - bool AddTableRowChild(AXObject*, - HeapHashSet<Member<AXObject>>& appended_rows, - unsigned& column_count); + void ComputeRows(AXObjectVector from_child_list); + bool AddRow(AXObject*); + unsigned CalculateNumColumns(); + void AddColumnChildren(unsigned num_cols); + void AddHeaderContainerChild(); }; } // namespace blink
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.cpp b/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.cpp index d3e2c12..6d1fc4f9 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.cpp
@@ -73,10 +73,15 @@ return parent; } -void AXARIAGridCell::RowIndexRange(std::pair<unsigned, unsigned>& row_range) { +bool AXARIAGridCell::RowIndexRange( + std::pair<unsigned, unsigned>& row_range) const { AXObject* parent = ParentObjectUnignored(); if (!parent) - return; + return false; + + // Use native table semantics if this is ARIA overlayed on an HTML table. + if (AXTableCell::RowIndexRange(row_range)) + return true; if (parent->IsTableRow()) { // We already got a table row, use its API. @@ -86,7 +91,7 @@ // children to determine the row index for the cell in it. unsigned column_count = ToAXTable(parent)->ColumnCount(); if (!column_count) - return; + return false; const auto& siblings = parent->Children(); unsigned children_size = siblings.size(); @@ -98,18 +103,23 @@ } } - // as far as I can tell, grid cells cannot span rows + // TODO should aria-rowspan be checked here? We also support it another way. row_range.second = 1; + return true; } -void AXARIAGridCell::ColumnIndexRange( - std::pair<unsigned, unsigned>& column_range) { +bool AXARIAGridCell::ColumnIndexRange( + std::pair<unsigned, unsigned>& column_range) const { AXObject* parent = ParentObjectUnignored(); if (!parent) - return; + return false; + + // Use native table semantics if this is ARIA overlayed on an HTML table. + if (AXTableCell::ColumnIndexRange(column_range)) + return true; if (!parent->IsTableRow() && !parent->IsAXTable()) - return; + return false; const auto& siblings = parent->Children(); unsigned children_size = siblings.size(); @@ -120,8 +130,9 @@ } } - // as far as I can tell, grid cells cannot span columns + // TODO should aria-colspan be checked here? We also support it another way. column_range.second = 1; + return true; } AccessibilityRole AXARIAGridCell::ScanToDecideHeaderRole() { @@ -131,7 +142,7 @@ if (IsAriaColumnHeader()) return kColumnHeaderRole; - return kCellRole; + return AXTableCell::ScanToDecideHeaderRole(); } AXRestriction AXARIAGridCell::Restriction() const {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.h b/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.h index 67cf5ac..d97e528b 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.h +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGridCell.h
@@ -46,9 +46,10 @@ ~AXARIAGridCell() override; // fills in the start location and row span of cell - void RowIndexRange(std::pair<unsigned, unsigned>& row_range) override; + bool RowIndexRange(std::pair<unsigned, unsigned>& row_range) const override; // fills in the start location and column span of cell - void ColumnIndexRange(std::pair<unsigned, unsigned>& column_range) override; + bool ColumnIndexRange( + std::pair<unsigned, unsigned>& column_range) const override; AccessibilityRole ScanToDecideHeaderRole() final; AXRestriction Restriction() const final; bool CanSetSelectedAttribute() const final {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp b/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp index 092adf80..bc092282 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.cpp
@@ -44,12 +44,13 @@ return new AXARIAGridRow(layout_object, ax_object_cache); } -bool AXARIAGridRow::IsARIATreeGridRow() const { +bool AXARIAGridRow::IsARIARow() const { AXObject* parent = ParentTable(); if (!parent) return false; - return parent->AriaRoleAttribute() == kTreeGridRole; + AccessibilityRole parent_role = parent->AriaRoleAttribute(); + return parent_role == kTreeGridRole || parent_role == kGridRole; } void AXARIAGridRow::HeaderObjectsForRow(AXObjectVector& headers) { @@ -59,4 +60,14 @@ } } +AXObject* AXARIAGridRow::ParentTable() const { + // A poorly-authored ARIA grid row could be nested within wrapper elements. + AXObject* ancestor = static_cast<AXObject*>(const_cast<AXARIAGridRow*>(this)); + do { + ancestor = ancestor->ParentObjectUnignored(); + } while (ancestor && !ancestor->IsAXTable()); + + return ancestor; +} + } // namespace blink
diff --git a/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.h b/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.h index 07ca1c0..f907bae2 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.h +++ b/third_party/WebKit/Source/modules/accessibility/AXARIAGridRow.h
@@ -49,11 +49,14 @@ bool CanSetSelectedAttribute() const final { return Restriction() != kDisabled; } + AXObject* ParentTable() const final; private: - bool IsARIATreeGridRow() const override; + bool IsARIARow() const final; }; +DEFINE_AX_OBJECT_TYPE_CASTS(AXARIAGridRow, IsARIARow()); + } // namespace blink #endif // AXARIAGridRow_h
diff --git a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp index ccf0ee6..551b23da 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.cpp
@@ -569,24 +569,7 @@ return false; if (layout_object_->IsText()) { - LayoutText* layout_text = ToLayoutText(layout_object_); - if (!layout_text->HasTextBoxes()) { - if (ignored_reasons) - ignored_reasons->push_back(IgnoredReason(kAXEmptyText)); - return true; - } - - // Don't ignore static text in editable text controls. - for (AXObject* parent = ParentObject(); parent; - parent = parent->ParentObject()) { - if (parent->RoleValue() == kTextFieldRole) - return false; - } - - // Text elements that are just empty whitespace should not be returned. - // FIXME(dmazzoni): we probably shouldn't ignore this if the style is 'pre', - // or similar... - if (layout_text->GetText().Impl()->ContainsOnlyWhitespace()) { + if (CanIgnoreTextAsEmpty()) { if (ignored_reasons) ignored_reasons->push_back(IgnoredReason(kAXEmptyText)); return true; @@ -749,6 +732,86 @@ return true; } +bool AXLayoutObject::IsFocusableByDefault(Element* elem) const { + // These are the only naturally focusable elements that are focusable without + // contenteditable or tabindex. + DCHECK(elem); + return elem->IsFormControlElement() || elem->HasTagName(aTag) || + elem->HasTagName(audioTag) || elem->HasTagName(iframeTag) || + elem->HasTagName(summaryTag) || elem->HasTagName(videoTag); +} + +bool AXLayoutObject::HasAriaCellRole(Element* elem) const { + DCHECK(elem); + const AtomicString& aria_role_str = elem->FastGetAttribute(roleAttr); + if (aria_role_str.IsEmpty()) + return false; + + AccessibilityRole aria_role = AriaRoleToWebCoreRole(aria_role_str); + return aria_role == kCellRole || aria_role == kColumnHeaderRole || + aria_role == kRowHeaderRole; +} + +// Return true if whitespace is not necessary to keep adjacent_node separate +// in screen reader output from surrounding nodes. +bool AXLayoutObject::CanIgnoreSpaceNextTo(Node* adjacent_node) const { + if (!adjacent_node) + return true; + if (!adjacent_node->IsElementNode()) + return false; + + // Use layout whitespace to separate elements if a screen reader would + // otherwise incorrectly merge the text without whitespace in its output. + // Elements that are naturally focusable even without a tabindex tend + // to be rendered separately even if there is no space between them. + // Some ARIA roles act like table cells and don't need adjacent whitespace to + // indicate separation. + // False negatives are acceptable in that they merely lead to extra whitespace + // static text nodes. + Element* adjacent_elem = ToElement(adjacent_node); + return IsFocusableByDefault(adjacent_elem) || HasAriaCellRole(adjacent_elem); +} + +bool AXLayoutObject::CanIgnoreTextAsEmpty() const { + DCHECK(layout_object_->IsText()); + LayoutText* layout_text = ToLayoutText(layout_object_); + if (!layout_text->HasTextBoxes()) { + return true; + } + + // Ignore empty text + if (layout_text->HasEmptyText()) { + return true; + } + + // Don't ignore node-less text (e.g. list bullets) + Node* node = GetNode(); + if (!node) + return false; + + // Don't ignore static text in editable text controls. + if (HasEditableStyle(*node)) + return false; + + // Ignore extra whitespace-only text if a sibling doesn't will be presented + // separately by scren readers whether whitespace is there or not. + // Using "skipping children" methods as we need the closest element to the + // whitespace markup-wise, e.g. tag1 in these examples: + // [whitespace] <tag1><tag2>x</tag2></tag1> + // <span>[whitespace]</span> <tag1><tag2>x</tag2></tag1> + if (layout_text->GetText().Impl()->ContainsOnlyWhitespace() && + (CanIgnoreSpaceNextTo(FlatTreeTraversal::NextSkippingChildren(*node)) || + CanIgnoreSpaceNextTo( + FlatTreeTraversal::PreviousSkippingChildren(*node)))) + return true; + + // Text elements with empty whitespace are returned, because of cases + // such as <span>Hello</span><span> </span><span>World</span>. Keeping + // the whitespace-only node means we now correctly expose "Hello World". + // See crbug.com/435765. + return false; +} + // // Properties of static elements. // @@ -1906,9 +1969,9 @@ return blink::VisiblePositionForIndex(node_index + offset, parent); } -void AXLayoutObject::SetSelection(const AXRange& selection) { +bool AXLayoutObject::OnNativeSetSelectionAction(const AXRange& selection) { if (!GetLayoutObject() || !selection.IsValid()) - return; + return false; AXObject* anchor_object = selection.anchor_object ? selection.anchor_object.Get() : this; @@ -1917,7 +1980,7 @@ if (!IsValidSelectionBound(anchor_object) || !IsValidSelectionBound(focus_object)) { - return; + return false; } // The selection offsets are offsets into the accessible value. @@ -1935,12 +1998,12 @@ selection.anchor_offset, kSelectionHasBackwardDirection); } - return; + return true; } LocalFrame* frame = GetLayoutObject()->GetFrame(); if (!frame || !frame->Selection().IsAvailable()) - return; + return false; // TODO(editing-dev): Use of updateStyleAndLayoutIgnorePendingStylesheets // needs to be audited. see http://crbug.com/590369 for more details. @@ -1955,13 +2018,14 @@ VisiblePosition focus_visible_position = ToVisiblePosition(focus_object, selection.focus_offset); if (anchor_visible_position.IsNull() || focus_visible_position.IsNull()) - return; + return false; frame->Selection().SetSelection( SelectionInDOMTree::Builder() .Collapse(anchor_visible_position.ToPositionWithAffinity()) .Extend(focus_visible_position.DeepEquivalent()) .Build()); + return true; } bool AXLayoutObject::IsValidSelectionBound(const AXObject* bound_object) const { @@ -1972,19 +2036,26 @@ &bound_object->AxObjectCache() == &AxObjectCache(); } -void AXLayoutObject::SetValue(const String& string) { +bool AXLayoutObject::OnNativeSetValueAction(const String& string) { if (!GetNode() || !GetNode()->IsElementNode()) - return; + return false; if (!layout_object_ || !layout_object_->IsBoxModelObject()) - return; + return false; LayoutBoxModelObject* layout_object = ToLayoutBoxModelObject(layout_object_); - if (layout_object->IsTextField() && isHTMLInputElement(*GetNode())) + if (layout_object->IsTextField() && isHTMLInputElement(*GetNode())) { toHTMLInputElement(*GetNode()) .setValue(string, kDispatchInputAndChangeEvent); - else if (layout_object->IsTextArea() && isHTMLTextAreaElement(*GetNode())) + return true; + } + + if (layout_object->IsTextArea() && isHTMLTextAreaElement(*GetNode())) { toHTMLTextAreaElement(*GetNode()) .setValue(string, kDispatchInputAndChangeEvent); + return true; + } + + return false; } //
diff --git a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.h b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.h index 809d0a4..85e2dfc 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.h +++ b/third_party/WebKit/Source/modules/accessibility/AXLayoutObject.h
@@ -140,11 +140,13 @@ AXRelatedObjectVector*, NameSources*) const override; - // Methods that retrieve or manipulate the current selection. + // Modify or take an action on an object. + bool OnNativeSetSelectionAction(const AXRange&) override; + bool OnNativeSetValueAction(const String&) override; + // Methods that retrieve or manipulate the current selection. AXRange Selection() const override; AXRange SelectionUnderObject() const override; - void SetSelection(const AXRange&) override; // Hit testing. AXObject* AccessibilityHitTest(const IntPoint&) const override; @@ -175,8 +177,6 @@ LocalFrameView* DocumentFrameView() const override; Element* AnchorElement() const override; - void SetValue(const String&) override; - // Notifications that this object may have changed. void HandleActiveDescendantChanged() override; void HandleAriaExpandedChanged() override; @@ -210,6 +210,11 @@ AXRange TextControlSelection() const; int IndexForVisiblePosition(const VisiblePosition&) const; AXLayoutObject* GetUnignoredObjectFromNode(Node&) const; + + bool CanIgnoreTextAsEmpty() const; + bool CanIgnoreSpaceNextTo(Node*) const; + bool IsFocusableByDefault(Element*) const; + bool HasAriaCellRole(Element*) const; }; DEFINE_AX_OBJECT_TYPE_CASTS(AXLayoutObject, IsAXLayoutObject());
diff --git a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp index bd0ae00..bb2e373 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.cpp
@@ -136,19 +136,20 @@ return text_alternative; } -void AXListBoxOption::SetSelected(bool selected) { +bool AXListBoxOption::OnNativeSetSelectedAction(bool selected) { HTMLSelectElement* select_element = ListBoxOptionParentNode(); if (!select_element) - return; + return false; if (!CanSetSelectedAttribute()) - return; + return false; bool is_option_selected = IsSelected(); if ((is_option_selected && selected) || (!is_option_selected && !selected)) - return; + return false; select_element->SelectOptionByAccessKey(toHTMLOptionElement(GetNode())); + return true; } HTMLSelectElement* AXListBoxOption::ListBoxOptionParentNode() const {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.h b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.h index fe29685..77ddc4d2 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.h +++ b/third_party/WebKit/Source/modules/accessibility/AXListBoxOption.h
@@ -52,7 +52,7 @@ AccessibilityRole DetermineAccessibilityRole() final; bool IsSelected() const override; bool IsSelectedOptionActive() const override; - void SetSelected(bool) override; + bool OnNativeSetSelectedAction(bool) override; String TextAlternative(bool recursive, bool in_aria_labelled_by_traversal,
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp index af728ec..240a30f 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXMenuList.cpp
@@ -48,7 +48,7 @@ return kPopUpButtonRole; } -bool AXMenuList::Press() { +bool AXMenuList::OnNativeClickAction() { if (!layout_object_) return false;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuList.h b/third_party/WebKit/Source/modules/accessibility/AXMenuList.h index e9285d3..3d23c4843 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXMenuList.h +++ b/third_party/WebKit/Source/modules/accessibility/AXMenuList.h
@@ -41,7 +41,7 @@ bool IsCollapsed() const override; AccessibilityExpanded IsExpanded() const final; - bool Press() override; + bool OnNativeClickAction() override; void ClearChildren() override; void DidUpdateActiveOption(int option_index);
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp index 44b23cb1..7378afab 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.cpp
@@ -119,11 +119,12 @@ return element_ && element_->Selected(); } -void AXMenuListOption::SetSelected(bool b) { +bool AXMenuListOption::OnNativeSetSelectedAction(bool b) { if (!element_ || !CanSetSelectedAttribute()) - return; + return false; element_->SetSelected(b); + return true; } bool AXMenuListOption::ComputeAccessibilityIsIgnored(
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.h b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.h index 07512b2b..c5135fd 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.h +++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListOption.h
@@ -61,7 +61,7 @@ bool IsVisible() const override; bool IsOffScreen() const override; bool IsSelected() const override; - void SetSelected(bool) override; + bool OnNativeSetSelectedAction(bool) override; void GetRelativeBounds(AXObject** out_container, FloatRect& out_bounds_in_container,
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp index 41effbaf..bca7bbf 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.cpp
@@ -81,12 +81,11 @@ return html_select_element->selectedIndex(); } -bool AXMenuListPopup::Press() { +bool AXMenuListPopup::OnNativeClickAction() { if (!parent_) return false; - parent_->Press(); - return true; + return parent_->OnNativeClickAction(); } void AXMenuListPopup::AddChildren() {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.h b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.h index d57e5870..6252ef7 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.h +++ b/third_party/WebKit/Source/modules/accessibility/AXMenuListPopup.h
@@ -59,7 +59,7 @@ AccessibilityRole RoleValue() const override { return kMenuListPopupRole; } bool IsVisible() const override; - bool Press() override; + bool OnNativeClickAction() override; void AddChildren() override; bool ComputeAccessibilityIsIgnored(IgnoredReasons* = nullptr) const override;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp index 8648838..4f745aa 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -341,7 +341,7 @@ value += increase ? step : -step; - SetValue(String::Number(value)); + OnNativeSetValueAction(String::Number(value)); AxObjectCache().PostNotification(GetNode(), AXObjectCacheImpl::kAXValueChanged); } @@ -2545,50 +2545,57 @@ return Traversal<HTMLLabelElement>::FirstAncestorOrSelf(*GetNode()); } -void AXNodeObject::SetFocused(bool on) { +bool AXNodeObject::OnNativeFocusAction() { if (!CanSetFocusAttribute()) - return; + return false; - Document* document = this->GetDocument(); - if (!on) { + Document* document = GetDocument(); + if (IsWebArea()) { document->ClearFocusedElement(); - } else { - Node* node = this->GetNode(); - if (node && node->IsElementNode()) { - // If this node is already the currently focused node, then calling - // focus() won't do anything. That is a problem when focus is removed - // from the webpage to chrome, and then returns. In these cases, we need - // to do what keyboard and mouse focus do, which is reset focus first. - if (document->FocusedElement() == node) - document->ClearFocusedElement(); - - ToElement(node)->focus(); - } else { - document->ClearFocusedElement(); - } + return true; } + + Element* element = GetElement(); + if (!element) { + document->ClearFocusedElement(); + return true; + } + + // If this node is already the currently focused node, then calling + // focus() won't do anything. That is a problem when focus is removed + // from the webpage to chrome, and then returns. In these cases, we need + // to do what keyboard and mouse focus do, which is reset focus first. + if (document->FocusedElement() == element) + document->ClearFocusedElement(); + + element->focus(); + return true; } -void AXNodeObject::Increment() { +bool AXNodeObject::OnNativeIncrementAction() { LocalFrame* frame = GetDocument() ? GetDocument()->GetFrame() : nullptr; std::unique_ptr<UserGestureIndicator> gesture_indicator = LocalFrame::CreateUserGesture(frame, UserGestureToken::kNewGesture); AlterSliderValue(true); + return true; } -void AXNodeObject::Decrement() { +bool AXNodeObject::OnNativeDecrementAction() { LocalFrame* frame = GetDocument() ? GetDocument()->GetFrame() : nullptr; std::unique_ptr<UserGestureIndicator> gesture_indicator = LocalFrame::CreateUserGesture(frame, UserGestureToken::kNewGesture); AlterSliderValue(false); + return true; } -void AXNodeObject::SetSequentialFocusNavigationStartingPoint() { +bool AXNodeObject::OnNativeSetSequentialFocusNavigationStartingPointAction() { if (!GetNode()) - return; + return false; - GetNode()->GetDocument().ClearFocusedElement(); - GetNode()->GetDocument().SetSequentialFocusNavigationStartingPoint(GetNode()); + Document* document = GetDocument(); + document->ClearFocusedElement(); + document->SetSequentialFocusNavigationStartingPoint(GetNode()); + return true; } void AXNodeObject::ChildrenChanged() {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h index 5e3d831..c8c8110 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h +++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.h
@@ -204,10 +204,10 @@ Node* GetNode() const override { return node_; } // Modify or take an action on an object. - void SetFocused(bool) final; - void Increment() final; - void Decrement() final; - void SetSequentialFocusNavigationStartingPoint() final; + bool OnNativeFocusAction() final; + bool OnNativeIncrementAction() final; + bool OnNativeDecrementAction() final; + bool OnNativeSetSequentialFocusNavigationStartingPointAction() final; // Notifications that this object may have changed. void ChildrenChanged() override;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp index a525d30..70e5931 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -42,6 +42,8 @@ #include "core/html/HTMLFrameOwnerElement.h" #include "core/html/HTMLInputElement.h" #include "core/html/parser/HTMLParserIdioms.h" +#include "core/input/ContextMenuAllowedScope.h" +#include "core/input/EventHandler.h" #include "core/layout/LayoutBoxModelObject.h" #include "core/layout/LayoutView.h" #include "core/page/Page.h" @@ -1796,11 +1798,30 @@ // Modify or take an action on an object. // -bool AXObject::PerformDefaultAction() { - return Press(); +bool AXObject::RequestDecrementAction() { + Element* element = GetElement(); + if (element) { + Event* event = Event::CreateCancelable(EventTypeNames::accessibledecrement); + if (DispatchEventToAOMEventListeners(*event, element)) { + return true; + } + } + + return OnNativeDecrementAction(); } -bool AXObject::Press() { +bool AXObject::RequestClickAction() { + Element* element = GetElement(); + if (element) { + Event* event = Event::CreateCancelable(EventTypeNames::accessibleclick); + if (DispatchEventToAOMEventListeners(*event, element)) + return true; + } + + return OnNativeClickAction(); +} + +bool AXObject::OnNativeClickAction() { Document* document = GetDocument(); if (!document) return false; @@ -1809,29 +1830,93 @@ LocalFrame::CreateUserGesture(document->GetFrame(), UserGestureToken::kNewGesture); Element* action_elem = ActionElement(); - Event* event = Event::CreateCancelable(EventTypeNames::accessibleclick); - if (DispatchEventToAOMEventListeners(*event, action_elem)) { - return true; - } - if (action_elem) { action_elem->AccessKeyAction(true); return true; } - if (CanSetFocusAttribute()) { - SetFocused(true); - return true; - } + if (CanSetFocusAttribute()) + return OnNativeFocusAction(); return false; } -void AXObject::ScrollToMakeVisible() const { +bool AXObject::RequestFocusAction() { + Element* element = GetElement(); + if (element) { + Event* event = Event::CreateCancelable(EventTypeNames::accessiblefocus); + if (DispatchEventToAOMEventListeners(*event, element)) + return true; + } + + return OnNativeFocusAction(); +} + +bool AXObject::RequestIncrementAction() { + Element* element = GetElement(); + if (element) { + Event* event = Event::CreateCancelable(EventTypeNames::accessibleincrement); + if (DispatchEventToAOMEventListeners(*event, element)) + return true; + } + + return OnNativeIncrementAction(); +} + +bool AXObject::RequestScrollToGlobalPointAction(const IntPoint& point) { + return OnNativeScrollToGlobalPointAction(point); +} + +bool AXObject::RequestScrollToMakeVisibleAction() { + Element* element = GetElement(); + if (element) { + Event* event = + Event::CreateCancelable(EventTypeNames::accessiblescrollintoview); + if (DispatchEventToAOMEventListeners(*event, element)) + return true; + } + + return OnNativeScrollToMakeVisibleAction(); +} + +bool AXObject::RequestScrollToMakeVisibleWithSubFocusAction( + const IntRect& subfocus) { + return OnNativeScrollToMakeVisibleWithSubFocusAction(subfocus); +} + +bool AXObject::RequestSetSelectedAction(bool selected) { + return OnNativeSetSelectedAction(selected); +} + +bool AXObject::RequestSetSelectionAction(const AXRange& range) { + return OnNativeSetSelectionAction(range); +} + +bool AXObject::RequestSetSequentialFocusNavigationStartingPointAction() { + return OnNativeSetSequentialFocusNavigationStartingPointAction(); +} + +bool AXObject::RequestSetValueAction(const String& value) { + return OnNativeSetValueAction(value); +} + +bool AXObject::RequestShowContextMenuAction() { + Element* element = GetElement(); + if (element) { + Event* event = + Event::CreateCancelable(EventTypeNames::accessiblecontextmenu); + if (DispatchEventToAOMEventListeners(*event, element)) + return true; + } + + return OnNativeShowContextMenuAction(); +} + +bool AXObject::OnNativeScrollToMakeVisibleAction() const { Node* node = GetNode(); LayoutObject* layout_object = node ? node->GetLayoutObject() : nullptr; if (!layout_object || !node->isConnected()) - return; + return false; LayoutRect target_rect(layout_object->AbsoluteBoundingBoxRect()); layout_object->ScrollRectToVisible( target_rect, ScrollAlignment::kAlignCenterIfNeeded, @@ -1841,13 +1926,15 @@ AxObjectCache().PostNotification( AxObjectCache().GetOrCreate(GetDocument()->GetLayoutView()), AXObjectCacheImpl::kAXLocationChanged); + return true; } -void AXObject::ScrollToMakeVisibleWithSubFocus(const IntRect& rect) const { +bool AXObject::OnNativeScrollToMakeVisibleWithSubFocusAction( + const IntRect& rect) const { Node* node = GetNode(); LayoutObject* layout_object = node ? node->GetLayoutObject() : nullptr; if (!layout_object || !node->isConnected()) - return; + return false; LayoutRect target_rect( layout_object->LocalToAbsoluteQuad(FloatQuad(FloatRect(rect))) .BoundingBox()); @@ -1865,13 +1952,15 @@ AxObjectCache().PostNotification( AxObjectCache().GetOrCreate(GetDocument()->GetLayoutView()), AXObjectCacheImpl::kAXLocationChanged); + return true; } -void AXObject::ScrollToGlobalPoint(const IntPoint& global_point) const { +bool AXObject::OnNativeScrollToGlobalPointAction( + const IntPoint& global_point) const { Node* node = GetNode(); LayoutObject* layout_object = node ? node->GetLayoutObject() : nullptr; if (!layout_object || !node->isConnected()) - return; + return false; LayoutRect target_rect(layout_object->AbsoluteBoundingBoxRect()); target_rect.MoveBy(-global_point); layout_object->ScrollRectToVisible( @@ -1882,13 +1971,57 @@ AxObjectCache().PostNotification( AxObjectCache().GetOrCreate(GetDocument()->GetLayoutView()), AXObjectCacheImpl::kAXLocationChanged); + return true; } -void AXObject::SetSequentialFocusNavigationStartingPoint() { +bool AXObject::OnNativeSetSequentialFocusNavigationStartingPointAction() { // Call it on the nearest ancestor that overrides this with a specific // implementation. - if (ParentObject()) - ParentObject()->SetSequentialFocusNavigationStartingPoint(); + if (ParentObject()) { + return ParentObject() + ->OnNativeSetSequentialFocusNavigationStartingPointAction(); + } + return false; +} + +bool AXObject::OnNativeDecrementAction() { + return false; +} + +bool AXObject::OnNativeFocusAction() { + return false; +} + +bool AXObject::OnNativeIncrementAction() { + return false; +} + +bool AXObject::OnNativeSetValueAction(const String&) { + return false; +} + +bool AXObject::OnNativeSetSelectedAction(bool) { + return false; +} + +bool AXObject::OnNativeSetSelectionAction(const AXRange& range) { + return false; +} + +bool AXObject::OnNativeShowContextMenuAction() { + Element* element = GetElement(); + if (!element) + element = ParentObject() ? ParentObject()->GetElement() : nullptr; + if (!element) + return false; + + Document* document = GetDocument(); + if (!document || !document->GetFrame()) + return false; + + ContextMenuAllowedScope scope; + document->GetFrame()->GetEventHandler().ShowNonLocatedContextMenu(element); + return true; } void AXObject::NotifyIfIgnoredValueChanged() {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.h b/third_party/WebKit/Source/modules/accessibility/AXObject.h index fd213d2..11fb399 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObject.h +++ b/third_party/WebKit/Source/modules/accessibility/AXObject.h
@@ -380,7 +380,7 @@ // Check object role or purpose. virtual AccessibilityRole RoleValue() const { return role_; } bool IsARIATextControl() const; - virtual bool IsARIATreeGridRow() const { return false; } + virtual bool IsARIARow() const { return false; } virtual bool IsAXTable() const { return false; } virtual bool IsAnchor() const { return false; } bool IsButton() const; @@ -752,7 +752,6 @@ // current object as the starting point. Returns a null selection if there is // no selection in the subtree rooted at this object. virtual AXRange SelectionUnderObject() const { return AXRange(); } - virtual void SetSelection(const AXRange&) {} // Scrollable containers. bool IsScrollableContainer() const; @@ -765,24 +764,44 @@ virtual ScrollableArea* GetScrollableAreaIfScrollable() const { return 0; } // Modify or take an action on an object. - virtual void Increment() {} - virtual void Decrement() {} - bool PerformDefaultAction(); - virtual bool Press(); - // Make this object visible by scrolling as many nested scrollable views as - // needed. - void ScrollToMakeVisible() const; - // Same, but if the whole object can't be made visible, try for this subrect, - // in local coordinates. - void ScrollToMakeVisibleWithSubFocus(const IntRect&) const; - // Scroll this object to a given point in global coordinates of the top-level - // window. - void ScrollToGlobalPoint(const IntPoint&) const; - virtual void SetFocused(bool) {} - virtual void SetSelected(bool) {} - virtual void SetSequentialFocusNavigationStartingPoint(); - virtual void SetValue(const String&) {} - virtual void SetValue(float) {} + // + // These are the public interfaces, called from outside of Blink. + // Each one first tries to fire an Accessibility Object Model event, + // if applicable, and if that isn't handled, falls back on the + // native implementation via a virtual member function, below. + // + // For example, |RequestIncrementAction| fires the AOM event and if + // that isn't handled it calls |DoNativeIncrement|. + // + // These all return true if handled. + bool RequestDecrementAction(); + bool RequestClickAction(); + bool RequestFocusAction(); + bool RequestIncrementAction(); + bool RequestScrollToGlobalPointAction(const IntPoint&); + bool RequestScrollToMakeVisibleAction(); + bool RequestScrollToMakeVisibleWithSubFocusAction(const IntRect&); + bool RequestSetSelectedAction(bool); + bool RequestSetSelectionAction(const AXRange&); + bool RequestSetSequentialFocusNavigationStartingPointAction(); + bool RequestSetValueAction(const String&); + bool RequestShowContextMenuAction(); + + // Native implementations of actions that aren't handled by AOM + // event listeners. These all return true if handled. + virtual bool OnNativeDecrementAction(); + virtual bool OnNativeClickAction(); + virtual bool OnNativeFocusAction(); + virtual bool OnNativeIncrementAction(); + virtual bool OnNativeScrollToGlobalPointAction(const IntPoint&) const; + virtual bool OnNativeScrollToMakeVisibleAction() const; + virtual bool OnNativeScrollToMakeVisibleWithSubFocusAction( + const IntRect&) const; + virtual bool OnNativeSetSelectedAction(bool); + virtual bool OnNativeSetSelectionAction(const AXRange&); + virtual bool OnNativeSetSequentialFocusNavigationStartingPointAction(); + virtual bool OnNativeSetValueAction(const String&); + virtual bool OnNativeShowContextMenuAction(); // Notifications that this object may have changed. virtual void ChildrenChanged() {}
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp index 61b1694..c844b74 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
@@ -272,13 +272,17 @@ // FIXME: This probably belongs on Node. // FIXME: This should take a const char*, but one caller passes nullAtom. -bool NodeHasRole(Node* node, const String& role) { +static bool NodeHasRole(Node* node, const String& role) { if (!node || !node->IsElementNode()) return false; return EqualIgnoringASCIICase(ToElement(node)->getAttribute(roleAttr), role); } +static bool NodeHasGridRole(Node* node) { + return NodeHasRole(node, "grid") || NodeHasRole(node, "treegrid"); +} + AXObject* AXObjectCacheImpl::CreateFromRenderer(LayoutObject* layout_object) { // FIXME: How could layoutObject->node() ever not be an Element? Node* node = layout_object->GetNode(); @@ -292,7 +296,7 @@ return AXList::Create(layout_object, *this); // aria tables - if (NodeHasRole(node, "grid") || NodeHasRole(node, "treegrid")) + if (NodeHasGridRole(node)) return AXARIAGrid::Create(layout_object, *this); if (NodeHasRole(node, "row")) return AXARIAGridRow::Create(layout_object, *this); @@ -324,10 +328,24 @@ // standard tables if (css_box->IsTable()) return AXTable::Create(ToLayoutTable(css_box), *this); - if (css_box->IsTableRow()) + if (css_box->IsTableRow()) { + // In an ARIA [tree]grid, use an ARIA row, otherwise a table row. + LayoutTableRow* table_row = ToLayoutTableRow(css_box); + LayoutTable* containing_table = table_row->Table(); + DCHECK(containing_table); + if (NodeHasGridRole(containing_table->GetNode())) + return AXARIAGridRow::Create(layout_object, *this); return AXTableRow::Create(ToLayoutTableRow(css_box), *this); - if (css_box->IsTableCell()) + } + if (css_box->IsTableCell()) { + // In an ARIA [tree]grid, use an ARIA gridcell, otherwise a table cell. + LayoutTableCell* table_cell = ToLayoutTableCell(css_box); + LayoutTable* containing_table = table_cell->Table(); + DCHECK(containing_table); + if (NodeHasGridRole(containing_table->GetNode())) + return AXARIAGridCell::Create(layout_object, *this); return AXTableCell::Create(ToLayoutTableCell(css_box), *this); + } // progress bar if (css_box->IsProgress())
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h index ed99342..68ce6ff 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h +++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h
@@ -298,7 +298,6 @@ // This is the only subclass of AXObjectCache. DEFINE_TYPE_CASTS(AXObjectCacheImpl, AXObjectCache, cache, true, true); -bool NodeHasRole(Node*, const String& role); // This will let you know if aria-hidden was explicitly set to false. bool IsNodeAriaVisible(Node*);
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp b/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp index 3ce35cba..6c4e6a3a 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXSlider.cpp
@@ -110,16 +110,17 @@ return AxObjectCache().GetOrCreate(layout_object_); } -void AXSlider::SetValue(const String& value) { +bool AXSlider::OnNativeSetValueAction(const String& value) { HTMLInputElement* input = GetInputElement(); if (input->value() == value) - return; + return false; input->setValue(value, kDispatchInputAndChangeEvent); // Fire change event manually, as LayoutSlider::setValueForPosition does. input->DispatchFormControlChangeEvent(); + return true; } HTMLInputElement* AXSlider::GetInputElement() const {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSlider.h b/third_party/WebKit/Source/modules/accessibility/AXSlider.h index 3068f60..f5cd98a1 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXSlider.h +++ b/third_party/WebKit/Source/modules/accessibility/AXSlider.h
@@ -57,7 +57,7 @@ void AddChildren() final; - void SetValue(const String&) final; + bool OnNativeSetValueAction(const String&) final; AccessibilityOrientation Orientation() const final; };
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp index 1e8e30c..6a24333 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.cpp
@@ -128,7 +128,7 @@ *out_container = ParentObject(); } -bool AXSpinButtonPart::Press() { +bool AXSpinButtonPart::OnNativeClickAction() { if (!parent_ || !parent_->IsSpinButton()) return false;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.h b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.h index 85fcad8..a440bd9 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXSpinButton.h +++ b/third_party/WebKit/Source/modules/accessibility/AXSpinButton.h
@@ -70,7 +70,7 @@ explicit AXSpinButtonPart(AXObjectCacheImpl&); bool is_incrementor_ : 1; - bool Press() override; + bool OnNativeClickAction() override; AccessibilityRole RoleValue() const override { return kButtonRole; } bool IsSpinButtonPart() const override { return true; } void GetRelativeBounds(AXObject** out_container,
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableCell.cpp b/third_party/WebKit/Source/modules/accessibility/AXTableCell.cpp index 759acb3..69c60a4 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXTableCell.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXTableCell.cpp
@@ -183,9 +183,10 @@ return ScanToDecideHeaderRole(); } -void AXTableCell::RowIndexRange(std::pair<unsigned, unsigned>& row_range) { +bool AXTableCell::RowIndexRange( + std::pair<unsigned, unsigned>& row_range) const { if (!layout_object_ || !layout_object_->IsTableCell()) - return; + return false; LayoutTableCell* layout_cell = ToLayoutTableCell(layout_object_); row_range.first = layout_cell->RowIndex(); @@ -196,7 +197,7 @@ LayoutTableSection* section = layout_cell->Section(); LayoutTable* table = layout_cell->Table(); if (!table || !section) - return; + return false; LayoutTableSection* table_section = table->TopSection(); unsigned row_offset = 0; @@ -208,19 +209,23 @@ } row_range.first += row_offset; + return true; } -void AXTableCell::ColumnIndexRange( - std::pair<unsigned, unsigned>& column_range) { +bool AXTableCell::ColumnIndexRange( + std::pair<unsigned, unsigned>& column_range) const { if (!layout_object_ || !layout_object_->IsTableCell()) - return; + return false; LayoutTableCell* cell = ToLayoutTableCell(layout_object_); column_range.first = cell->Table()->AbsoluteColumnToEffectiveColumn( cell->AbsoluteColumnIndex()); + column_range.second = cell->Table()->AbsoluteColumnToEffectiveColumn( cell->AbsoluteColumnIndex() + cell->ColSpan()) - column_range.first; + + return true; } SortDirection AXTableCell::GetSortDirection() const {
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableCell.h b/third_party/WebKit/Source/modules/accessibility/AXTableCell.h index a80ea1c..f0b7353 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXTableCell.h +++ b/third_party/WebKit/Source/modules/accessibility/AXTableCell.h
@@ -48,15 +48,17 @@ bool IsTableCell() const final; // fills in the start location and row span of cell - virtual void RowIndexRange(std::pair<unsigned, unsigned>& row_range); + virtual bool RowIndexRange(std::pair<unsigned, unsigned>& row_range) const; // fills in the start location and column span of cell - virtual void ColumnIndexRange(std::pair<unsigned, unsigned>& column_range); + virtual bool ColumnIndexRange( + std::pair<unsigned, unsigned>& column_range) const; // In the case of cells that act as row or column headers. SortDirection GetSortDirection() const final; virtual AccessibilityRole ScanToDecideHeaderRole(); unsigned AriaColumnIndex() const; unsigned AriaRowIndex() const; + void SetARIAColIndexFromRow(int index) { aria_col_index_from_row_ = index; } virtual bool CanSetSelectedAttribute() const { return false; }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXTableRow.h b/third_party/WebKit/Source/modules/accessibility/AXTableRow.h index 0749a03..c3513bfe9 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXTableRow.h +++ b/third_party/WebKit/Source/modules/accessibility/AXTableRow.h
@@ -53,7 +53,7 @@ // Retrieves the "row" headers (th, scope) from left to right for the each // row. virtual void HeaderObjectsForRow(AXObjectVector&); - AXObject* ParentTable() const; + virtual AXObject* ParentTable() const; void SetRowIndex(int row_index) { row_index_ = row_index; } int RowIndex() const { return row_index_; }
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp index 9a2b2c1..49094ce2 100644 --- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp +++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp
@@ -34,7 +34,7 @@ #include "core/dom/ExecutionContext.h" #include "core/dom/TaskRunnerHelper.h" #include "core/dom/events/Event.h" -#include "core/dom/events/GenericEventQueue.h" +#include "core/dom/events/MediaElementEventQueue.h" #include "core/typed_arrays/DOMArrayBuffer.h" #include "modules/encryptedmedia/ContentDecryptionModuleResultPromise.h" #include "modules/encryptedmedia/EncryptedMediaUtils.h" @@ -344,7 +344,7 @@ MediaKeys* media_keys, WebEncryptedMediaSessionType session_type) : ContextLifecycleObserver(ExecutionContext::From(script_state)), - async_event_queue_(GenericEventQueue::Create(this)), + async_event_queue_(MediaElementEventQueue::Create(this)), media_keys_(media_keys), session_type_(session_type), expiration_(std::numeric_limits<double>::quiet_NaN()),
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h index 2bebc6c..db043b07 100644 --- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h +++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h
@@ -41,7 +41,7 @@ namespace blink { class DOMException; -class GenericEventQueue; +class MediaElementEventQueue; class MediaKeys; // References are held by JS only. However, even if all JS references are @@ -135,7 +135,7 @@ void KeysStatusesChange(const WebVector<WebEncryptedMediaKeyInformation>&, bool has_additional_usable_key) override; - Member<GenericEventQueue> async_event_queue_; + Member<MediaElementEventQueue> async_event_queue_; std::unique_ptr<WebContentDecryptionModuleSession> session_; // Used to determine if MediaKeys is still active.
diff --git a/third_party/WebKit/Source/modules/exported/WebAXObject.cpp b/third_party/WebKit/Source/modules/exported/WebAXObject.cpp index 89ef94e..01a1dfd 100644 --- a/third_party/WebKit/Source/modules/exported/WebAXObject.cpp +++ b/third_party/WebKit/Source/modules/exported/WebAXObject.cpp
@@ -179,20 +179,6 @@ return static_cast<WebAXDefaultActionVerb>(private_->Action()); } -bool WebAXObject::CanDecrement() const { - if (IsDetached()) - return false; - - return private_->IsSlider(); -} - -bool WebAXObject::CanIncrement() const { - if (IsDetached()) - return false; - - return private_->IsSlider(); -} - bool WebAXObject::CanPress() const { if (IsDetached()) return false; @@ -705,33 +691,25 @@ return private_->Language(); } -bool WebAXObject::PerformDefaultAction() const { +bool WebAXObject::Click() const { if (IsDetached()) return false; - return private_->PerformDefaultAction(); + return private_->RequestClickAction(); } bool WebAXObject::Increment() const { if (IsDetached()) return false; - if (CanIncrement()) { - private_->Increment(); - return true; - } - return false; + return private_->RequestIncrementAction(); } bool WebAXObject::Decrement() const { if (IsDetached()) return false; - if (CanDecrement()) { - private_->Decrement(); - return true; - } - return false; + return private_->RequestDecrementAction(); } WebAXObject WebAXObject::InPageLinkTarget() const { @@ -750,13 +728,6 @@ return static_cast<WebAXOrientation>(private_->Orientation()); } -bool WebAXObject::Press() const { - if (IsDetached()) - return false; - - return private_->Press(); -} - WebVector<WebAXObject> WebAXObject::RadioButtonsInGroup() const { if (IsDetached()) return WebVector<WebAXObject>(); @@ -802,18 +773,24 @@ return; } -void WebAXObject::SetSelection(const WebAXObject& anchor_object, +bool WebAXObject::SetSelected(bool selected) const { + if (IsDetached()) + return false; + + return private_->RequestSetSelectedAction(selected); +} + +bool WebAXObject::SetSelection(const WebAXObject& anchor_object, int anchor_offset, const WebAXObject& focus_object, int focus_offset) const { if (IsDetached()) - return; + return false; AXObject::AXRange ax_selection(anchor_object, anchor_offset, TextAffinity::kUpstream, focus_object, focus_offset, TextAffinity::kDownstream); - private_->SetSelection(ax_selection); - return; + return private_->RequestSetSelectionAction(ax_selection); } unsigned WebAXObject::SelectionEnd() const { @@ -863,67 +840,32 @@ return line_number; } -void WebAXObject::SetFocused(bool on) const { - if (!IsDetached()) - private_->SetFocused(on); +bool WebAXObject::Focus() const { + if (IsDetached()) + return false; + + return private_->RequestFocusAction(); } -void WebAXObject::SetSelectedTextRange(int selection_start, - int selection_end) const { +bool WebAXObject::SetSequentialFocusNavigationStartingPoint() const { if (IsDetached()) - return; + return false; - private_->SetSelection(AXObject::AXRange(selection_start, selection_end)); + return private_->RequestSetSequentialFocusNavigationStartingPointAction(); } -void WebAXObject::SetSequentialFocusNavigationStartingPoint() const { +bool WebAXObject::SetValue(WebString value) const { if (IsDetached()) - return; + return false; - private_->SetSequentialFocusNavigationStartingPoint(); + return private_->RequestSetValueAction(value); } -void WebAXObject::SetValue(WebString value) const { +bool WebAXObject::ShowContextMenu() const { if (IsDetached()) - return; + return false; - private_->SetValue(value); -} - -void WebAXObject::ShowContextMenu() const { - if (IsDetached()) - return; - - Node* node = private_->GetNode(); - if (!node) - return; - - Element* element = nullptr; - if (node->IsElementNode()) { - element = ToElement(node); - } else if (node->IsDocumentNode()) { - element = node->GetDocument().documentElement(); - } else { - node->UpdateDistribution(); - ContainerNode* parent = FlatTreeTraversal::Parent(*node); - if (!parent) - return; - SECURITY_DCHECK(parent->IsElementNode()); - element = ToElement(parent); - } - - if (!element) - return; - - LocalFrame* frame = element->GetDocument().GetFrame(); - if (!frame) - return; - - WebViewImpl* view = WebLocalFrameImpl::FromFrame(frame)->ViewImpl(); - if (!view) - return; - - view->ShowContextMenuForElement(WebElement(element)); + return private_->RequestShowContextMenuAction(); } WebString WebAXObject::StringValue() const { @@ -1507,20 +1449,26 @@ bounds_in_container = WebFloatRect(bounds); } -void WebAXObject::ScrollToMakeVisible() const { - if (!IsDetached()) - private_->ScrollToMakeVisible(); +bool WebAXObject::ScrollToMakeVisible() const { + if (IsDetached()) + return false; + + return private_->RequestScrollToMakeVisibleAction(); } -void WebAXObject::ScrollToMakeVisibleWithSubFocus( +bool WebAXObject::ScrollToMakeVisibleWithSubFocus( const WebRect& subfocus) const { - if (!IsDetached()) - private_->ScrollToMakeVisibleWithSubFocus(subfocus); + if (IsDetached()) + return false; + + return private_->RequestScrollToMakeVisibleWithSubFocusAction(subfocus); } -void WebAXObject::ScrollToGlobalPoint(const WebPoint& point) const { - if (!IsDetached()) - private_->ScrollToGlobalPoint(point); +bool WebAXObject::ScrollToGlobalPoint(const WebPoint& point) const { + if (IsDetached()) + return false; + + return private_->RequestScrollToGlobalPointAction(point); } WebAXObject::WebAXObject(AXObject* object) : private_(object) {}
diff --git a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp index 97004615..a6550875 100644 --- a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp +++ b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
@@ -470,7 +470,7 @@ tainted_response = response_data->CreateBasicFilteredResponse(); break; case FetchRequestData::kCORSTainting: { - WebCORS::HTTPHeaderSet header_names; + WebHTTPHeaderSet header_names; WebCORS::ExtractCorsExposedHeaderNamesList( WrappedResourceResponse(response), header_names); tainted_response =
diff --git a/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp b/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp index 6adb829..33bbbe46 100644 --- a/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp +++ b/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp
@@ -44,14 +44,13 @@ return web_type; } -WebVector<WebString> HeaderSetToWebVector( - const WebCORS::HTTPHeaderSet& headers) { +WebVector<WebString> HeaderSetToWebVector(const WebHTTPHeaderSet& headers) { // Can't just pass *headers to the WebVector constructor because HashSet // iterators are not stl iterator compatible. WebVector<WebString> result(static_cast<size_t>(headers.size())); int idx = 0; for (const auto& header : headers) - result[idx++] = header; + result[idx++] = WebString::FromASCII(header); return result; } @@ -98,7 +97,7 @@ FetchResponseData* FetchResponseData::CreateCORSFilteredResponse() const { DCHECK_EQ(type_, kDefaultType); - WebCORS::HTTPHeaderSet access_control_expose_header_set; + WebHTTPHeaderSet access_control_expose_header_set; String access_control_expose_headers; if (header_list_->Get(HTTPNames::Access_Control_Expose_Headers, access_control_expose_headers)) { @@ -109,7 +108,7 @@ } FetchResponseData* FetchResponseData::CreateCORSFilteredResponse( - const WebCORS::HTTPHeaderSet& exposed_headers) const { + const WebHTTPHeaderSet& exposed_headers) const { DCHECK_EQ(type_, kDefaultType); // "A CORS filtered response is a filtered response whose type is |CORS|, // header list excludes all headers in internal response's header list, @@ -123,12 +122,15 @@ response->SetURLList(url_list_); for (const auto& header : header_list_->List()) { const String& name = header.first; - const bool explicitly_exposed = exposed_headers.Contains(name); + const bool explicitly_exposed = + exposed_headers.find(name.Ascii().data()) != exposed_headers.end(); if (WebCORS::IsOnAccessControlResponseHeaderWhitelist(name) || (explicitly_exposed && !FetchUtils::IsForbiddenResponseHeaderName(name))) { - if (explicitly_exposed) - response->cors_exposed_header_names_.insert(name); + if (explicitly_exposed) { + response->cors_exposed_header_names_.emplace(name.Ascii().data(), + name.Ascii().length()); + } response->header_list_->Append(name, header.second); } }
diff --git a/third_party/WebKit/Source/modules/fetch/FetchResponseData.h b/third_party/WebKit/Source/modules/fetch/FetchResponseData.h index 88a9fd04..76d04f02 100644 --- a/third_party/WebKit/Source/modules/fetch/FetchResponseData.h +++ b/third_party/WebKit/Source/modules/fetch/FetchResponseData.h
@@ -60,7 +60,7 @@ // Creates a CORS filtered response with an explicit set of exposed header // names. FetchResponseData* CreateCORSFilteredResponse( - const WebCORS::HTTPHeaderSet& exposed_headers) const; + const WebHTTPHeaderSet& exposed_headers) const; FetchResponseData* CreateOpaqueFilteredResponse() const; FetchResponseData* CreateOpaqueRedirectFilteredResponse() const; @@ -84,7 +84,7 @@ String InternalMIMEType() const; Time ResponseTime() const { return response_time_; } String CacheStorageCacheName() const { return cache_storage_cache_name_; } - const WebCORS::HTTPHeaderSet& CorsExposedHeaderNames() const { + const WebHTTPHeaderSet& CorsExposedHeaderNames() const { return cors_exposed_header_names_; } @@ -101,7 +101,7 @@ void SetCacheStorageCacheName(const String& cache_storage_cache_name) { cache_storage_cache_name_ = cache_storage_cache_name; } - void SetCorsExposedHeaderNames(const WebCORS::HTTPHeaderSet& header_names) { + void SetCorsExposedHeaderNames(const WebHTTPHeaderSet& header_names) { cors_exposed_header_names_ = header_names; } @@ -132,7 +132,7 @@ String mime_type_; Time response_time_; String cache_storage_cache_name_; - WebCORS::HTTPHeaderSet cors_exposed_header_names_; + WebHTTPHeaderSet cors_exposed_header_names_; }; } // namespace blink
diff --git a/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp b/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp index f2382c4..4b8c357 100644 --- a/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp +++ b/third_party/WebKit/Source/modules/fetch/FetchResponseDataTest.cpp
@@ -137,7 +137,7 @@ TEST_F(FetchResponseDataTest, CORSFilterWithEmptyHeaderSet) { FetchResponseData* internal_response = CreateInternalResponse(); FetchResponseData* cors_response_data = - internal_response->CreateCORSFilteredResponse(WebCORS::HTTPHeaderSet()); + internal_response->CreateCORSFilteredResponse(WebHTTPHeaderSet()); EXPECT_EQ(internal_response, cors_response_data->InternalResponse()); @@ -159,7 +159,7 @@ "set-cookie, bar"); FetchResponseData* cors_response_data = - internal_response->CreateCORSFilteredResponse(WebCORS::HTTPHeaderSet()); + internal_response->CreateCORSFilteredResponse(WebHTTPHeaderSet()); EXPECT_EQ(internal_response, cors_response_data->InternalResponse()); @@ -176,7 +176,7 @@ TEST_F(FetchResponseDataTest, CORSFilterWithExplicitHeaderSet) { FetchResponseData* internal_response = CreateInternalResponse(); - WebCORS::HTTPHeaderSet exposed_headers; + WebHTTPHeaderSet exposed_headers; exposed_headers.insert("set-cookie"); exposed_headers.insert("bar");
diff --git a/third_party/WebKit/Source/modules/fetch/Response.cpp b/third_party/WebKit/Source/modules/fetch/Response.cpp index 473b504..f6e966ef 100644 --- a/third_party/WebKit/Source/modules/fetch/Response.cpp +++ b/third_party/WebKit/Source/modules/fetch/Response.cpp
@@ -75,9 +75,9 @@ response = response->CreateBasicFilteredResponse(); break; case network::mojom::FetchResponseType::kCORS: { - WebCORS::HTTPHeaderSet header_names; + WebHTTPHeaderSet header_names; for (const auto& header : web_response.CorsExposedHeaderNames()) - header_names.insert(String(header)); + header_names.insert(header.Ascii().data()); response = response->CreateCORSFilteredResponse(header_names); break; }
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp index df014a3..ca6bfc0 100644 --- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp +++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
@@ -325,6 +325,7 @@ void ImageCapture::SetMediaTrackConstraints( ScriptPromiseResolver* resolver, const HeapVector<MediaTrackConstraintSet>& constraints_vector) { + DCHECK_GT(constraints_vector.size(), 0u); if (!service_) { resolver->Reject(DOMException::Create(kNotFoundError, kNoServiceError)); return;
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp index b29b17d..53b902ad 100644 --- a/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp +++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImplTest.cpp
@@ -105,7 +105,8 @@ std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) override { + WebMediaPlayerClient*, + WebLayerTreeView*) override { return WTF::WrapUnique(new MockWebMediaPlayerForImpl); }
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegateTest.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegateTest.cpp index 8f02ed7..57b4bb4d 100644 --- a/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegateTest.cpp +++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsOrientationLockDelegateTest.cpp
@@ -119,7 +119,8 @@ std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) override { + WebMediaPlayerClient*, + WebLayerTreeView*) override { return WTF::MakeUnique<MockWebMediaPlayerForOrientationLockDelegate>(); } };
diff --git a/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp index 50d11c8..5524e8d 100644 --- a/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp +++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp
@@ -81,7 +81,8 @@ std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( HTMLMediaElement&, const WebMediaPlayerSource&, - WebMediaPlayerClient*) override { + WebMediaPlayerClient*, + WebLayerTreeView*) override { return WTF::MakeUnique<MockVideoWebMediaPlayer>(); } };
diff --git a/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css b/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css index 90ae832..5df35b7 100644 --- a/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css +++ b/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css
@@ -87,6 +87,15 @@ font-style: normal; } +video:-webkit-full-page-media { + margin: auto; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + audio:-webkit-full-page-media, video:-webkit-full-page-media { max-height: 100%; max-width: 100%;
diff --git a/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp b/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp index e03dfb2..c54d3fad 100644 --- a/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp +++ b/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp
@@ -35,7 +35,7 @@ #include "bindings/core/v8/ExceptionState.h" #include "core/dom/ExceptionCode.h" #include "core/dom/events/Event.h" -#include "core/dom/events/GenericEventQueue.h" +#include "core/dom/events/MediaElementEventQueue.h" #include "core/frame/Deprecation.h" #include "core/frame/UseCounter.h" #include "core/html/HTMLMediaElement.h" @@ -112,7 +112,7 @@ MediaSource::MediaSource(ExecutionContext* context) : ContextLifecycleObserver(context), ready_state_(ClosedKeyword()), - async_event_queue_(GenericEventQueue::Create(this)), + async_event_queue_(MediaElementEventQueue::Create(this)), attached_element_(nullptr), source_buffers_(SourceBufferList::Create(GetExecutionContext(), async_event_queue_.Get())),
diff --git a/third_party/WebKit/Source/modules/mediasource/MediaSource.h b/third_party/WebKit/Source/modules/mediasource/MediaSource.h index 3f1a99d..026720e3 100644 --- a/third_party/WebKit/Source/modules/mediasource/MediaSource.h +++ b/third_party/WebKit/Source/modules/mediasource/MediaSource.h
@@ -47,7 +47,7 @@ namespace blink { class ExceptionState; -class GenericEventQueue; +class MediaElementEventQueue; class WebSourceBuffer; class MediaSource final : public EventTargetWithInlineData, @@ -146,7 +146,7 @@ std::unique_ptr<WebMediaSource> web_media_source_; AtomicString ready_state_; - Member<GenericEventQueue> async_event_queue_; + Member<MediaElementEventQueue> async_event_queue_; WeakMember<HTMLMediaElement> attached_element_; Member<SourceBufferList> source_buffers_;
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp index ef41813c..f7ca719 100644 --- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp +++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
@@ -38,7 +38,7 @@ #include "core/dom/ExceptionCode.h" #include "core/dom/ExecutionContext.h" #include "core/dom/events/Event.h" -#include "core/dom/events/GenericEventQueue.h" +#include "core/dom/events/MediaElementEventQueue.h" #include "core/frame/Deprecation.h" #include "core/frame/UseCounter.h" #include "core/html/HTMLMediaElement.h" @@ -105,7 +105,7 @@ SourceBuffer* SourceBuffer::Create( std::unique_ptr<WebSourceBuffer> web_source_buffer, MediaSource* source, - GenericEventQueue* async_event_queue) { + MediaElementEventQueue* async_event_queue) { SourceBuffer* source_buffer = new SourceBuffer(std::move(web_source_buffer), source, async_event_queue); source_buffer->SuspendIfNeeded(); @@ -114,7 +114,7 @@ SourceBuffer::SourceBuffer(std::unique_ptr<WebSourceBuffer> web_source_buffer, MediaSource* source, - GenericEventQueue* async_event_queue) + MediaElementEventQueue* async_event_queue) : SuspendableObject(source->GetExecutionContext()), web_source_buffer_(std::move(web_source_buffer)), source_(source),
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h index 4a2c65a..598fc75 100644 --- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h +++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h
@@ -48,7 +48,7 @@ class DOMArrayBuffer; class DOMArrayBufferView; class ExceptionState; -class GenericEventQueue; +class MediaElementEventQueue; class MediaSource; class TimeRanges; class VideoTrackList; @@ -65,7 +65,7 @@ public: static SourceBuffer* Create(std::unique_ptr<WebSourceBuffer>, MediaSource*, - GenericEventQueue*); + MediaElementEventQueue*); static const AtomicString& SegmentsKeyword(); static const AtomicString& SequenceKeyword(); @@ -121,7 +121,7 @@ private: SourceBuffer(std::unique_ptr<WebSourceBuffer>, MediaSource*, - GenericEventQueue*); + MediaElementEventQueue*); void Dispose(); bool IsRemoved() const; @@ -160,7 +160,7 @@ std::unique_ptr<WebSourceBuffer> web_source_buffer_; Member<MediaSource> source_; Member<TrackDefaultList> track_defaults_; - Member<GenericEventQueue> async_event_queue_; + Member<MediaElementEventQueue> async_event_queue_; AtomicString mode_; bool updating_;
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp index 2c45ac2..95dedab 100644 --- a/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp +++ b/third_party/WebKit/Source/modules/mediasource/SourceBufferList.cpp
@@ -30,14 +30,14 @@ #include "modules/mediasource/SourceBufferList.h" -#include "core/dom/events/GenericEventQueue.h" +#include "core/dom/events/MediaElementEventQueue.h" #include "modules/EventModules.h" #include "modules/mediasource/SourceBuffer.h" namespace blink { SourceBufferList::SourceBufferList(ExecutionContext* context, - GenericEventQueue* async_event_queue) + MediaElementEventQueue* async_event_queue) : ContextClient(context), async_event_queue_(async_event_queue) {} SourceBufferList::~SourceBufferList() {}
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBufferList.h b/third_party/WebKit/Source/modules/mediasource/SourceBufferList.h index 18178a4..53ed0e1 100644 --- a/third_party/WebKit/Source/modules/mediasource/SourceBufferList.h +++ b/third_party/WebKit/Source/modules/mediasource/SourceBufferList.h
@@ -38,7 +38,7 @@ namespace blink { class SourceBuffer; -class GenericEventQueue; +class MediaElementEventQueue; class SourceBufferList final : public EventTargetWithInlineData, public ContextClient { @@ -47,7 +47,7 @@ public: static SourceBufferList* Create(ExecutionContext* context, - GenericEventQueue* async_event_queue) { + MediaElementEventQueue* async_event_queue) { return new SourceBufferList(context, async_event_queue); } ~SourceBufferList() override; @@ -79,11 +79,11 @@ DECLARE_VIRTUAL_TRACE(); private: - SourceBufferList(ExecutionContext*, GenericEventQueue*); + SourceBufferList(ExecutionContext*, MediaElementEventQueue*); void ScheduleEvent(const AtomicString&); - Member<GenericEventQueue> async_event_queue_; + Member<MediaElementEventQueue> async_event_queue_; HeapVector<Member<SourceBuffer>> list_; };
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp index 0710ff7..bd3b597 100644 --- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp +++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
@@ -331,7 +331,7 @@ } // |constraints| empty means "remove/clear all current constraints". - if (!constraints.hasAdvanced()) + if (!constraints.hasAdvanced() || constraints.advanced().IsEmpty()) image_capture_->ClearMediaTrackConstraints(resolver); else image_capture_->SetMediaTrackConstraints(resolver, constraints.advanced());
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp index a3e96e3..751d445 100644 --- a/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp +++ b/third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp
@@ -68,20 +68,21 @@ kWebServiceWorkerResponseErrorForeignFetchMismatchedOrigin); return; } else if (!is_opaque) { - WebCORS::HTTPHeaderSet headers; + WebHTTPHeaderSet headers; if (foreign_fetch_response.hasHeaders()) { for (const String& header : foreign_fetch_response.headers()) - headers.insert(header); + headers.emplace(header.Ascii().data(), header.Ascii().length()); if (response->GetResponse()->GetType() == FetchResponseData::kCORSType) { - const WebCORS::HTTPHeaderSet& existing_headers = + const WebHTTPHeaderSet& existing_headers = response->GetResponse()->CorsExposedHeaderNames(); - WebCORS::HTTPHeaderSet headers_to_remove; - for (WebCORS::HTTPHeaderSet::iterator it = headers.begin(); - it != headers.end(); ++it) { - if (!existing_headers.Contains(*it)) - headers_to_remove.insert(*it); + for (WebHTTPHeaderSet::iterator it = headers.begin(); + it != headers.end();) { + if (existing_headers.find(*it) == existing_headers.end()) { + it = headers.erase(it); + } else { + ++it; + } } - headers.RemoveAll(headers_to_remove); } } FetchResponseData* response_data =
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp index 1ce817e..a9fffe3 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp +++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp
@@ -7,6 +7,7 @@ #include <memory> #include "core/workers/GlobalScopeCreationParams.h" #include "core/workers/WorkerBackingThread.h" +#include "modules/webaudio/AudioWorklet.h" #include "modules/webaudio/AudioWorkletGlobalScope.h" #include "platform/CrossThreadFunctional.h" #include "platform/WaitableEvent.h" @@ -21,6 +22,8 @@ template class WorkletThreadHolder<AudioWorkletThread>; +WebThread* AudioWorkletThread::s_backing_thread_ = nullptr; + std::unique_ptr<AudioWorkletThread> AudioWorkletThread::Create( ThreadableLoadingContext* loading_context, WorkerReportingProxy& worker_reporting_proxy) { @@ -62,20 +65,22 @@ void AudioWorkletThread::EnsureSharedBackingThread() { DCHECK(IsMainThread()); - WorkletThreadHolder<AudioWorkletThread>::EnsureInstance("AudioWorkletThread"); + if (!s_backing_thread_) + s_backing_thread_ = Platform::Current()->CreateWebAudioThread().release(); + WorkletThreadHolder<AudioWorkletThread>::EnsureInstance(s_backing_thread_); } void AudioWorkletThread::ClearSharedBackingThread() { DCHECK(IsMainThread()); WorkletThreadHolder<AudioWorkletThread>::ClearInstance(); + delete s_backing_thread_; + s_backing_thread_ = nullptr; } WebThread* AudioWorkletThread::GetSharedBackingThread() { DCHECK(IsMainThread()); WorkletThreadHolder<AudioWorkletThread>* instance = WorkletThreadHolder<AudioWorkletThread>::GetInstance(); - if (!instance) - return nullptr; return &(instance->GetThread()->BackingThread().PlatformThread()); }
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.h b/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.h index 8c6ab9a..f8cd5a9 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.h +++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.h
@@ -12,6 +12,7 @@ namespace blink { +class WebThread; class WorkerReportingProxy; // AudioWorkletThread is a per-frame singleton object that represents the @@ -50,6 +51,10 @@ private: AudioWorkletThread(ThreadableLoadingContext*, WorkerReportingProxy&); + + // This raw pointer gets assigned in EnsureSharedBackingThread() and manually + // released by ClearSharedBackingThread(). + static WebThread* s_backing_thread_; }; } // namespace blink
diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/Source/platform/BUILD.gn index 5a9dc70..3e1d1a02 100644 --- a/third_party/WebKit/Source/platform/BUILD.gn +++ b/third_party/WebKit/Source/platform/BUILD.gn
@@ -605,6 +605,7 @@ "exported/WebFont.cpp", "exported/WebFontDescription.cpp", "exported/WebHTTPBody.cpp", + "exported/WebHTTPHeaderMap.cpp", "exported/WebHTTPLoadInfo.cpp", "exported/WebImage.cpp", "exported/WebImageGenerator.cpp", @@ -672,6 +673,7 @@ "exported/WebURLLoaderTestDelegate.cpp", "exported/WebURLRequest.cpp", "exported/WebURLResponse.cpp", + "exported/WebVideoFrameSubmitter.cpp", "exported/WrappedResourceRequest.h", "exported/WrappedResourceResponse.h", "exported/linux/WebFontRenderStyle.cpp", @@ -831,6 +833,8 @@ "geometry/FloatRoundedRect.h", "geometry/FloatSize.cpp", "geometry/FloatSize.h", + "geometry/GeometryAsJSON.cpp", + "geometry/GeometryAsJSON.h", "geometry/IntPoint.cpp", "geometry/IntPoint.h", "geometry/IntRect.cpp", @@ -1000,6 +1004,10 @@ "graphics/UnacceleratedImageBufferSurface.h", "graphics/UnacceleratedStaticBitmapImage.cpp", "graphics/UnacceleratedStaticBitmapImage.h", + "graphics/VideoFrameResourceProvider.cpp", + "graphics/VideoFrameResourceProvider.h", + "graphics/VideoFrameSubmitter.cpp", + "graphics/VideoFrameSubmitter.h", "graphics/WebGraphicsContext3DProviderWrapper.h", "graphics/compositing/ContentLayerClientImpl.cpp", "graphics/compositing/ContentLayerClientImpl.h", @@ -1804,6 +1812,7 @@ "graphics/ImageBufferTest.cpp", "graphics/PaintInvalidationReasonTest.cpp", "graphics/RecordingImageBufferSurfaceTest.cpp", + "graphics/VideoFrameSubmitterTest.cpp", "graphics/compositing/ContentLayerClientImplTest.cpp", "graphics/compositing/PaintArtifactCompositorTest.cpp", "graphics/compositing/PaintChunksToCcLayerTest.cpp", @@ -1917,6 +1926,8 @@ "//mojo/common:test_common_custom_types_blink", "//mojo/edk/system", "//mojo/public/cpp/bindings/tests:for_blink_tests", + "//services/viz/public/interfaces", + "//services/viz/public/interfaces:interfaces_blink", "//skia", "//testing/gmock", "//testing/gtest",
diff --git a/third_party/WebKit/Source/platform/DEPS b/third_party/WebKit/Source/platform/DEPS index badd236..85bb6931 100644 --- a/third_party/WebKit/Source/platform/DEPS +++ b/third_party/WebKit/Source/platform/DEPS
@@ -34,7 +34,10 @@ "+base/timer", "+base/trace_event", "+base/values.h", + "+base/lazy_instance.h", "+net/http/http_util.h", + "+net/http/http_request_headers.h", + "+net/http/http_response_headers.h", "+device", "+gpu/GLES2", "+mojo/public", @@ -43,6 +46,7 @@ "+public/platform", #TODO(nverne): remove this "+public/web/WebKit.h", + "+services/viz/public/interfaces/compositing/compositor_frame_sink.mojom-blink.h", "+skia/ext", "+third_party/ced/src/compact_enc_det/compact_enc_det.h", "+third_party/khronos",
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 index 5a641fa0..a70f274c 100644 --- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 +++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -427,10 +427,6 @@ status: "experimental", }, { - name: "FileAPIBlobClose", - status: "experimental", - }, - { name: "FileSystem", status: "stable", },
diff --git a/third_party/WebKit/Source/platform/TimerTest.cpp b/third_party/WebKit/Source/platform/TimerTest.cpp index 4fc596d..e024dac8 100644 --- a/third_party/WebKit/Source/platform/TimerTest.cpp +++ b/third_party/WebKit/Source/platform/TimerTest.cpp
@@ -539,7 +539,7 @@ TEST_F(TimerTest, UserSuppliedWebTaskRunner) { scoped_refptr<scheduler::TaskQueue> task_runner( platform_->GetRendererScheduler()->NewTimerTaskQueue( - scheduler::MainThreadTaskQueue::QueueType::FRAME_TIMER)); + scheduler::MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE)); RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner = scheduler::WebTaskRunnerImpl::Create(task_runner); TimerForTest<TimerTest> timer(web_task_runner, this, @@ -627,7 +627,7 @@ scoped_refptr<scheduler::TaskQueue> task_runner1( platform_->GetRendererScheduler()->NewTimerTaskQueue( - scheduler::MainThreadTaskQueue::QueueType::FRAME_TIMER)); + scheduler::MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE)); RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = scheduler::WebTaskRunnerImpl::Create(task_runner1); TaskObserver task_observer1(web_task_runner1, &run_order); @@ -635,7 +635,7 @@ scoped_refptr<scheduler::TaskQueue> task_runner2( platform_->GetRendererScheduler()->NewTimerTaskQueue( - scheduler::MainThreadTaskQueue::QueueType::FRAME_TIMER)); + scheduler::MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE)); RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = scheduler::WebTaskRunnerImpl::Create(task_runner2); TaskObserver task_observer2(web_task_runner2, &run_order); @@ -667,7 +667,7 @@ scoped_refptr<scheduler::TaskQueue> task_runner1( platform_->GetRendererScheduler()->NewTimerTaskQueue( - scheduler::MainThreadTaskQueue::QueueType::FRAME_TIMER)); + scheduler::MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE)); RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = scheduler::WebTaskRunnerImpl::Create(task_runner1); TaskObserver task_observer1(web_task_runner1, &run_order); @@ -675,7 +675,7 @@ scoped_refptr<scheduler::TaskQueue> task_runner2( platform_->GetRendererScheduler()->NewTimerTaskQueue( - scheduler::MainThreadTaskQueue::QueueType::FRAME_TIMER)); + scheduler::MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE)); RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = scheduler::WebTaskRunnerImpl::Create(task_runner2); TaskObserver task_observer2(web_task_runner2, &run_order); @@ -709,13 +709,13 @@ TEST_F(TimerTest, MoveToNewTaskRunnerWithoutTasks) { scoped_refptr<scheduler::TaskQueue> task_runner1( platform_->GetRendererScheduler()->NewTimerTaskQueue( - scheduler::MainThreadTaskQueue::QueueType::FRAME_TIMER)); + scheduler::MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE)); RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner1 = scheduler::WebTaskRunnerImpl::Create(task_runner1); scoped_refptr<scheduler::TaskQueue> task_runner2( platform_->GetRendererScheduler()->NewTimerTaskQueue( - scheduler::MainThreadTaskQueue::QueueType::FRAME_TIMER)); + scheduler::MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE)); RefPtr<scheduler::WebTaskRunnerImpl> web_task_runner2 = scheduler::WebTaskRunnerImpl::Create(task_runner2);
diff --git a/third_party/WebKit/Source/platform/WebFrameScheduler.h b/third_party/WebKit/Source/platform/WebFrameScheduler.h index a08537f4..237a9dc 100644 --- a/third_party/WebKit/Source/platform/WebFrameScheduler.h +++ b/third_party/WebKit/Source/platform/WebFrameScheduler.h
@@ -69,21 +69,53 @@ virtual void SetCrossOrigin(bool) {} // The tasks runners below are listed in increasing QoS order. - // - timer task queue. Designed for custom user-provided javascript tasks. - // Lowest guarantees. Can be suspended, blocked during user gesture or - // throttled when backgrounded. - // - loading task queue. Can be suspended or blocked during user gesture. - // Throttling might be considered in the future. - // - suspendable task queue. Can be suspended and blocked during user gesture, - // can't be throttled. - // - unthrottled-but-blockable task queue. Can't be throttled, can't - // be suspended but can be blocked during user gesture. - // NOTE: existence of this queue is a temporary fix for scroll latency - // regression. All tasks should be moved from this queue to suspendable - // or unthrottled queues and it should be deleted. - // - unthrottled task queue. Highest guarantees. Can't be throttled, - // suspended or blocked. Should be used only when necessary after - // consulting scheduler-dev@. + // - throttleable task queue. Designed for custom user-provided javascript + // tasks. Lowest guarantees. Can be paused, blocked during user gesture, + // throttled when backgrounded or stopped completely after some time in + // background. + // - deferrable task queue. These tasks can be deferred for a small period + // (several seconds) when high-priority work is anticipated. These tasks + // can be paused. + // - pausable task queue. Default queue for high-priority javascript tasks. + // They can be paused according to the spec during javascript alert + // dialogs, printing windows and devtools debugging. Otherwise scheduler + // does not tamper with their execution. + // - unpausable task queue. Should be used for control tasks which should + // run when the context is paused. Usage should be extremely rare. + // Please consult scheduler-dev@ before using it. Running javascript + // on it is strictly verboten and can lead to hard-to-diagnose errors. + // + // + // These queues below are separate due to special handling for their + // priorities. + // - loading task queue. Similar to deferrable task queue. Throttling might + // be considered in the future. + // - loading control task queue. Loading task queue with increased priority + // to run small loading tasks which schedule other loading tasks. + + // Note: old-style timer task runner corresponds to throttleable task runner + // and unthrottled task runner corresponds to pausable task runner. + + // Returns a WebTaskRunner for throtteable tasks, e.g. javascript timers. + // WebFrameScheduler owns the returned WebTaskRunner. + virtual RefPtr<WebTaskRunner> ThrottleableTaskRunner() = 0; + + // Returns a WebTaskRunner for tasks which can be deferred for several + // seconds due to anticipated high-priority work like user gesture. + virtual RefPtr<WebTaskRunner> DeferrableTaskRunner() = 0; + + // Returns a WebTaskRunner for high-priority javascript tasks. They run + // unrestricted in most cases except context pausing (e.g. alert dialog). + virtual RefPtr<WebTaskRunner> PausableTaskRunner() = 0; + + // Returns a WebTaskRunner for tasks which should run during context pausing. + // The usage should be rare and limited to tasks controlling context pausing + // and unpausing. + virtual RefPtr<WebTaskRunner> UnpausableTaskRunner() = 0; + + // Returns the WebTaskRunner for loading tasks. + // WebFrameScheduler owns the returned WebTaskRunner. + virtual RefPtr<WebTaskRunner> LoadingTaskRunner() = 0; // Return a WebTaskRunner for very short control messages between loading // tasks. Caution is needed when posting tasks to this WebTaskRunner because @@ -91,36 +123,6 @@ // WebFrameScheduler owns the returned WebTaskRunner. virtual RefPtr<WebTaskRunner> LoadingControlTaskRunner() = 0; - // Returns the WebTaskRunner for timer tasks. - // WebFrameScheduler owns the returned WebTaskRunner. - virtual RefPtr<WebTaskRunner> TimerTaskRunner() = 0; - - // Returns the WebTaskRunner for loading tasks. - // WebFrameScheduler owns the returned WebTaskRunner. - virtual RefPtr<WebTaskRunner> LoadingTaskRunner() = 0; - - // Returns the WebTaskRunner for tasks which shouldn't get throttled, - // but can be suspended. - // TODO(altimin): This is a transitional task runner. Unthrottled task runner - // would become suspendable in the nearest future and a new unsuspended - // task runner will be added. - virtual RefPtr<WebTaskRunner> SuspendableTaskRunner() = 0; - - // Retuns the WebTaskRunner for tasks which should not be suspended or - // throttled, but should be blocked during user gesture. - // This is a temporary task runner needed for a fix for touch latency - // regression. All tasks from it should be moved to suspendable or - // unthrottled task runner. - virtual RefPtr<WebTaskRunner> UnthrottledButBlockableTaskRunner() = 0; - - // Returns the WebTaskRunner for tasks which should never get throttled. - // This is generally used for executing internal browser tasks which should - // never be throttled. Ideally only tasks whose performance characteristics - // are known should be posted to this task runner; for example user - // JavaScript is discouraged. WebFrameScheduler owns the returned - // WebTaskRunner. - virtual RefPtr<WebTaskRunner> UnthrottledTaskRunner() = 0; - // Returns the parent WebViewScheduler. virtual WebViewScheduler* GetWebViewScheduler() { return nullptr; }
diff --git a/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h b/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h index 29e8750..8e14bdf 100644 --- a/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h +++ b/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h
@@ -91,6 +91,11 @@ WTF_MAKE_NONCOPYABLE(V8PrivateProperty); public: + enum CachedAccessorSymbol : unsigned { + kNoCachedAccessor = 0, + kWindowDocumentCachedAccessor, + }; + // Provides fast access to V8's private properties. // // Retrieving/creating a global private symbol from a string is very @@ -190,6 +195,18 @@ isolate)); } + static Symbol GetCachedAccessor(v8::Isolate* isolate, + CachedAccessorSymbol symbol_id) { + switch (symbol_id) { + case kWindowDocumentCachedAccessor: + return GetWindowDocumentCachedAccessor(isolate); + case kNoCachedAccessor: + break; + }; + NOTREACHED(); + return GetSymbol(isolate, "unexpected cached accessor"); + } + static Symbol GetSymbol(v8::Isolate* isolate, const char* symbol) { return Symbol(isolate, CreateCachedV8Private(isolate, symbol)); }
diff --git a/third_party/WebKit/Source/platform/exported/WebCORS.cpp b/third_party/WebKit/Source/platform/exported/WebCORS.cpp index 8e88450..c8535fc 100644 --- a/third_party/WebKit/Source/platform/exported/WebCORS.cpp +++ b/third_party/WebKit/Source/platform/exported/WebCORS.cpp
@@ -32,7 +32,6 @@ #include "platform/HTTPNames.h" #include "platform/loader/fetch/FetchUtils.h" #include "platform/loader/fetch/ResourceRequest.h" -#include "platform/network/HTTPHeaderMap.h" #include "platform/weborigin/KURL.h" #include "platform/weborigin/SchemeRegistry.h" #include "platform/wtf/text/StringBuilder.h" @@ -55,9 +54,10 @@ } // Fetch API Spec: https://fetch.spec.whatwg.org/#cors-preflight-fetch-0 -String CreateAccessControlRequestHeadersHeader(const HTTPHeaderMap& headers) { +String CreateAccessControlRequestHeadersHeader( + const WebHTTPHeaderMap& headers) { Vector<String> filtered_headers; - for (const auto& header : headers) { + for (const auto& header : headers.GetHTTPHeaderMap()) { if (FetchUtils::IsCORSSafelistedHeader(header.key, header.value)) { // Exclude CORS-safelisted headers. continue; @@ -100,8 +100,8 @@ // in |output| when successful. Otherwise, returns with |output| kept empty. // // |output| must be empty. - void Parse(HTTPHeaderSet& output) { - DCHECK(output.IsEmpty()); + void Parse(WebHTTPHeaderSet& output) { + DCHECK(output.empty()); while (true) { ConsumeSpaces(); @@ -113,7 +113,9 @@ output.clear(); return; } - output.insert(value_.Substring(token_start, token_size)); + + const CString& name = value_.Substring(token_start, token_size).Ascii(); + output.emplace(name.data(), name.length()); ConsumeSpaces(); @@ -174,7 +176,7 @@ AccessStatus CheckAccess( const WebURL response_url, const int response_status_code, - const HTTPHeaderMap& response_header, + const WebHTTPHeaderMap& response_header, const WebURLRequest::FetchCredentialsMode credentials_mode, const WebSecurityOrigin& security_origin) { if (!response_status_code) @@ -233,7 +235,7 @@ WebURLRequest& new_request, const WebURL redirect_response_url, const int redirect_response_status_code, - const HTTPHeaderMap& redirect_response_header, + const WebHTTPHeaderMap& redirect_response_header, WebURLRequest::FetchCredentialsMode credentials_mode, ResourceLoaderOptions& options, WebString& error_message) { @@ -330,7 +332,8 @@ return PreflightStatus::kPreflightSuccess; } -PreflightStatus CheckExternalPreflight(const HTTPHeaderMap& response_header) { +PreflightStatus CheckExternalPreflight( + const WebHTTPHeaderMap& response_header) { WebString result = response_header.Get(HTTPNames::Access_Control_Allow_External); if (result.IsNull()) @@ -378,7 +381,7 @@ WebString AccessControlErrorString( const AccessStatus status, const int response_status_code, - const HTTPHeaderMap& response_header, + const WebHTTPHeaderMap& response_header, const WebSecurityOrigin& origin, const WebURLRequest::RequestContext context) { String origin_denied = @@ -482,7 +485,7 @@ } WebString PreflightErrorString(const PreflightStatus status, - const HTTPHeaderMap& response_header, + const WebHTTPHeaderMap& response_header, const int preflight_response_status_code) { switch (status) { case PreflightStatus::kPreflightInvalidStatus: { @@ -535,7 +538,7 @@ } void ExtractCorsExposedHeaderNamesList(const WebURLResponse& response, - HTTPHeaderSet& header_set) { + WebHTTPHeaderSet& header_set) { // If a response was fetched via a service worker, it will always have // CorsExposedHeaderNames set, either from the Access-Control-Expose-Headers // header, or explicitly via foreign fetch. For requests that didn't come from @@ -543,7 +546,7 @@ // header. if (response.WasFetchedViaServiceWorker()) { for (const auto& header : response.CorsExposedHeaderNames()) - header_set.insert(String(header)); + header_set.emplace(header.Ascii().data(), header.Ascii().length()); return; } ParseAccessControlExposeHeadersAllowList( @@ -553,19 +556,20 @@ } void ParseAccessControlExposeHeadersAllowList(const WebString& header_value, - HTTPHeaderSet& header_set) { + WebHTTPHeaderSet& header_set) { HTTPHeaderNameListParser parser(header_value); parser.Parse(header_set); } bool IsOnAccessControlResponseHeaderWhitelist(const WebString& name) { DEFINE_THREAD_SAFE_STATIC_LOCAL( - HTTPHeaderSet, allowed_cross_origin_response_headers, + WebHTTPHeaderSet, allowed_cross_origin_response_headers, ({ "cache-control", "content-language", "content-type", "expires", "last-modified", "pragma", })); - return allowed_cross_origin_response_headers.Contains(name); + return allowed_cross_origin_response_headers.find(name.Ascii().data()) != + allowed_cross_origin_response_headers.end(); } WebString ListOfCORSEnabledURLSchemes() { @@ -577,8 +581,9 @@ return FetchUtils::IsCORSSafelistedMethod(method); } -bool ContainsOnlyCORSSafelistedOrForbiddenHeaders(const HTTPHeaderMap& map) { - return FetchUtils::ContainsOnlyCORSSafelistedOrForbiddenHeaders(map); +bool ContainsOnlyCORSSafelistedOrForbiddenHeaders(const WebHTTPHeaderMap& map) { + return FetchUtils::ContainsOnlyCORSSafelistedOrForbiddenHeaders( + map.GetHTTPHeaderMap()); } bool IsCORSEnabledRequestMode(WebURLRequest::FetchRequestMode mode) {
diff --git a/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp b/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp index 0f5ee08..515250c 100644 --- a/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp +++ b/third_party/WebKit/Source/platform/exported/WebCORSPreflightResultCache.cpp
@@ -27,12 +27,12 @@ #include "public/platform/WebCORSPreflightResultCache.h" #include <memory> +#include "base/lazy_instance.h" #include "platform/HTTPNames.h" #include "platform/loader/fetch/FetchUtils.h" #include "platform/loader/fetch/ResourceResponse.h" #include "platform/wtf/CurrentTime.h" #include "platform/wtf/StdLibExtras.h" -#include "platform/wtf/ThreadSpecific.h" #include "public/platform/WebCORS.h" namespace blink { @@ -54,17 +54,16 @@ return ok; } -template <class HashType> -void AddToAccessControlAllowList(const String& string, +template <class SetType> +void AddToAccessControlAllowList(const std::string& string, unsigned start, unsigned end, - HashSet<String, HashType>& set) { - StringImpl* string_impl = string.Impl(); - if (!string_impl) + SetType& set) { + if (string.empty()) return; // Skip white space from start. - while (start <= end && IsSpaceOrNewline((*string_impl)[start])) + while (start <= end && IsSpaceOrNewline(string.at(start))) ++start; // only white space @@ -72,15 +71,14 @@ return; // Skip white space from end. - while (end && IsSpaceOrNewline((*string_impl)[end])) + while (end && IsSpaceOrNewline(string.at(end))) --end; - set.insert(string.Substring(start, end - start + 1)); + set.insert(string.substr(start, end - start + 1)); } -template <class HashType> -bool ParseAccessControlAllowList(const String& string, - HashSet<String, HashType>& set) { +template <class SetType> +bool ParseAccessControlAllowList(const std::string& string, SetType& set) { unsigned start = 0; size_t end; while ((end = string.find(',', start)) != kNotFound) { @@ -94,6 +92,9 @@ return true; } +static base::LazyInstance<WebCORSPreflightResultCache>::Leaky lazy_cache_ptr_ = + LAZY_INSTANCE_INITIALIZER; + } // namespace WebCORSPreflightResultCacheItem::WebCORSPreflightResultCacheItem( @@ -106,7 +107,7 @@ std::unique_ptr<WebCORSPreflightResultCacheItem> WebCORSPreflightResultCacheItem::Create( const WebURLRequest::FetchCredentialsMode credentials_mode, - const HTTPHeaderMap& response_header, + const WebHTTPHeaderMap& response_header, WebString& error_description) { std::unique_ptr<WebCORSPreflightResultCacheItem> item = base::WrapUnique(new WebCORSPreflightResultCacheItem(credentials_mode)); @@ -118,11 +119,16 @@ } bool WebCORSPreflightResultCacheItem::Parse( - const HTTPHeaderMap& response_header, + const WebHTTPHeaderMap& response_header, WebString& error_description) { methods_.clear(); + + const HTTPHeaderMap& response_header_map = response_header.GetHTTPHeaderMap(); + if (!ParseAccessControlAllowList( - response_header.Get(HTTPNames::Access_Control_Allow_Methods), + response_header_map.Get(HTTPNames::Access_Control_Allow_Methods) + .Ascii() + .data(), methods_)) { error_description = "Cannot parse Access-Control-Allow-Methods response header field in " @@ -132,7 +138,9 @@ headers_.clear(); if (!ParseAccessControlAllowList( - response_header.Get(HTTPNames::Access_Control_Allow_Headers), + response_header_map.Get(HTTPNames::Access_Control_Allow_Headers) + .Ascii() + .data(), headers_)) { error_description = "Cannot parse Access-Control-Allow-Headers response header field in " @@ -142,7 +150,7 @@ unsigned expiry_delta; if (ParseAccessControlMaxAge( - response_header.Get(HTTPNames::Access_Control_Max_Age), + response_header_map.Get(HTTPNames::Access_Control_Max_Age), expiry_delta)) { if (expiry_delta > kMaxPreflightCacheTimeoutSeconds) expiry_delta = kMaxPreflightCacheTimeoutSeconds; @@ -158,7 +166,8 @@ bool WebCORSPreflightResultCacheItem::AllowsCrossOriginMethod( const WebString& method, WebString& error_description) const { - if (methods_.Contains(method) || WebCORS::IsCORSSafelistedMethod(method)) + if (methods_.find(method.Ascii().data()) != methods_.end() || + FetchUtils::IsCORSSafelistedMethod(method)) return true; error_description.Assign(WebString::FromASCII("Method " + method.Ascii() + @@ -170,10 +179,10 @@ } bool WebCORSPreflightResultCacheItem::AllowsCrossOriginHeaders( - const HTTPHeaderMap& request_headers, + const WebHTTPHeaderMap& request_headers, WebString& error_description) const { - for (const auto& header : request_headers) { - if (!headers_.Contains(header.key) && + for (const auto& header : request_headers.GetHTTPHeaderMap()) { + if (headers_.find(header.key.Ascii().data()) == headers_.end() && !FetchUtils::IsCORSSafelistedHeader(header.key, header.value) && !FetchUtils::IsForbiddenHeaderName(header.key)) { error_description.Assign( @@ -189,7 +198,7 @@ bool WebCORSPreflightResultCacheItem::AllowsRequest( WebURLRequest::FetchCredentialsMode credentials_mode, const WebString& method, - const HTTPHeaderMap& request_headers) const { + const WebHTTPHeaderMap& request_headers) const { WebString ignored_explanation; if (absolute_expiry_time_ < CurrentTime()) @@ -205,17 +214,19 @@ } WebCORSPreflightResultCache& WebCORSPreflightResultCache::Shared() { - DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadSpecific<WebCORSPreflightResultCache>, - cache, ()); - return *cache; + return lazy_cache_ptr_.Get(); } +WebCORSPreflightResultCache::~WebCORSPreflightResultCache() {} + void WebCORSPreflightResultCache::AppendEntry( - const WebString& origin, - const WebURL& url, + const WebString& web_origin, + const WebURL& web_url, std::unique_ptr<WebCORSPreflightResultCacheItem> preflight_result) { - preflight_hash_map_[origin.Ascii()][url.GetString().Ascii()] = - std::move(preflight_result); + std::string url(web_url.GetString().Ascii()); + std::string origin(web_origin.Ascii()); + + preflight_hash_map_[origin][url] = std::move(preflight_result); } bool WebCORSPreflightResultCache::CanSkipPreflight( @@ -223,7 +234,7 @@ const WebURL& web_url, WebURLRequest::FetchCredentialsMode credentials_mode, const WebString& method, - const HTTPHeaderMap& request_headers) { + const WebHTTPHeaderMap& request_headers) { std::string origin(web_origin.Ascii()); std::string url(web_url.GetString().Ascii());
diff --git a/third_party/WebKit/Source/platform/exported/WebCORSTest.cpp b/third_party/WebKit/Source/platform/exported/WebCORSTest.cpp index d14118d..55a3c2d 100644 --- a/third_party/WebKit/Source/platform/exported/WebCORSTest.cpp +++ b/third_party/WebKit/Source/platform/exported/WebCORSTest.cpp
@@ -6,8 +6,6 @@ #include "platform/loader/fetch/ResourceRequest.h" #include "platform/weborigin/SecurityOrigin.h" -#include "platform/wtf/RefPtr.h" -#include "platform/wtf/text/WTFString.h" #include "testing/gtest/include/gtest/gtest.h" namespace blink { @@ -82,84 +80,84 @@ } TEST(ParseAccessControlExposeHeadersAllowListTest, ValidInput) { - WebCORS::HTTPHeaderSet set; + WebHTTPHeaderSet set; WebCORS::ParseAccessControlExposeHeadersAllowList("valid", set); EXPECT_EQ(1U, set.size()); - EXPECT_TRUE(set.Contains("valid")); + EXPECT_TRUE(set.find("valid") != set.end()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList("a,b", set); EXPECT_EQ(2U, set.size()); - EXPECT_TRUE(set.Contains("a")); - EXPECT_TRUE(set.Contains("b")); + EXPECT_TRUE(set.find("a") != set.end()); + EXPECT_TRUE(set.find("b") != set.end()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList(" a , b ", set); EXPECT_EQ(2U, set.size()); - EXPECT_TRUE(set.Contains("a")); - EXPECT_TRUE(set.Contains("b")); + EXPECT_TRUE(set.find("a") != set.end()); + EXPECT_TRUE(set.find("b") != set.end()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList(" \t \t\t a", set); EXPECT_EQ(1U, set.size()); - EXPECT_TRUE(set.Contains("a")); + EXPECT_TRUE(set.find("a") != set.end()); } TEST(ParseAccessControlExposeHeadersAllowListTest, DuplicatedEntries) { - WebCORS::HTTPHeaderSet set; + WebHTTPHeaderSet set; WebCORS::ParseAccessControlExposeHeadersAllowList("a, a", set); EXPECT_EQ(1U, set.size()); - EXPECT_TRUE(set.Contains("a")); + EXPECT_TRUE(set.find("a") != set.end()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList("a, a, b", set); EXPECT_EQ(2U, set.size()); - EXPECT_TRUE(set.Contains("a")); - EXPECT_TRUE(set.Contains("b")); + EXPECT_TRUE(set.find("a") != set.end()); + EXPECT_TRUE(set.find("b") != set.end()); } TEST(ParseAccessControlExposeHeadersAllowListTest, InvalidInput) { - WebCORS::HTTPHeaderSet set; + WebHTTPHeaderSet set; WebCORS::ParseAccessControlExposeHeadersAllowList("not valid", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList("///", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList("/a/", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList(",", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList(" , ", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList(" , a", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList("a , ", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList("", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); WebCORS::ParseAccessControlExposeHeadersAllowList(" ", set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); set.clear(); // U+0141 which is 'A' (0x41) + 0x100. WebCORS::ParseAccessControlExposeHeadersAllowList( String::FromUTF8("\xC5\x81"), set); - EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.empty()); } } // namespace
diff --git a/third_party/WebKit/Source/platform/exported/WebHTTPHeaderMap.cpp b/third_party/WebKit/Source/platform/exported/WebHTTPHeaderMap.cpp new file mode 100644 index 0000000..31e23e5 --- /dev/null +++ b/third_party/WebKit/Source/platform/exported/WebHTTPHeaderMap.cpp
@@ -0,0 +1,75 @@ +// 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 "public/platform/WebHTTPHeaderMap.h" + +#include <string> +#include "base/memory/ptr_util.h" +#include "net/http/http_request_headers.h" +#include "net/http/http_response_headers.h" +#include "platform/network/HTTPHeaderMap.h" +#include "platform/wtf/text/AtomicString.h" +#include "public/platform/WebString.h" + +namespace blink { + +class WebHTTPHeaderMap::WebHTTPHeaderMapImpl { + public: + explicit WebHTTPHeaderMapImpl(const HTTPHeaderMap& map) : map_(map){}; + + explicit WebHTTPHeaderMapImpl(const net::HttpRequestHeaders* headers) { + for (net::HttpRequestHeaders::Iterator it(*headers); it.GetNext();) { + map_.Add( + WTF::AtomicString::FromUTF8(it.name().c_str(), it.name().length()), + WTF::AtomicString::FromUTF8(it.value().c_str(), it.value().length())); + } + }; + + explicit WebHTTPHeaderMapImpl(const net::HttpResponseHeaders* headers) { + size_t iter = 0; + std::string name; + std::string value; + + while (headers->EnumerateHeaderLines(&iter, &name, &value)) { + WTF::AtomicString atomic_name = + WTF::AtomicString::FromUTF8(name.c_str(), name.length()); + WTF::AtomicString atomic_value = + WTF::AtomicString::FromUTF8(value.c_str(), value.length()); + + if (map_.Contains(atomic_name)) + map_.Set(atomic_name, map_.Get(atomic_name) + "," + atomic_value); + else + map_.Add(atomic_name, atomic_value); + } + }; + + const HTTPHeaderMap& map() const { return map_; }; + + private: + HTTPHeaderMap map_; +}; + +WebHTTPHeaderMap::~WebHTTPHeaderMap(){}; + +WebHTTPHeaderMap::WebHTTPHeaderMap(const HTTPHeaderMap& map) { + implementation_ = base::MakeUnique<WebHTTPHeaderMapImpl>(map); +} + +WebHTTPHeaderMap::WebHTTPHeaderMap(const net::HttpResponseHeaders* headers) { + implementation_ = base::MakeUnique<WebHTTPHeaderMapImpl>(headers); +} + +WebHTTPHeaderMap::WebHTTPHeaderMap(const net::HttpRequestHeaders* headers) { + implementation_ = base::MakeUnique<WebHTTPHeaderMapImpl>(headers); +} + +const HTTPHeaderMap& WebHTTPHeaderMap::GetHTTPHeaderMap() const { + return implementation_->map(); +} + +WebString WebHTTPHeaderMap::Get(const WebString& name) const { + return implementation_->map().Get(name).GetString(); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp b/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp index 1218a1d..bbbc965b 100644 --- a/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp +++ b/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp
@@ -49,6 +49,10 @@ return private_->Id(); } +int WebMediaStream::UniqueId() const { + return private_->UniqueId(); +} + void WebMediaStream::AudioTracks( WebVector<WebMediaStreamTrack>& web_tracks) const { size_t number_of_tracks = private_->NumberOfAudioComponents();
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp b/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp index 2c53633..9555c90 100644 --- a/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp +++ b/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp
@@ -101,6 +101,11 @@ return private_->Id(); } +int WebMediaStreamTrack::UniqueId() const { + DCHECK(!private_.IsNull()); + return private_->UniqueId(); +} + WebMediaStreamSource WebMediaStreamTrack::Source() const { DCHECK(!private_.IsNull()); return WebMediaStreamSource(private_->Source());
diff --git a/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp b/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp index 506a84f7..aacb8dc 100644 --- a/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp +++ b/third_party/WebKit/Source/platform/exported/WebRuntimeFeatures.cpp
@@ -104,6 +104,10 @@ RuntimeEnabledFeatures::SetCSSHexAlphaColorEnabled(enable); } +void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) { + RuntimeEnabledFeatures::SetScrollTopLeftInteropEnabled(enable); +} + void WebRuntimeFeatures::EnableDatabase(bool enable) { RuntimeEnabledFeatures::SetDatabaseEnabled(enable); }
diff --git a/third_party/WebKit/Source/platform/exported/WebSurfaceLayerBridge.cpp b/third_party/WebKit/Source/platform/exported/WebSurfaceLayerBridge.cpp index 987d21a5..bb5ca89 100644 --- a/third_party/WebKit/Source/platform/exported/WebSurfaceLayerBridge.cpp +++ b/third_party/WebKit/Source/platform/exported/WebSurfaceLayerBridge.cpp
@@ -8,10 +8,12 @@ namespace blink { -WebSurfaceLayerBridge::~WebSurfaceLayerBridge() {} - -WebSurfaceLayerBridge* WebSurfaceLayerBridge::Create() { - return new SurfaceLayerBridge(nullptr, nullptr); +std::unique_ptr<WebSurfaceLayerBridge> WebSurfaceLayerBridge::Create( + WebLayerTreeView* layer_tree_view, + WebSurfaceLayerBridgeObserver* observer) { + return base::MakeUnique<SurfaceLayerBridge>(layer_tree_view, observer); } +WebSurfaceLayerBridge::~WebSurfaceLayerBridge() {} + } // namespace blink
diff --git a/third_party/WebKit/Source/platform/exported/WebVideoFrameSubmitter.cpp b/third_party/WebKit/Source/platform/exported/WebVideoFrameSubmitter.cpp new file mode 100644 index 0000000..951ca96d --- /dev/null +++ b/third_party/WebKit/Source/platform/exported/WebVideoFrameSubmitter.cpp
@@ -0,0 +1,20 @@ +// 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 "public/platform/WebVideoFrameSubmitter.h" + +#include "third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.h" + +namespace cc { +class VideoFrameProvider; +} // namespace cc + +namespace blink { + +std::unique_ptr<WebVideoFrameSubmitter> WebVideoFrameSubmitter::Create( + cc::VideoFrameProvider* provider) { + return base::MakeUnique<VideoFrameSubmitter>(provider); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp index 2a0f48a..43bd27ea 100644 --- a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp +++ b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp
@@ -147,13 +147,13 @@ whitelist.feature = feature; features_specified.QuickSet(static_cast<int>(feature)); Vector<WebSecurityOrigin> origins; - // If a policy entry has no (optional) values, only valid syntax for allow - // attribute (e,g, allow="feature_name1; feature_name2 value"), enable the - // feature for src origin. - if (tokens.size() == 1) { - DCHECK(src_origin); - origins.push_back(src_origin); - } + // If a policy entry has no (optional) values (e,g, + // allow="feature_name1; feature_name2 value"), enable the feature for: + // a. if header policy (i.e., src_origin does not exist), self_origin; + // or + // b. if allow attribute (i.e., src_origin exists), src_origin. + if (tokens.size() == 1) + origins.push_back(src_origin ? src_origin : self_origin); for (size_t i = 1; i < tokens.size(); i++) { if (EqualIgnoringASCIICase(tokens[i], "'self'")) {
diff --git a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp index 2a86539e..e3f3ea03 100644 --- a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp +++ b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicyTest.cpp
@@ -28,6 +28,7 @@ "vibrate 'self'", "vibrate 'src'", // Only valid for iframe allow attribute. "vibrate", // Only valid for iframe allow attribute. + "vibrate; fullscreen; payment", "vibrate *", "vibrate " ORIGIN_A "", "vibrate " ORIGIN_B "", @@ -186,6 +187,27 @@ EXPECT_EQ(1UL, parsed_policy[2].origins.size()); EXPECT_TRUE(origin_a_->IsSameSchemeHostPortAndSuborigin( parsed_policy[2].origins[0].Get())); + + // Header policies with no optional origin lists. + parsed_policy = + ParseFeaturePolicy("vibrate;fullscreen;payment", origin_a_.Get(), nullptr, + &messages, test_feature_name_map); + EXPECT_EQ(3UL, parsed_policy.size()); + EXPECT_EQ(WebFeaturePolicyFeature::kVibrate, parsed_policy[0].feature); + EXPECT_FALSE(parsed_policy[0].matches_all_origins); + EXPECT_EQ(1UL, parsed_policy[0].origins.size()); + EXPECT_TRUE(origin_a_->IsSameSchemeHostPortAndSuborigin( + parsed_policy[0].origins[0].Get())); + EXPECT_EQ(WebFeaturePolicyFeature::kFullscreen, parsed_policy[1].feature); + EXPECT_FALSE(parsed_policy[1].matches_all_origins); + EXPECT_EQ(1UL, parsed_policy[1].origins.size()); + EXPECT_TRUE(origin_a_->IsSameSchemeHostPortAndSuborigin( + parsed_policy[1].origins[0].Get())); + EXPECT_EQ(WebFeaturePolicyFeature::kPayment, parsed_policy[2].feature); + EXPECT_FALSE(parsed_policy[2].matches_all_origins); + EXPECT_EQ(1UL, parsed_policy[2].origins.size()); + EXPECT_TRUE(origin_a_->IsSameSchemeHostPortAndSuborigin( + parsed_policy[2].origins[0].Get())); } } // namespace blink
diff --git a/third_party/WebKit/Source/platform/fonts/README.md b/third_party/WebKit/Source/platform/fonts/README.md index 64813d0a..fffa2ef 100644 --- a/third_party/WebKit/Source/platform/fonts/README.md +++ b/third_party/WebKit/Source/platform/fonts/README.md
@@ -2,125 +2,329 @@ This README serves as an documentation entry point of Blink's text stack. -This README can be viewed in formatted form [here](https://chromium.googlesource.com/chromium/src/+/master/third_party/WebKit/Source/platform/fonts/README.md). +It can be viewed in formatted form [here](https://chromium.googlesource.com/chromium/src/+/master/third_party/WebKit/Source/platform/fonts/README.md). ## Overview ## -Blink's text stack covers those functional parts of the layout engine that -process CSS-styled HTML text. From source document to visual output this rougly -comprises the following stages: +Blink's font and text stack covers those functional parts of the layout engine +that provide measurement, geometric operations and drawing for runs of +CSS-styled HTML text. -* [Processing CSS style information into a font definition](#Mapping-CSS-Style-to-Font-Objects) +The API methods +in +[Font.h](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/shaping/Font.h) describe +the interface between the layout code and the font +code. [Font.h](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/shaping/Font.h) provides +API for mainly three kinds of requests coming from the layout and paint code: + + - Measuring text + - Geometric operations used for text selection: + - Computing bounding boxes + - Mapping from coordinates to character indices + - Mapping from character index to coordinates + - Painting text + +From source HTML to visual output this roughly comprises the following stages: + +* [From CSS Styling to Font Objects](#From-CSS-Styling-to-Font-Objects) * [Using this font definition for matching against available web and system fonts](#Font-Matching) +* [An excursion into prerequisites before text shaping can be performed](#excursion_setting-up-shaping) * [Segmenting text into portions suitable for shaping](#Run-Segmentation) * [Looking up elements from the previously shaped entries in the word cache](#Word-Cache) * [Using the matched font for shaping and mapping from characters to glyphs](#Text-Shaping) * [Font fallback](#Font-Fallback) -## Mapping CSS Style to Font Objects ## +## From CSS Styling to `Font` Objects ## -TODO(drott): Describe steps from `ComputedStyle`, `FontBuilder` to -`FontDescription` and `Font` objects. +During +the +[style resolution](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp?type=cs&l=1028) stage +of +layout +[`ComputedStyle`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/style/ComputedStyle.h) objects +are calculated for each element of the DOM tree. Each `ComputedStyle` will own +a +[`Font`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/Font.h) and +a +[`FontDescription`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/FontDescription.cpp) object. +For this to work, after CSS is parsed into the various specialized +`CSSValue`-derived types, the `ConvertFont…` methods +in +[`StyleBuilderConverter.cpp`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp) convert +from `CSSValue`s to `FontDescription` data structures. In the opposite +direction, the `ValueForFont…` methods +in +[`ComputedStyleCSSValueMapping.cpp`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp) convert +back from `FontDescription` back to CSS values. + +Then, during style resolution, `FontBuilder::CreateFont` is called to update the +`Font` object based on the properties stored in `FontDescription` and thus link +those two objects together. The key to linking them together is +`CSSFontSelector`. `Font` is assigned a `CSSFontSelector`, which serves as a +looking glass to know about which fonts are available in the document's +scope. This includes fonts from the realm of web fonts as well as system fonts. + +The `Font` object does not yet represent a particular typeface. Similarly, +`FontDescription` does not point to an individual typeface yet. This is because +`FontDescription` contains a `FontFamily` list of family names originating from +the CSS `font-family` property. + +`Font` objects represent the API for style and layout operations to retrieve +geometric information about a font used in the DOM: retrieve metrics such as +line height, x-height etc. and measure text to retrieve its bounding box. The +paint stage uses `Font` objects to draw text. + +Only when such geometric or painting operations are requested from a `Font` +object, internally `Font` will perform font matching. ## Font Matching ## -TODO(drott): Describe font matching against system fonts in platform specific -implementations as well as matching against web fonts in `FontStyleMatcher`. +As soon as a `Font` object is requested to perform any operation, it needs to +find an individual typeface to work with. The information stored in its +`FontDescription` member needs to be resolved against available web fonts or +system fonts. This process is called font matching. The detailed algorithm for +this process is described in the CSS Fonts Module, +section +[Matching Font Styles](https://drafts.csswg.org/css-fonts/#font-style-matching). -## Word Cache ## +For this purpose, a `Font` object has an `Update(CSSFontSelector*)` method to +inform it about an updated set of available fonts. `Font` internally delegates +the resolution of CSS family names from the `font-family` against available +fonts to its `FontFallbackList` member, and thus hands the `CSSFontSelector` +down to `FontFallbackList`. -TODO(drott,eae): Describe at which level the word cache hooks in, how the cache -keys are calculated and its approach of word and CJK segmentation. +`FontFallbackList` calls `CSSFontSelector::GetFontData` with a `FontDescription` +to perform a lookup. `CSSFontSelector` will in turn ask `FontFaceCache` to find +a FontData object among the available web fonts. If there is already a match for +`FontDescription` in the cache, this `FontData` object is returned. If not, +the +[`FontSelectionAlgorithm::IsBetterMatchForRequest`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/FontSelectionAlgorithm.h?l=44) comparison +function is used to find the best match among the available web fonts. This +comparison function implements +the +[CSS font matching algorithm](https://drafts.csswg.org/css-fonts/#font-style-matching). + +If `CSSFontSelector` can't find a font using this approach, it will try to find +a font from the system. To this end, it will query `FontCache`. `FontCache` is +for system fonts what `FontFaceCache` is for web fonts. `FontCache` has +OS/system specific implementations +in +[FontCacheSkia.cpp](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp), +[FontCacheMac.mm](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/mac/FontCacheMac.mm), +[FontCacheLinux.cpp](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/linux/FontCacheLinux.cpp), +[FontCacheAndroid.cpp](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/android/FontCacheAndroid.cpp) in +order to perform system font lookups using the respective OS/system API. + +## Excursion: Setting up Shaping + +Before looking at the next stages, we need to understand what text shaping +means. + +Shaping text is the process of mapping a unicode string to a sequence of glyph +IDs from a font plus their exact geometrical positions through performing +OpenType layout operations defined in the font. For Latin script, the output is +mostly glyph IDs and horizontal advances, but for complex scripts, the output +also describes positioning in the vertical direction, reordered glyphs, and +association into grapheme clusters. + +In more detail, a unicode string is not the only required input for this +mapping. Instead, a number of variables are required before shaping can be +performed. For a single run of text ready for shaping, the following input +variables need to be isolated and constant: + + - Font + - Font Size + - Text Direction (LTR, RTL) + - Text Orientation (Horizontal, Vertical) + - Requested OpenType Features + - Unicode Script + - Unicode Language + - Text (the actual text of this run) + - Context (the text surrounding this run of text) + +This means that before shaping can be performed, incoming text and +`FontDescription` information coming from the layout code needs to be segmented +into sub-runs where the above inputs stay the same. For example, if the incoming +text contains Unicode sequences of different scripts, the incoming text run +needs to be broken up into sub-runs of only one script. Similarly, if the +incoming text contains differing orientations, for example Latin text embedded +in Japanese vertical layout, then these sub-runs need to be isolated and shaped +separately. + +### Emoji + +Emoji place additional requirements in isolating sub-runs for shaping. Emoji +Unicode code points and code point sequences have different default presentation +styles, text-default, or emoji-default. This is defined in the +section +[Presentation Style of Unicode Technical Report #51](http://unicode.org/draft/reports/tr51/tr51.html#Presentation_Style). So +in order to select the correct font for emoji presentation — either a color +font, or a regular contour font — the incoming text needs to be segmented and +isolated by its emoji properties as well. + +## Word Cache + +Because text shaping and font fallback are costly operations and geometric +operations on text runs are performed over and over again during layout, a word +cache is used to speed up these operations. + +### Cacheable units + +The basic unit for storing shaping results in a cache is a word, separated by +spaces. Since CJK text often does not use spaces to separate words, for CJK +text, each individual CJK character is treated as a word. + +### Cache Keying + +As the [excursion on text shaping explains](#excursion_setting-up-shaping), +multiple variables go into the shaping equation, such as a fixed font, a fixed +font size, script, et cetera. This in turn means that the word cache becomes +invalid if the set of available font changes changes because `FontFallbackList` +would change in what it returns when available fonts change. We cannot reduce +the cache key computation for the word cache to the string/word itself plus the +requested font as represented by `FontDescription`, but we also need to capture +the set of available fonts at the time shaping for this word and its +`FontDescription` was performed. This state is captured by computing a composite +key off of the `FontFallbackList` +in +[`FontFallbackList::CompositeKey`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/FontFallbackList.cpp?l=186). + +### Accessing the Cache + +[`CachingWordShaper.h`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaper.h) is +the entry point for retrieving shaping results through the word cache. It defers +to +[`CachingWordShapeIterator.h`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShapeIterator.h) for +word/space or CJK segmentation and responds to requests for a `TextRun`'s +`Width()` or returns a `ShapeResultBuffer`containing a list of `ShapeResult` +objects. If not found in the cache `ShapeResult` objects are produced by +the [text shaping](#Text-Shaping) stage. So `CachingWordShaper` serves as the +accelerating caching layer between `Font` operations and `HarfBuzzShaper`. ## Run Segmentation ## -TODO(drott): Describe purpose and run segmentation approach of `RunSegmenter`. +The section [Setting up Shaping](#excursion_setting-up-shaping) described the +requirements for constant input requirements before shaping can be performed. + +[RunSegmenter](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.h) is +the top level API for segmenting incoming text runs using sub-segmenters. It +splits text by their Unicode script property +(via +[`ScriptRunIterator`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/ScriptRunIterator.h)), +orientation and direction — horizontal LTR/RTL, vertical LTR/RTL +(via +[`OrientationIterator`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/OrientationIterator.h)), +and emoji presentation attributes +(via +[`SymbolsIterator`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/SymbolsIterator.h)). + +`RunSegmenter` is constructed from a text run in UTF-16 `UChar` format, then +functions as an iterator returning sub-runs of constant script, emoji +presentation, and orientation. These sub-runs are then suitable as units for +shaping. ## Text Shaping ## -The low level shaping implementation is +The text shaping implementation is in [shaping/HarfBuzzShaper.h](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h) and [shaping/HarfBuzzShaper.cpp](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp) Shaping text runs is split into several -stages: [Run segmentation](#Run-Segmentation), shaping the initial segment, -identify shaped and non-shaped sequences of the shaping result, and processing -sub-runs by trying to shape them with a fallback font until the last resort font -is reached. +stages: [Run segmentation](#Run-Segmentation), shaping the initial segment +starting with the primary font, identifying shaped and non-shaped sequences of +the shaping result, and processing unshaped sub-runs by trying to shape using +the remaining list of fonts, then trying fallback fonts until the last resort +font is reached. -If caps formatting is requested, an additional lowercase/uppercase -segmentation stage is required. In this stage, OpenType features in the font -are matched against the requested formatting and formatting is synthesized as -required by the CSS Level 3 Fonts Module. +If small/petite caps formatting is requested, an additional lowercase/uppercase +segmentation pass is required. In this stage, OpenType features in the font are +matched against the requested formatting. If the respective caps feature is +found, the feature is used in shaping and activated from the font. Otherwise +small-caps glyphs are synthesized as required by the CSS Level 3 Fonts Module. -Below we will go through one example - for simplicity without caps formatting - +Below we will go through one example — for simplicity without caps formatting — to illustrate the process: The following is a run of vertical text to be -shaped. After run segmentation in `RunSegmenter` it is split into 4 segments. The -segments indicated by the segementation results showing the script, orientation -information and small caps handling of the individual segment. The Japanese text -at the beginning has script "Hiragana", does not need rotation when laid out -vertically and does not need uppercasing when small caps is requested. +shaped. After run segmentation in `RunSegmenter` it is split into 4 +segments. The segments indicated by the segementation results showing the +script, orientation information and font fallback preference (text, emoji +presentation) of the individual segment. The Japanese text at the beginning has +script "Hiragana", does not need rotation when laid out vertically and does not +require an emoji font, as indicated by `FontFallbackPriority::kText`. ``` 0 い 1 ろ 2 は USCRIPT_HIRAGANA, OrientationIterator::OrientationKeep, - SmallCapsIterator::SmallCapsSameCase + FontFallbackPriority::kText 3 a 4 ̄ (Combining Macron) 5 a 6 A USCRIPT_LATIN, OrientationIterator::OrientationRotateSideways, - SmallCapsIterator::SmallCapsUppercaseNeeded + FontFallbackPriority::kText 7 い 8 ろ 9 は USCRIPT_HIRAGANA, OrientationIterator::OrientationKeep, - SmallCapsIterator::SmallCapsSameCase + FontFallbackPriority::kText ``` Let's assume the CSS for this text run is as follows: `font-family: "Heiti SC", Tinos, sans-serif;` -where Tinos is a web font, defined as a composite font, with two sub ranges, -one for Latin `U+00-U+FF` and one unrestricted unicode-range. +where *Tinos* is a web font, defined as a composite font (i.e. two separate CSS +`@font-face` instances with +different +[`unicode-range` subsetting ranges](https://developer.mozilla.org/en/docs/Web/CSS/@font-face/unicode-range)), +one for Latin `U+00-U+FF` and one unrestricted `unicode-range`. -`FontFallbackIterator` provides the shaper with Heiti SC, then Tinos of the -restricted unicode-range, then the unrestricted full unicode-range Tinos, -then a system sans-serif. +`FontFallbackIterator` provides these fonts to the shaper. It will start with +*Heiti SC*, then the first part of *Tinos* for the restricted unicode-range, +then the unrestricted full unicode-range part of *Tinos*, then a system +*sans-serif*. -The initial segment 0-2 to the shaper, together with the segmentation -properties and the initial Heiti SC font. Characters 0-2 are shaped -successfully with Heiti SC. The next segment, 3-5 is passed to the shaper. -The shaper attempts to shape it with Heiti SC, which fails for the Combining -Macron. So the shaping result for this segment would look similar to this. +The initial segment 0-2 is sent to the shaper, together with the segmentation +properties and the initial Heiti SC font. Characters 0-2 are shaped successfully +with Heiti SC. ``` -Glyphpos: 0 1 2 3 -Cluster: 0 0 2 3 -Glyph: a x a A (where x is .notdef) +Glyphpos: 0 1 2 +Cluster: 0 1 2 +Glyph: い ろ は ``` - -Now in the `extractShapeResults()` step we notice that there is more work to -do, since Heiti SC does not have a glyph for the Combining Macron combined -with an a. So, this cluster together with a Todo item for switching to the -next font is put into `HolesQueue`. - -After shaping the initial segment, the remaining items in the `HolesQueue` are -processed, picking them from the head of the queue. So, first, the next font is -requested from the `FontFallbackIterator`. In this case, Tinos (for the range -`U+00-U+FF`) comes back. Shaping using this font, assuming it is subsetted, -fails again since there is no combining mark available. This triggers requesting -yet another font. This time, the Tinos font for the full range. With this, -shaping succeeds with the following HarfBuzz result: +The next segment, 3-6 is passed to the shaper. The shaper attempts to shape it +with Heiti SC, which fails for the Combining Macron. So the shaping result for +this segment would look similar to this. ``` -Glyphpos 0 1 2 3 -Cluster: 0 0 2 3 -Glyph: a ◌̄ a A (with glyph coordinates placing the ◌̄ above the first a) +Glyphpos: 3 4 5 6 +Cluster: 3 3 5 6 +Glyph: a ☐ a A (where ☐ is .notdef) +``` + +Now in the `extractShapeResults()` step we notice that there is more work to do, +since *Heiti SC* does not have a glyph for the Combining Macron combined with an +a. So, cluster 3 consisting of the characters a plus ̄ (Combining Macron) is +placed in the `HolesQueue` for clusters that need to be processed after +switching to the next fallback font. + +After shaping the first segment as whole, the font is cycled to the next font +coming from `FontFallbackIterator` and the remaining items in the `HolesQueue` +are processed, picking them from the head of the queue. + +In this case, the next font is *Tinos* (for the range `U+00-U+FF`). Shaping +using this font, assuming it is subsetted, fails again since there is no +combining mark available in the unicode range `U+00-U+FF`. This triggers +requesting yet another font. This time, the Tinos font for the full range. With +this, shaping succeeds with the following HarfBuzz result: + +``` +Glyphpos: 3 4 5 6 +Cluster: 3 3 5 6 +Glyph: a ◌̄ a A (with glyph coordinates placing the ◌̄ above the first a) ``` Now this sub run is successfully processed and can be appended to @@ -133,5 +337,46 @@ ## Font Fallback ## -TODO(drott): Describe when font fallback is invoked, and how -`FontFallbackIterator` cycles through fallback fonts during shaping. +The section [Text Shaping](#Text-Shaping) illustrates that font selection during +shaping is part of an iterative process, which first tries to use as many glyphs +as possible from the primary font, then in subsequent iterations proceeds to +fill gaps from the secondary font and so on until there are no more so called +`.notdef` glyphs, i.e. no more boxes of text for which no glyph was found. + +`FontFallbackIterator` meets the needs of HarfBuzzShaper to deliver new fonts to +fill such gaps. `FontFallbackIterator` is an iterator style API, which on +calling `next()` will deliver the first suitable font to +try. A +[`FontFallbackList`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/FontFallbackList.h) is +the internal representation of fonts resolved from the CSS `font-family:` +property. `FontFallbackList` attempts to resolve font family names from the CSS +`font-family:` property in descending order. It tries to find them among the +list of available web fonts which were declared by `@font-face` rules or added +to the document using +the [`FontFace`](https://developer.mozilla.org/en/docs/Web/API/FontFace) +JavaScript API. If a requested font family is not found among web fonts, system +fonts are searched next. This behavior matches the requirements of the font +style matching algorithm of +the +[CSS Fonts specification](https://drafts.csswg.org/css-fonts/#font-style-matching), +which mandates to prioritize web fonts over system fonts. + +`FontFallbackIterator` is intialized with a `FontFallbackList` and starts +retrieving fonts from this list as its first source for fonts. If during shaping +a run of text `HarfBuzzShaper` keeps requesting additional fonts after +`FontFallbackList` is exhausted, this means that `HarfBuzzShaper` still tries to +fill gaps in the run. In other words, the fonts specified in `font-family` did +not have sufficient glyph coverage to draw the whole run of text on the +screen. In this situation, system font fallback is invoked, which means +attempting to find a surrogate font which contains those glyphs that were +missing so far. To this end `FontFallbackIterator` +calls +[`FontCache::FallbackFontForCharacter()`](https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/fonts/FontCache.h?type=cs&q=fallbackFontForCharacter) in +order to retrieve a font that has a glyph for the requested Unicode +character. This means, beyond what is listed in `font-family` there are +additional system fonts pulled in to the shaping process. + +In summary, `FontFallbackIterator` feeds fonts from the CSS `font-family` list +as well as system fallback fonts to `HarfBuzzShaper` for use in the shaping +iterations until ideally all gaps are filled and the full text run can be drawn +with the correct glyphs.
diff --git a/third_party/WebKit/Source/platform/geometry/GeometryAsJSON.cpp b/third_party/WebKit/Source/platform/geometry/GeometryAsJSON.cpp new file mode 100644 index 0000000..01f334b --- /dev/null +++ b/third_party/WebKit/Source/platform/geometry/GeometryAsJSON.cpp
@@ -0,0 +1,52 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "platform/geometry/GeometryAsJSON.h" + +#include "platform/transforms/TransformationMatrix.h" + +namespace blink { + +static double RoundCloseToZero(double number) { + return std::abs(number) < 1e-7 ? 0 : number; +} + +std::unique_ptr<JSONArray> TransformAsJSONArray(const TransformationMatrix& t) { + std::unique_ptr<JSONArray> array = JSONArray::Create(); + { + std::unique_ptr<JSONArray> row = JSONArray::Create(); + row->PushDouble(RoundCloseToZero(t.M11())); + row->PushDouble(RoundCloseToZero(t.M12())); + row->PushDouble(RoundCloseToZero(t.M13())); + row->PushDouble(RoundCloseToZero(t.M14())); + array->PushArray(std::move(row)); + } + { + std::unique_ptr<JSONArray> row = JSONArray::Create(); + row->PushDouble(RoundCloseToZero(t.M21())); + row->PushDouble(RoundCloseToZero(t.M22())); + row->PushDouble(RoundCloseToZero(t.M23())); + row->PushDouble(RoundCloseToZero(t.M24())); + array->PushArray(std::move(row)); + } + { + std::unique_ptr<JSONArray> row = JSONArray::Create(); + row->PushDouble(RoundCloseToZero(t.M31())); + row->PushDouble(RoundCloseToZero(t.M32())); + row->PushDouble(RoundCloseToZero(t.M33())); + row->PushDouble(RoundCloseToZero(t.M34())); + array->PushArray(std::move(row)); + } + { + std::unique_ptr<JSONArray> row = JSONArray::Create(); + row->PushDouble(RoundCloseToZero(t.M41())); + row->PushDouble(RoundCloseToZero(t.M42())); + row->PushDouble(RoundCloseToZero(t.M43())); + row->PushDouble(RoundCloseToZero(t.M44())); + array->PushArray(std::move(row)); + } + return array; +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/geometry/GeometryAsJSON.h b/third_party/WebKit/Source/platform/geometry/GeometryAsJSON.h new file mode 100644 index 0000000..c441ee3 --- /dev/null +++ b/third_party/WebKit/Source/platform/geometry/GeometryAsJSON.h
@@ -0,0 +1,36 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GeometryAsJSON_h +#define GeometryAsJSON_h + +#include "platform/PlatformExport.h" +#include "platform/json/JSONValues.h" + +namespace blink { + +class TransformationMatrix; + +template <typename T> +std::unique_ptr<JSONArray> PointAsJSONArray(const T& point) { + std::unique_ptr<JSONArray> array = JSONArray::Create(); + array->PushDouble(point.X()); + array->PushDouble(point.Y()); + return array; +} + +template <typename T> +std::unique_ptr<JSONArray> SizeAsJSONArray(const T& size) { + std::unique_ptr<JSONArray> array = JSONArray::Create(); + array->PushDouble(size.Width()); + array->PushDouble(size.Height()); + return array; +} + +PLATFORM_EXPORT std::unique_ptr<JSONArray> TransformAsJSONArray( + const TransformationMatrix&); + +} // namespace blink + +#endif // GeometryAsJSON_h
diff --git a/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp b/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp index 920568f..1a37e94 100644 --- a/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp +++ b/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp
@@ -15,104 +15,10 @@ namespace { -// This must match ICCProfileAnalyzeResult enum in histograms.xml. -enum ICCAnalyzeResult { - kICCExtractedMatrixAndAnalyticTrFn = 0, - kICCExtractedMatrixAndApproximatedTrFn = 1, - kICCFailedToApproximateTrFn = 2, - kICCFailedToExtractRawTrFn = 3, - kICCFailedToExtractMatrix = 4, - kICCFailedToParse = 5, - kICCProfileAnalyzeLast = kICCFailedToParse -}; - // The output device color space is global and shared across multiple threads. SpinLock g_target_color_space_lock; gfx::ColorSpace* g_target_color_space = nullptr; -ICCAnalyzeResult HistogramICCProfile(const gfx::ICCProfile& profile) { - std::vector<char> data = profile.GetData(); - sk_sp<SkICC> sk_icc = SkICC::Make(data.data(), data.size()); - if (!sk_icc) - return kICCFailedToParse; - - SkMatrix44 to_xyzd50; - bool to_xyzd50_result = sk_icc->toXYZD50(&to_xyzd50); - if (!to_xyzd50_result) - return kICCFailedToExtractMatrix; - - SkColorSpaceTransferFn fn; - bool is_numerical_transfer_fn_result = sk_icc->isNumericalTransferFn(&fn); - if (is_numerical_transfer_fn_result) - return kICCExtractedMatrixAndAnalyticTrFn; - - // Analyze the numerical approximation of table-based transfer functions. - // This should never fail in practice, because any profile from which a - // primary matrix was extracted will also provide raw transfer data. - SkICC::Tables tables; - bool raw_transfer_fn_result = sk_icc->rawTransferFnData(&tables); - DCHECK(raw_transfer_fn_result); - if (!raw_transfer_fn_result) - return kICCFailedToExtractRawTrFn; - - // Analyze the channels separately. - std::vector<float> x_combined; - std::vector<float> t_combined; - for (size_t c = 0; c < 3; ++c) { - SkICC::Channel* channels[3] = {&tables.fRed, &tables.fGreen, &tables.fBlue}; - SkICC::Channel* channel = channels[c]; - DCHECK_GE(channel->fCount, 2); - const float* data = reinterpret_cast<const float*>( - tables.fStorage->bytes() + channel->fOffset); - std::vector<float> x; - std::vector<float> t; - for (int i = 0; i < channel->fCount; ++i) { - float xi = i / (channel->fCount - 1.f); - float ti = data[i]; - x.push_back(xi); - t.push_back(ti); - x_combined.push_back(xi); - t_combined.push_back(ti); - } - - bool nonlinear_fit_converged = - gfx::SkApproximateTransferFn(x.data(), t.data(), x.size(), &fn); - UMA_HISTOGRAM_BOOLEAN("Blink.ColorSpace.Destination.NonlinearFitConverged", - nonlinear_fit_converged); - - // Record the accuracy of the fit, separating out by nonlinear and - // linear fits. - if (nonlinear_fit_converged) { - float max_error = 0.f; - for (size_t i = 0; i < x.size(); ++i) { - float fn_of_xi = gfx::SkTransferFnEval(fn, x[i]); - float error_at_xi = std::abs(t[i] - fn_of_xi); - max_error = std::max(max_error, error_at_xi); - } - UMA_HISTOGRAM_CUSTOM_COUNTS( - "Blink.ColorSpace.Destination.NonlinearFitError", - static_cast<int>(max_error * 255), 0, 127, 16); - } - } - - bool combined_nonlinear_fit_converged = gfx::SkApproximateTransferFn( - x_combined.data(), t_combined.data(), x_combined.size(), &fn); - if (!combined_nonlinear_fit_converged) - return kICCFailedToApproximateTrFn; - - float combined_max_error = 0.f; - for (size_t i = 0; i < x_combined.size(); ++i) { - float fn_of_xi = gfx::SkTransferFnEval(fn, x_combined[i]); - float error_at_xi = std::abs(t_combined[i] - fn_of_xi); - combined_max_error = std::max(combined_max_error, error_at_xi); - } - UMA_HISTOGRAM_CUSTOM_COUNTS( - "Blink.ColorSpace.Destination.NonlinearFitErrorCombined", - static_cast<int>(combined_max_error * 255), 0, 127, 16); - - return kICCExtractedMatrixAndApproximatedTrFn; -} - } // namespace // static @@ -127,14 +33,9 @@ return; // Attempt to convert the ICC profile to an SkColorSpace. - if (profile != gfx::ICCProfile()) { + if (profile != gfx::ICCProfile()) g_target_color_space = new gfx::ColorSpace(profile.GetColorSpace()); - ICCAnalyzeResult analyze_result = HistogramICCProfile(profile); - UMA_HISTOGRAM_ENUMERATION("Blink.ColorSpace.Destination.ICCResult", - analyze_result, kICCProfileAnalyzeLast); - } - // If we do not succeed, assume sRGB. if (!g_target_color_space) g_target_color_space = new gfx::ColorSpace(gfx::ColorSpace::CreateSRGB());
diff --git a/third_party/WebKit/Source/platform/graphics/DEPS b/third_party/WebKit/Source/platform/graphics/DEPS index aac86a5..7a8b27a 100644 --- a/third_party/WebKit/Source/platform/graphics/DEPS +++ b/third_party/WebKit/Source/platform/graphics/DEPS
@@ -5,15 +5,19 @@ "+base/callback.h", "+base/compiler_specific.h", "+base/message_loop", + "+base/threading/thread.h", "+base/threading/thread_checker.h", "+cc", "-cc/blink", "+components/viz/common", + "+components/viz/test/fake_external_begin_frame_source.h", "+gpu/command_buffer/client/gles2_interface.h", "+gpu/command_buffer/client/gpu_memory_buffer_manager.h", "+gpu/command_buffer/common/capabilities.h", "+gpu/command_buffer/common/mailbox.h", "+gpu/command_buffer/common/sync_token.h", + "+media/base/media_switches.h", + "+media/base/video_frame.h", "+services/viz/public/interfaces", "+public/web/WebSettings.h", ]
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp index 0db1523f..54133682 100644 --- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp +++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
@@ -100,8 +100,11 @@ PrepareLazyDecodedFrames(); - // ImageFrameGenerator has the latest known alpha state. There will be a - // performance boost if this frame is opaque. + // PrepareLazyDecodedFrames should populate the metadata for each frame in + // this image and create the |frame_generator_|, if enough data is available. + if (index >= frame_data_.size()) + return nullptr; + DCHECK(frame_generator_); const SkISize& decoded_size = frame_generator_->GetFullSize(); DCHECK_GT(decoded_size.width(), 0); @@ -111,6 +114,8 @@ RefPtr<SegmentReader> segment_reader = SegmentReader::CreateFromSkROBuffer(std::move(ro_buffer)); + // ImageFrameGenerator has the latest known alpha state. There will be a + // performance boost if this frame is opaque. SkAlphaType alpha_type = frame_generator_->HasAlpha(index) ? kPremul_SkAlphaType : kOpaque_SkAlphaType;
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp index de8443f..5cebe4b 100644 --- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp +++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp
@@ -36,6 +36,7 @@ #include "platform/bindings/RuntimeCallStats.h" #include "platform/bindings/V8PerIsolateData.h" #include "platform/geometry/FloatRect.h" +#include "platform/geometry/GeometryAsJSON.h" #include "platform/geometry/LayoutRect.h" #include "platform/geometry/Region.h" #include "platform/graphics/BitmapImage.h" @@ -533,64 +534,6 @@ } } -template <typename T> -static std::unique_ptr<JSONArray> PointAsJSONArray(const T& point) { - std::unique_ptr<JSONArray> array = JSONArray::Create(); - array->PushDouble(point.X()); - array->PushDouble(point.Y()); - return array; -} - -template <typename T> -static std::unique_ptr<JSONArray> SizeAsJSONArray(const T& size) { - std::unique_ptr<JSONArray> array = JSONArray::Create(); - array->PushDouble(size.Width()); - array->PushDouble(size.Height()); - return array; -} - -static double RoundCloseToZero(double number) { - return std::abs(number) < 1e-7 ? 0 : number; -} - -static std::unique_ptr<JSONArray> TransformAsJSONArray( - const TransformationMatrix& t) { - std::unique_ptr<JSONArray> array = JSONArray::Create(); - { - std::unique_ptr<JSONArray> row = JSONArray::Create(); - row->PushDouble(RoundCloseToZero(t.M11())); - row->PushDouble(RoundCloseToZero(t.M12())); - row->PushDouble(RoundCloseToZero(t.M13())); - row->PushDouble(RoundCloseToZero(t.M14())); - array->PushArray(std::move(row)); - } - { - std::unique_ptr<JSONArray> row = JSONArray::Create(); - row->PushDouble(RoundCloseToZero(t.M21())); - row->PushDouble(RoundCloseToZero(t.M22())); - row->PushDouble(RoundCloseToZero(t.M23())); - row->PushDouble(RoundCloseToZero(t.M24())); - array->PushArray(std::move(row)); - } - { - std::unique_ptr<JSONArray> row = JSONArray::Create(); - row->PushDouble(RoundCloseToZero(t.M31())); - row->PushDouble(RoundCloseToZero(t.M32())); - row->PushDouble(RoundCloseToZero(t.M33())); - row->PushDouble(RoundCloseToZero(t.M34())); - array->PushArray(std::move(row)); - } - { - std::unique_ptr<JSONArray> row = JSONArray::Create(); - row->PushDouble(RoundCloseToZero(t.M41())); - row->PushDouble(RoundCloseToZero(t.M42())); - row->PushDouble(RoundCloseToZero(t.M43())); - row->PushDouble(RoundCloseToZero(t.M44())); - array->PushArray(std::move(row)); - } - return array; -} - static String PointerAsString(const void* ptr) { TextStream ts; ts << ptr; @@ -663,6 +606,7 @@ return LayersAsJSONArray(flags)(*this); } +// This is the SPv1 version of ContentLayerClientImpl::LayerAsJSON(). std::unique_ptr<JSONObject> GraphicsLayer::LayerAsJSONInternal( LayerTreeFlags flags, RenderingContextMap& rendering_context_map, @@ -696,21 +640,19 @@ } if (is_root_for_isolated_group_) - json->SetBoolean("isolate", is_root_for_isolated_group_); + json->SetBoolean("isolate", true); if (contents_opaque_) - json->SetBoolean("contentsOpaque", contents_opaque_); + json->SetBoolean("contentsOpaque", true); - if (draws_content_) - json->SetBoolean("drawsContent", draws_content_); + if (!draws_content_) + json->SetBoolean("drawsContent", false); if (!contents_visible_) - json->SetBoolean("contentsVisible", contents_visible_); + json->SetBoolean("contentsVisible", false); - if (!backface_visibility_) { - json->SetString("backfaceVisibility", - backface_visibility_ ? "visible" : "hidden"); - } + if (!backface_visibility_) + json->SetString("backfaceVisibility", "hidden"); if (flags & kLayerTreeIncludesDebugInfo) json->SetString("client", PointerAsString(client_));
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h index c3cb411..3fe1675 100644 --- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h +++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h
@@ -166,6 +166,7 @@ // For special cases, e.g. drawing missing tiles on Android. // The compositor should never paint this color in normal cases because the // Layer will paint the background by itself. + Color BackgroundColor() const { return background_color_; } void SetBackgroundColor(const Color&); // opaque means that we know the layer contents have no alpha
diff --git a/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.cpp index 8e1f8e92..fcb7216 100644 --- a/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.cpp +++ b/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.cpp
@@ -4,6 +4,7 @@ #include "platform/graphics/SurfaceLayerBridge.h" +#include "base/feature_list.h" #include "cc/layers/layer.h" #include "cc/layers/solid_color_layer.h" #include "cc/layers/surface_layer.h" @@ -11,6 +12,7 @@ #include "components/viz/common/surfaces/surface_id.h" #include "components/viz/common/surfaces/surface_info.h" #include "components/viz/common/surfaces/surface_sequence.h" +#include "media/base/media_switches.h" #include "platform/graphics/GraphicsLayer.h" #include "platform/mojo/MojoHelper.h" #include "platform/wtf/Functional.h" @@ -53,8 +55,8 @@ } // namespace -SurfaceLayerBridge::SurfaceLayerBridge(SurfaceLayerBridgeObserver* observer, - WebLayerTreeView* layer_tree_view) +SurfaceLayerBridge::SurfaceLayerBridge(WebLayerTreeView* layer_tree_view, + WebSurfaceLayerBridgeObserver* observer) : weak_factory_(this), observer_(observer), binding_(this), @@ -80,9 +82,6 @@ SurfaceLayerBridge::~SurfaceLayerBridge() { observer_ = nullptr; - if (web_layer_) { - GraphicsLayer::UnregisterContentsLayer(web_layer_.get()); - } } void SurfaceLayerBridge::SatisfyCallback(const viz::SurfaceSequence& sequence) { @@ -100,6 +99,7 @@ web_layer_ = Platform::Current()->CompositorSupport()->CreateLayerFromCCLayer( cc_layer_.get()); + GraphicsLayer::RegisterContentsLayer(web_layer_.get()); } @@ -108,20 +108,22 @@ if (!current_surface_id_.is_valid() && surface_info.is_valid()) { // First time a SurfaceId is received current_surface_id_ = surface_info.id(); - GraphicsLayer::UnregisterContentsLayer(web_layer_.get()); - web_layer_->RemoveFromParent(); + if (web_layer_) { + GraphicsLayer::UnregisterContentsLayer(web_layer_.get()); + web_layer_->RemoveFromParent(); + } scoped_refptr<cc::SurfaceLayer> surface_layer = cc::SurfaceLayer::Create(ref_factory_); surface_layer->SetPrimarySurfaceInfo(surface_info); surface_layer->SetFallbackSurfaceInfo(surface_info); surface_layer->SetStretchContentToFillBounds(true); + surface_layer->SetIsDrawable(true); cc_layer_ = surface_layer; web_layer_ = Platform::Current()->CompositorSupport()->CreateLayerFromCCLayer( cc_layer_.get()); - GraphicsLayer::RegisterContentsLayer(web_layer_.get()); } else if (current_surface_id_ != surface_info.id()) { // A different SurfaceId is received, prompting change to existing // SurfaceLayer
diff --git a/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.h b/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.h index 5de99d1..c6d987f 100644 --- a/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.h +++ b/third_party/WebKit/Source/platform/graphics/SurfaceLayerBridge.h
@@ -28,20 +28,14 @@ class WebLayer; class WebLayerTreeView; -class PLATFORM_EXPORT SurfaceLayerBridgeObserver { - public: - SurfaceLayerBridgeObserver() {} - virtual ~SurfaceLayerBridgeObserver() {} - - virtual void OnWebLayerReplaced() = 0; -}; - +// The SurfaceLayerBridge facilitates communication about changes to a Surface +// between the Render and Browser processes. class PLATFORM_EXPORT SurfaceLayerBridge : public blink::mojom::blink::OffscreenCanvasSurfaceClient, public WebSurfaceLayerBridge { public: - SurfaceLayerBridge(SurfaceLayerBridgeObserver*, WebLayerTreeView*); - ~SurfaceLayerBridge() override; + SurfaceLayerBridge(WebLayerTreeView*, WebSurfaceLayerBridgeObserver*); + virtual ~SurfaceLayerBridge(); void CreateSolidColorLayer(); @@ -53,7 +47,9 @@ // Implementation of WebSurfaceLayerBridge. WebLayer* GetWebLayer() const override { return web_layer_.get(); } - const viz::FrameSinkId& GetFrameSinkId() const { return frame_sink_id_; } + const viz::FrameSinkId& GetFrameSinkId() const override { + return frame_sink_id_; + } private: mojom::blink::OffscreenCanvasSurfacePtr service_; @@ -64,7 +60,7 @@ scoped_refptr<viz::SurfaceReferenceFactory> ref_factory_; base::WeakPtrFactory<SurfaceLayerBridge> weak_factory_; - SurfaceLayerBridgeObserver* observer_; + WebSurfaceLayerBridgeObserver* observer_; mojo::Binding<blink::mojom::blink::OffscreenCanvasSurfaceClient> binding_;
diff --git a/third_party/WebKit/Source/platform/graphics/VideoFrameResourceProvider.cpp b/third_party/WebKit/Source/platform/graphics/VideoFrameResourceProvider.cpp new file mode 100644 index 0000000..e264ecb --- /dev/null +++ b/third_party/WebKit/Source/platform/graphics/VideoFrameResourceProvider.cpp
@@ -0,0 +1,34 @@ +// 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 "platform/graphics/VideoFrameResourceProvider.h" + +#include "cc/quads/render_pass.h" +#include "cc/quads/solid_color_draw_quad.h" + +namespace blink { + +VideoFrameResourceProvider::VideoFrameResourceProvider() = default; + +void VideoFrameResourceProvider::AppendQuads(cc::RenderPass& render_pass) { + gfx::Rect rect(0, 0, 10000, 10000); + gfx::Rect visible_rect(0, 0, 10000, 10000); + viz::SharedQuadState* shared_state = + render_pass.CreateAndAppendSharedQuadState(); + shared_state->SetAll(gfx::Transform(), rect, rect, rect, false, 1, + SkBlendMode::kSrcOver, 0); + cc::SolidColorDrawQuad* solid_color_quad = + render_pass.CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); + // Fluxuate colors for placeholder testing. + static int r = 0; + static int g = 0; + static int b = 0; + r++; + g += 2; + b += 3; + solid_color_quad->SetNew(shared_state, rect, visible_rect, + SkColorSetRGB(r % 255, g % 255, b % 255), false); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/VideoFrameResourceProvider.h b/third_party/WebKit/Source/platform/graphics/VideoFrameResourceProvider.h new file mode 100644 index 0000000..3f8dd96 --- /dev/null +++ b/third_party/WebKit/Source/platform/graphics/VideoFrameResourceProvider.h
@@ -0,0 +1,21 @@ +// 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. + +namespace cc { +class RenderPass; +} + +namespace blink { + +// Placeholder class, to be implemented in full in later CL. +// VideoFrameResourceProvider obtains required GPU resources for the video +// frame. +class VideoFrameResourceProvider { + public: + VideoFrameResourceProvider(); + + void AppendQuads(cc::RenderPass&); +}; + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.cpp b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.cpp new file mode 100644 index 0000000..f379681 --- /dev/null +++ b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.cpp
@@ -0,0 +1,119 @@ +// 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 "platform/graphics/VideoFrameSubmitter.h" + +#include "cc/base/filter_operations.h" +#include "cc/scheduler/video_frame_controller.h" +#include "components/viz/common/surfaces/local_surface_id_allocator.h" +#include "media/base/video_frame.h" +#include "public/platform/InterfaceProvider.h" +#include "public/platform/Platform.h" +#include "public/platform/modules/offscreencanvas/offscreen_canvas_surface.mojom-blink.h" +#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom-blink.h" + +namespace blink { + +VideoFrameSubmitter::VideoFrameSubmitter(cc::VideoFrameProvider* provider) + : provider_(provider), binding_(this), is_rendering_(false) { + current_local_surface_id_ = local_surface_id_allocator_.GenerateId(); +} + +VideoFrameSubmitter::~VideoFrameSubmitter() {} + +void VideoFrameSubmitter::StopUsingProvider() { + if (is_rendering_) + StopRendering(); + provider_ = nullptr; +} + +void VideoFrameSubmitter::StopRendering() { + DCHECK(is_rendering_); + viz::BeginFrameAck current_begin_frame_ack = + viz::BeginFrameAck::CreateManualAckWithDamage(); + SubmitFrame(current_begin_frame_ack); + is_rendering_ = false; + compositor_frame_sink_->SetNeedsBeginFrame(false); +} + +void VideoFrameSubmitter::DidReceiveFrame() { + if (!is_rendering_) { + viz::BeginFrameAck current_begin_frame_ack = + viz::BeginFrameAck::CreateManualAckWithDamage(); + SubmitFrame(current_begin_frame_ack); + } +} + +void VideoFrameSubmitter::StartRendering() { + DCHECK(!is_rendering_); + compositor_frame_sink_->SetNeedsBeginFrame(true); + is_rendering_ = true; +} + +void VideoFrameSubmitter::StartSubmitting(const viz::FrameSinkId& id) { + DCHECK(id.is_valid()); + + // Class to be renamed. + mojom::blink::OffscreenCanvasProviderPtr canvas_provider; + Platform::Current()->GetInterfaceProvider()->GetInterface( + mojo::MakeRequest(&canvas_provider)); + + viz::mojom::blink::CompositorFrameSinkClientPtr client; + binding_.Bind(mojo::MakeRequest(&client)); + canvas_provider->CreateCompositorFrameSink( + id, std::move(client), mojo::MakeRequest(&compositor_frame_sink_)); +} + +void VideoFrameSubmitter::SubmitFrame(viz::BeginFrameAck begin_frame_ack) { + DCHECK(compositor_frame_sink_); + if (!provider_) + return; + + cc::CompositorFrame compositor_frame; + scoped_refptr<media::VideoFrame> video_frame = provider_->GetCurrentFrame(); + + std::unique_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create(); + + // TODO(lethalantidote): Replace with true size. Current is just for test. + gfx::Size viewport_size(10000, 10000); + render_pass->SetNew(50, gfx::Rect(viewport_size), gfx::Rect(viewport_size), + gfx::Transform()); + render_pass->filters = cc::FilterOperations(); + resource_provider_.AppendQuads(*render_pass); + compositor_frame.render_pass_list.push_back(std::move(render_pass)); + compositor_frame.metadata.begin_frame_ack = begin_frame_ack; + compositor_frame.metadata.device_scale_factor = 1; + compositor_frame.metadata.may_contain_video = true; + + // TODO(lethalantidote): Address third/fourth arg in SubmitCompositorFrame. + compositor_frame_sink_->SubmitCompositorFrame( + current_local_surface_id_, std::move(compositor_frame), nullptr, 0); + provider_->PutCurrentFrame(); +} + +void VideoFrameSubmitter::OnBeginFrame(const viz::BeginFrameArgs& args) { + viz::BeginFrameAck current_begin_frame_ack = + viz::BeginFrameAck(args.source_id, args.sequence_number, false); + if (args.type == viz::BeginFrameArgs::MISSED) { + compositor_frame_sink_->DidNotProduceFrame(current_begin_frame_ack); + return; + } + + current_begin_frame_ack.has_damage = true; + + if (!provider_ || + !provider_->UpdateCurrentFrame(args.frame_time + args.interval, + args.frame_time + 2 * args.interval) || + !is_rendering_) { + compositor_frame_sink_->DidNotProduceFrame(current_begin_frame_ack); + return; + } + + SubmitFrame(current_begin_frame_ack); +} + +void VideoFrameSubmitter::DidReceiveCompositorFrameAck( + const WTF::Vector<viz::ReturnedResource>& resources) {} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.h b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.h new file mode 100644 index 0000000..734cb13b1 --- /dev/null +++ b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.h
@@ -0,0 +1,76 @@ +// 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 "base/threading/thread_checker.h" +#include "components/viz/common/surfaces/local_surface_id_allocator.h" +#include "mojo/public/cpp/bindings/binding.h" +#include "platform/PlatformExport.h" +#include "platform/graphics/VideoFrameResourceProvider.h" +#include "platform/wtf/Functional.h" +#include "public/platform/WebVideoFrameSubmitter.h" +#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom-blink.h" + +namespace blink { + +// This class facilitates the communication between the media thread and the +// mojo thread, providing commpositor frames containing video frames to the +// |compositor_frame_sink_|. This class should be created from a +// SequencedTaskRunner, and any methods that call for mojo communication should +// also be ran from a SequencedTaskRunner. +class PLATFORM_EXPORT VideoFrameSubmitter + : public WebVideoFrameSubmitter, + public viz::mojom::blink::CompositorFrameSinkClient { + public: + explicit VideoFrameSubmitter(cc::VideoFrameProvider*); + + ~VideoFrameSubmitter() override; + + static void CreateCompositorFrameSink( + const viz::FrameSinkId, + mojo::Binding<viz::mojom::blink::CompositorFrameSinkClient>*, + viz::mojom::blink::CompositorFrameSinkPtr*); + + void SubmitFrame(viz::BeginFrameAck); + bool Rendering() { return is_rendering_; }; + cc::VideoFrameProvider* Provider() { return provider_; } + mojo::Binding<viz::mojom::blink::CompositorFrameSinkClient>* Binding() { + return &binding_; + } + void SetSink(viz::mojom::blink::CompositorFrameSinkPtr* sink) { + compositor_frame_sink_ = std::move(*sink); + } + + // VideoFrameProvider::Client implementation. + void StopUsingProvider() override; + void StartRendering() override; + void StopRendering() override; + void DidReceiveFrame() override; + + // WebVideoFrameSubmitter implementation. + void StartSubmitting(const viz::FrameSinkId&) override; + + // cc::mojom::CompositorFrameSinkClient implementation. + void DidReceiveCompositorFrameAck( + const WTF::Vector<viz::ReturnedResource>& resources) override; + void OnBeginFrame(const viz::BeginFrameArgs&) override; + void OnBeginFramePausedChanged(bool paused) override {} + void ReclaimResources( + const WTF::Vector<viz::ReturnedResource>& resources) override {} + + private: + cc::VideoFrameProvider* provider_; + viz::mojom::blink::CompositorFrameSinkPtr compositor_frame_sink_; + mojo::Binding<viz::mojom::blink::CompositorFrameSinkClient> binding_; + viz::LocalSurfaceIdAllocator local_surface_id_allocator_; + viz::LocalSurfaceId current_local_surface_id_; + VideoFrameResourceProvider resource_provider_; + + bool is_rendering_; + + THREAD_CHECKER(thread_checker_); + + DISALLOW_COPY_AND_ASSIGN(VideoFrameSubmitter); +}; + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitterTest.cpp b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitterTest.cpp new file mode 100644 index 0000000..4546b367a --- /dev/null +++ b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitterTest.cpp
@@ -0,0 +1,263 @@ +// 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 "platform/graphics/VideoFrameSubmitter.h" + +#include "base/test/simple_test_tick_clock.h" +#include "base/threading/thread.h" +#include "cc/layers/video_frame_provider.h" +#include "cc/test/layer_test_common.h" +#include "cc/trees/task_runner_provider.h" +#include "components/viz/test/fake_external_begin_frame_source.h" +#include "media/base/video_frame.h" +#include "mojo/public/cpp/bindings/interface_request.h" +#include "platform/wtf/Functional.h" +#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom-blink.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using testing::_; +using testing::Return; +using testing::StrictMock; + +namespace blink { + +namespace { + +class MockVideoFrameProvider : public cc::VideoFrameProvider { + public: + MockVideoFrameProvider() {} + ~MockVideoFrameProvider() {} + + MOCK_METHOD1(SetVideoFrameProviderClient, void(Client*)); + MOCK_METHOD2(UpdateCurrentFrame, bool(base::TimeTicks, base::TimeTicks)); + MOCK_METHOD0(HasCurrentFrame, bool()); + MOCK_METHOD0(GetCurrentFrame, scoped_refptr<media::VideoFrame>()); + MOCK_METHOD0(PutCurrentFrame, void()); +}; + +class MockCompositorFrameSink : public viz::mojom::blink::CompositorFrameSink { + public: + MockCompositorFrameSink( + viz::mojom::blink::CompositorFrameSinkRequest* request) + : binding_(this, std::move(*request)) {} + ~MockCompositorFrameSink() {} + + MOCK_METHOD1(SetNeedsBeginFrame, void(bool)); + + void SubmitCompositorFrame( + const viz::LocalSurfaceId& id, + cc::CompositorFrame frame, + ::viz::mojom::blink::HitTestRegionListPtr hit_test_region_list, + uint64_t submit_time) { + DoSubmitCompositorFrame(id, &frame); + } + MOCK_METHOD2(DoSubmitCompositorFrame, + void(const viz::LocalSurfaceId&, cc::CompositorFrame*)); + MOCK_METHOD1(DidNotProduceFrame, void(const viz::BeginFrameAck&)); + + private: + mojo::Binding<viz::mojom::blink::CompositorFrameSink> binding_; +}; + +} // namespace + +class VideoFrameSubmitterTest : public ::testing::Test { + public: + VideoFrameSubmitterTest() + : thread_("ThreadForTest"), + now_src_(new base::SimpleTestTickClock()), + begin_frame_source_(new viz::FakeExternalBeginFrameSource(0.f, false)), + provider_(new StrictMock<MockVideoFrameProvider>()) {} + + void SetUp() override { + thread_.StartAndWaitForTesting(); + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitterTest::MakeSubmitter, + base::Unretained(this))); + thread_.FlushForTesting(); + } + + void TearDown() override { + thread_.task_runner()->DeleteSoon(FROM_HERE, std::move(submitter_)); + thread_.task_runner()->DeleteSoon(FROM_HERE, std::move(sink_)); + } + + void MakeSubmitter() { + submitter_ = base::MakeUnique<VideoFrameSubmitter>(provider_.get()); + viz::mojom::blink::CompositorFrameSinkPtr submitter_sink; + viz::mojom::blink::CompositorFrameSinkRequest request = + mojo::MakeRequest(&submitter_sink); + sink_ = base::MakeUnique<StrictMock<MockCompositorFrameSink>>(&request); + submitter_->SetSink(&submitter_sink); + } + + protected: + base::Thread thread_; + std::unique_ptr<base::SimpleTestTickClock> now_src_; + std::unique_ptr<viz::FakeExternalBeginFrameSource> begin_frame_source_; + std::unique_ptr<StrictMock<MockCompositorFrameSink>> sink_; + std::unique_ptr<StrictMock<MockVideoFrameProvider>> provider_; + std::unique_ptr<VideoFrameSubmitter> submitter_; +}; + +TEST_F(VideoFrameSubmitterTest, StatRenderingFlipsBits) { + EXPECT_FALSE(submitter_->Rendering()); + EXPECT_CALL(*sink_, SetNeedsBeginFrame(true)); + + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::StartRendering, + base::Unretained(submitter_.get()))); + thread_.FlushForTesting(); + + EXPECT_TRUE(submitter_->Rendering()); +} + +TEST_F(VideoFrameSubmitterTest, StopUsingProviderNullsProvider) { + EXPECT_FALSE(submitter_->Rendering()); + EXPECT_EQ(provider_.get(), submitter_->Provider()); + + submitter_->StopUsingProvider(); + + EXPECT_EQ(nullptr, submitter_->Provider()); +} + +TEST_F(VideoFrameSubmitterTest, + StopUsingProviderSubmitsFrameAndStopsRendering) { + EXPECT_CALL(*sink_, SetNeedsBeginFrame(true)); + + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::StartRendering, + base::Unretained(submitter_.get()))); + thread_.FlushForTesting(); + + EXPECT_TRUE(submitter_->Rendering()); + + EXPECT_CALL(*provider_, GetCurrentFrame()); + EXPECT_CALL(*sink_, DoSubmitCompositorFrame(_, _)); + EXPECT_CALL(*provider_, PutCurrentFrame()); + EXPECT_CALL(*sink_, SetNeedsBeginFrame(false)); + + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::StopUsingProvider, + base::Unretained(submitter_.get()))); + thread_.FlushForTesting(); + + EXPECT_FALSE(submitter_->Rendering()); +} + +TEST_F(VideoFrameSubmitterTest, DidReceiveFrameDoesNothingIfRendering) { + EXPECT_CALL(*sink_, SetNeedsBeginFrame(true)); + + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::StartRendering, + base::Unretained(submitter_.get()))); + thread_.FlushForTesting(); + + EXPECT_TRUE(submitter_->Rendering()); + + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::DidReceiveFrame, + base::Unretained(submitter_.get()))); + thread_.FlushForTesting(); +} + +TEST_F(VideoFrameSubmitterTest, DidReceiveFrameSubmitsFrame) { + EXPECT_FALSE(submitter_->Rendering()); + + EXPECT_CALL(*provider_, GetCurrentFrame()); + EXPECT_CALL(*sink_, DoSubmitCompositorFrame(_, _)); + EXPECT_CALL(*provider_, PutCurrentFrame()); + + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::DidReceiveFrame, + base::Unretained(submitter_.get()))); + + thread_.FlushForTesting(); +} + +TEST_F(VideoFrameSubmitterTest, SubmitFrameWithoutProviderReturns) { + submitter_->StopUsingProvider(); + + viz::BeginFrameAck begin_frame_ack = + viz::BeginFrameAck::CreateManualAckWithDamage(); + thread_.task_runner()->PostTask( + FROM_HERE, + base::Bind(&VideoFrameSubmitter::SubmitFrame, + base::Unretained(submitter_.get()), begin_frame_ack)); + + thread_.FlushForTesting(); +} + +TEST_F(VideoFrameSubmitterTest, OnBeginFrameSubmitsFrame) { + EXPECT_CALL(*sink_, SetNeedsBeginFrame(true)); + + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::StartRendering, + base::Unretained(submitter_.get()))); + thread_.FlushForTesting(); + + EXPECT_CALL(*provider_, UpdateCurrentFrame(_, _)).WillOnce(Return(true)); + EXPECT_CALL(*provider_, GetCurrentFrame()); + EXPECT_CALL(*sink_, DoSubmitCompositorFrame(_, _)); + EXPECT_CALL(*provider_, PutCurrentFrame()); + + viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs( + BEGINFRAME_FROM_HERE, now_src_.get()); + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::OnBeginFrame, + base::Unretained(submitter_.get()), args)); + thread_.FlushForTesting(); +} + +TEST_F(VideoFrameSubmitterTest, MissedFrameArgDoesNotProduceFrame) { + EXPECT_CALL(*sink_, DidNotProduceFrame(_)); + + viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs( + BEGINFRAME_FROM_HERE, now_src_.get()); + args.type = viz::BeginFrameArgs::MISSED; + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::OnBeginFrame, + base::Unretained(submitter_.get()), args)); + thread_.FlushForTesting(); +} + +TEST_F(VideoFrameSubmitterTest, MissingProviderDoesNotProduceFrame) { + submitter_->StopUsingProvider(); + + EXPECT_CALL(*sink_, DidNotProduceFrame(_)); + + viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs( + BEGINFRAME_FROM_HERE, now_src_.get()); + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::OnBeginFrame, + base::Unretained(submitter_.get()), args)); + thread_.FlushForTesting(); +} + +TEST_F(VideoFrameSubmitterTest, NoUpdateOnFrameDoesNotProduceFrame) { + EXPECT_CALL(*provider_, UpdateCurrentFrame(_, _)).WillOnce(Return(false)); + EXPECT_CALL(*sink_, DidNotProduceFrame(_)); + + viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs( + BEGINFRAME_FROM_HERE, now_src_.get()); + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::OnBeginFrame, + base::Unretained(submitter_.get()), args)); + thread_.FlushForTesting(); +} + +TEST_F(VideoFrameSubmitterTest, NotRenderingDoesNotProduceFrame) { + EXPECT_CALL(*provider_, UpdateCurrentFrame(_, _)).WillOnce(Return(true)); + EXPECT_CALL(*sink_, DidNotProduceFrame(_)); + + viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs( + BEGINFRAME_FROM_HERE, now_src_.get()); + thread_.task_runner()->PostTask( + FROM_HERE, base::Bind(&VideoFrameSubmitter::OnBeginFrame, + base::Unretained(submitter_.get()), args)); + thread_.FlushForTesting(); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.cpp b/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.cpp index a61ddf0..d1eadac3 100644 --- a/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.cpp +++ b/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.cpp
@@ -4,7 +4,10 @@ #include "platform/graphics/compositing/ContentLayerClientImpl.h" +#include "cc/paint/paint_op_buffer.h" +#include "platform/geometry/GeometryAsJSON.h" #include "platform/graphics/compositing/PaintChunksToCcLayer.h" +#include "platform/graphics/paint/DrawingDisplayItem.h" #include "platform/graphics/paint/GeometryMapper.h" #include "platform/graphics/paint/PaintArtifact.h" #include "platform/graphics/paint/PaintChunk.h" @@ -14,22 +17,6 @@ namespace blink { -template <typename T> -static std::unique_ptr<JSONArray> PointAsJSONArray(const T& point) { - std::unique_ptr<JSONArray> array = JSONArray::Create(); - array->PushDouble(point.X()); - array->PushDouble(point.Y()); - return array; -} - -template <typename T> -static std::unique_ptr<JSONArray> SizeAsJSONArray(const T& size) { - std::unique_ptr<JSONArray> array = JSONArray::Create(); - array->PushDouble(size.Width()); - array->PushDouble(size.Height()); - return array; -} - void ContentLayerClientImpl::SetTracksRasterInvalidations(bool should_track) { if (should_track) { raster_invalidation_tracking_info_ = @@ -51,8 +38,59 @@ return raster_invalidation_tracking_info_->tracking.invalidations; } +static int GetTransformId(const TransformPaintPropertyNode* transform, + ContentLayerClientImpl::LayerAsJSONContext& context) { + if (!transform) + return 0; + + auto it = context.transform_id_map.find(transform); + if (it != context.transform_id_map.end()) + return it->value; + + if ((transform->Matrix().IsIdentity() && !transform->RenderingContextId()) || + // Don't output scroll translations in transform tree. + transform->ScrollNode()) { + context.transform_id_map.Set(transform, 0); + return 0; + } + + int parent_id = GetTransformId(transform->Parent(), context); + auto json = JSONObject::Create(); + int transform_id = context.next_transform_id++; + json->SetInteger("id", transform_id); + if (parent_id) + json->SetInteger("parent", parent_id); + + if (!transform->Matrix().IsIdentity()) + json->SetArray("transform", TransformAsJSONArray(transform->Matrix())); + + if (!transform->Matrix().IsIdentityOrTranslation()) + json->SetArray("origin", PointAsJSONArray(transform->Origin())); + + if (!transform->FlattensInheritedTransform()) + json->SetBoolean("flattenInheritedTransform", false); + + if (auto rendering_context = transform->RenderingContextId()) { + auto it = context.rendering_context_map.find(rendering_context); + int rendering_id = context.rendering_context_map.size() + 1; + if (it == context.rendering_context_map.end()) + context.rendering_context_map.Set(rendering_context, rendering_id); + else + rendering_id = it->value; + + json->SetInteger("renderingContext", rendering_id); + } + + if (!context.transforms_json) + context.transforms_json = JSONArray::Create(); + context.transforms_json->PushObject(std::move(json)); + + return transform_id; +} + +// This is the SPv2 version of GraphicsLayer::LayerAsJSONInternal(). std::unique_ptr<JSONObject> ContentLayerClientImpl::LayerAsJSON( - LayerTreeFlags flags) { + LayerAsJSONContext& context) const { std::unique_ptr<JSONObject> json = JSONObject::Create(); json->SetString("name", debug_name_); @@ -66,20 +104,33 @@ if (!bounds.IsEmpty()) json->SetArray("bounds", SizeAsJSONArray(bounds)); - json->SetBoolean("contentsOpaque", cc_picture_layer_->contents_opaque()); - json->SetBoolean("drawsContent", cc_picture_layer_->DrawsContent()); + if (cc_picture_layer_->contents_opaque()) + json->SetBoolean("contentsOpaque", true); - if (flags & kLayerTreeIncludesDebugInfo) { - std::unique_ptr<JSONArray> paint_chunk_contents_array = JSONArray::Create(); - for (const auto& debug_data : paint_chunk_debug_data_) { - paint_chunk_contents_array->PushValue(debug_data->Clone()); - } - json->SetArray("paintChunkContents", std::move(paint_chunk_contents_array)); + if (!cc_picture_layer_->DrawsContent()) + json->SetBoolean("drawsContent", false); + + if (!cc_picture_layer_->double_sided()) + json->SetString("backfaceVisibility", "hidden"); + + Color background_color(cc_picture_layer_->background_color()); + if (background_color.Alpha()) { + json->SetString("backgroundColor", + background_color.NameForLayoutTreeAsText()); } - if (raster_invalidation_tracking_info_) +#ifndef NDEBUG + if (context.flags & kLayerTreeIncludesDebugInfo) + json->SetValue("paintChunkContents", paint_chunk_debug_data_->Clone()); +#endif + + if ((context.flags & kLayerTreeIncludesPaintInvalidations) && + raster_invalidation_tracking_info_) raster_invalidation_tracking_info_->tracking.AsJSON(json.get()); + if (int transform_id = GetTransformId(layer_state_.Transform(), context)) + json->SetInteger("transform", transform_id); + return json; } @@ -249,25 +300,51 @@ } } +static SkColor DisplayItemBackgroundColor(const DisplayItem& item) { + if (item.GetType() != DisplayItem::kBoxDecorationBackground && + item.GetType() != DisplayItem::kDocumentBackground) + return SK_ColorTRANSPARENT; + + const auto& drawing_item = static_cast<const DrawingDisplayItem&>(item); + const auto record = drawing_item.GetPaintRecord(); + if (!record) + return SK_ColorTRANSPARENT; + + for (cc::PaintOpBuffer::Iterator it(record.get()); it; ++it) { + const auto* op = *it; + if (op->GetType() == cc::PaintOpType::DrawRect || + op->GetType() == cc::PaintOpType::DrawRRect) { + const auto& flags = static_cast<const cc::PaintOpWithFlags*>(op)->flags; + // Skip op with looper which may modify the color. + if (!flags.getLooper() && flags.getStyle() == cc::PaintFlags::kFill_Style) + return flags.getColor(); + } + } + return SK_ColorTRANSPARENT; +} + scoped_refptr<cc::PictureLayer> ContentLayerClientImpl::UpdateCcPictureLayer( const PaintArtifact& paint_artifact, const gfx::Rect& layer_bounds, const Vector<const PaintChunk*>& paint_chunks, - const PropertyTreeState& layer_state, - bool store_debug_info) { + const PropertyTreeState& layer_state) { // TODO(wangxianzhu): Avoid calling DebugName() in official release build. debug_name_ = paint_chunks[0]->id.client.DebugName(); - paint_chunk_debug_data_.clear(); - if (store_debug_info) { - for (const auto* chunk : paint_chunks) { - paint_chunk_debug_data_.push_back( - paint_artifact.GetDisplayItemList().SubsequenceAsJSON( - chunk->begin_index, chunk->end_index, - DisplayItemList::kSkipNonDrawings | - DisplayItemList::kShownOnlyDisplayItemTypes)); - } +#ifndef NDEBUG + paint_chunk_debug_data_ = JSONArray::Create(); + for (const auto* chunk : paint_chunks) { + auto json = JSONObject::Create(); + json->SetArray("displayItems", + paint_artifact.GetDisplayItemList().SubsequenceAsJSON( + chunk->begin_index, chunk->end_index, + DisplayItemList::kSkipNonDrawings | + DisplayItemList::kShownOnlyDisplayItemTypes)); + json->SetString("propertyTreeState", + chunk->properties.property_tree_state.ToTreeString()); + paint_chunk_debug_data_->PushObject(std::move(json)); } +#endif if (RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled() && !raster_invalidation_tracking_info_) { @@ -314,6 +391,11 @@ cc::DisplayItemList::kTopLevelDisplayItemList, params ? &*params : nullptr); + if (paint_chunks[0]->size()) { + cc_picture_layer_->SetBackgroundColor(DisplayItemBackgroundColor( + paint_artifact.GetDisplayItemList()[paint_chunks[0]->begin_index])); + } + paint_chunks_info_.clear(); std::swap(paint_chunks_info_, new_chunks_info); if (raster_invalidation_tracking_info_) {
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.h b/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.h index 9e53067..fba88f6b 100644 --- a/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.h +++ b/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImpl.h
@@ -10,6 +10,7 @@ #include "platform/PlatformExport.h" #include "platform/graphics/GraphicsLayerClient.h" #include "platform/graphics/paint/PaintChunk.h" +#include "platform/wtf/HashMap.h" #include "platform/wtf/Noncopyable.h" #include "platform/wtf/Vector.h" @@ -46,14 +47,22 @@ void SetTracksRasterInvalidations(bool); - std::unique_ptr<JSONObject> LayerAsJSON(LayerTreeFlags); + struct LayerAsJSONContext { + LayerAsJSONContext(LayerTreeFlags flags) : flags(flags) {} + + const LayerTreeFlags flags; + int next_transform_id = 1; + std::unique_ptr<JSONArray> transforms_json; + HashMap<const TransformPaintPropertyNode*, int> transform_id_map; + HashMap<int, int> rendering_context_map; + }; + std::unique_ptr<JSONObject> LayerAsJSON(LayerAsJSONContext&) const; scoped_refptr<cc::PictureLayer> UpdateCcPictureLayer( const PaintArtifact&, const gfx::Rect& layer_bounds, const Vector<const PaintChunk*>&, - const PropertyTreeState& layer_state, - bool store_debug_info); + const PropertyTreeState& layer_state); bool Matches(const PaintChunk& paint_chunk) { return paint_chunks_info_.size() && paint_chunks_info_[0].is_cacheable && @@ -101,8 +110,10 @@ PropertyTreeState layer_state_; Vector<PaintChunkInfo> paint_chunks_info_; - Vector<std::unique_ptr<JSONArray>> paint_chunk_debug_data_; String debug_name_; +#ifndef NDEBUG + std::unique_ptr<JSONArray> paint_chunk_debug_data_; +#endif struct RasterInvalidationTrackingInfo { using ClientDebugNamesMap = HashMap<const DisplayItemClient*, String>;
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImplTest.cpp b/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImplTest.cpp index 04df6a0..bcc28f1 100644 --- a/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImplTest.cpp +++ b/third_party/WebKit/Source/platform/graphics/compositing/ContentLayerClientImplTest.cpp
@@ -105,9 +105,8 @@ c.SetTracksRasterInvalidations(true); CHUNKS(chunks, Chunk(0)); - auto cc_layer = - c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, chunks, - DefaultPropertyTreeState(), false); + auto cc_layer = c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, + chunks, DefaultPropertyTreeState()); ASSERT_TRUE(cc_layer); EXPECT_EQ(gfx::Rect(kDefaultLayerBounds.Size()), c.PaintableRegion()); EXPECT_EQ(gfx::Size(kDefaultLayerBounds.Size()), cc_layer->bounds()); @@ -117,7 +116,7 @@ auto cc_layer1 = c.UpdateCcPictureLayer( PaintArtifact(), IntRect(kDefaultLayerBounds.Location(), IntSize(1234, 2345)), chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); EXPECT_EQ(cc_layer, cc_layer1); EXPECT_EQ(gfx::Rect(0, 0, 1234, 2345), c.PaintableRegion()); EXPECT_EQ(gfx::Size(1234, 2345), cc_layer->bounds()); @@ -126,7 +125,7 @@ auto cc_layer2 = c.UpdateCcPictureLayer(PaintArtifact(), IntRect(-555, -666, 777, 888), - chunks, DefaultPropertyTreeState(), false); + chunks, DefaultPropertyTreeState()); EXPECT_EQ(cc_layer, cc_layer2); EXPECT_EQ(gfx::Rect(0, 0, 777, 888), c.PaintableRegion()); EXPECT_EQ(gfx::Size(777, 888), cc_layer->bounds()); @@ -142,14 +141,14 @@ CHUNKS(chunks, Chunk(0), Chunk(1), Chunk(2)); c.SetTracksRasterInvalidations(true); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); EXPECT_TRUE(TrackedRasterInvalidations(c).IsEmpty()); // Swap chunk 1 and 2. All chunks have their own local raster invalidations. CHUNKS(new_chunks, Chunk(0, 2), Chunk(2, 4), Chunk(1, 3)); new_chunks_array[1].bounds = FloatRect(11, 22, 33, 44); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, new_chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); const auto& invalidations = TrackedRasterInvalidations(c); ASSERT_EQ(5u, invalidations.size()); // The first chunk should always match because otherwise we won't reuse the @@ -174,14 +173,14 @@ CHUNKS(chunks, Chunk(0), Chunk(1), Chunk(2)); c.SetTracksRasterInvalidations(true); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); EXPECT_TRUE(TrackedRasterInvalidations(c).IsEmpty()); // Chunk 1 and 2 disappeared, 3 and 4 appeared. All chunks have their own // local raster invalidations. CHUNKS(new_chunks, Chunk(0, 2), Chunk(3, 3), Chunk(4, 3)); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, new_chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); const auto& invalidations = TrackedRasterInvalidations(c); ASSERT_EQ(6u, invalidations.size()); ExpectDisplayItemInvalidations(invalidations, 0, *new_chunks[0]); @@ -200,12 +199,12 @@ CHUNKS(chunks, Chunk(0)); c.SetTracksRasterInvalidations(true); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); EXPECT_TRUE(TrackedRasterInvalidations(c).IsEmpty()); CHUNKS(new_chunks, Chunk(0, 2), Chunk(1, 3), Chunk(2, 3)); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, new_chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); const auto& invalidations = TrackedRasterInvalidations(c); ASSERT_EQ(4u, invalidations.size()); ExpectDisplayItemInvalidations(invalidations, 0, *new_chunks[0]); @@ -221,13 +220,13 @@ c.SetTracksRasterInvalidations(true); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); EXPECT_TRUE(TrackedRasterInvalidations(c).IsEmpty()); CHUNKS(new_chunks, Chunk(0, 2), Chunk(2, 3), Chunk(1, 3, PaintChunk::kUncacheable)); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, new_chunks, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); const auto& invalidations = TrackedRasterInvalidations(c); ASSERT_EQ(5u, invalidations.size()); ExpectDisplayItemInvalidations(invalidations, 0, *new_chunks[0]); @@ -259,7 +258,7 @@ c.SetTracksRasterInvalidations(true); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, chunks, - layer_state, false); + layer_state); EXPECT_TRUE(TrackedRasterInvalidations(c).IsEmpty()); // Change both clip0 and clip2. @@ -272,7 +271,7 @@ new_chunks_array[2].properties = chunks[2]->properties; c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, new_chunks, - layer_state, false); + layer_state); const auto& invalidations = TrackedRasterInvalidations(c); ASSERT_EQ(1u, invalidations.size()); // Property change in the layer state should not trigger raster invalidation. @@ -290,7 +289,7 @@ c.SetTracksRasterInvalidations(true); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, new_chunks1, - layer_state, false); + layer_state); const auto& invalidations1 = TrackedRasterInvalidations(c); ASSERT_EQ(1u, invalidations1.size()); ExpectChunkInvalidation(invalidations1, 0, *new_chunks1[1], @@ -300,7 +299,7 @@ // Change of layer state invalidates the whole layer. c.SetTracksRasterInvalidations(true); c.UpdateCcPictureLayer(PaintArtifact(), kDefaultLayerBounds, new_chunks1, - DefaultPropertyTreeState(), false); + DefaultPropertyTreeState()); const auto& invalidations2 = TrackedRasterInvalidations(c); ASSERT_EQ(1u, invalidations2.size()); EXPECT_EQ(PaintInvalidationReason::kFullLayer, invalidations2[0].reason);
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp index eafaa72..00dd30d 100644 --- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp +++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
@@ -86,12 +86,15 @@ std::unique_ptr<JSONObject> PaintArtifactCompositor::LayersAsJSON( LayerTreeFlags flags) const { + ContentLayerClientImpl::LayerAsJSONContext context(flags); std::unique_ptr<JSONArray> layers_json = JSONArray::Create(); for (const auto& client : content_layer_clients_) { - layers_json->PushObject(client->LayerAsJSON(flags)); + layers_json->PushObject(client->LayerAsJSON(context)); } std::unique_ptr<JSONObject> json = JSONObject::Create(); json->SetArray("layers", std::move(layers_json)); + if (context.transforms_json) + json->SetArray("transforms", std::move(context.transforms_json)); return json; } @@ -215,8 +218,7 @@ const PendingLayer& pending_layer, gfx::Vector2dF& layer_offset, Vector<std::unique_ptr<ContentLayerClientImpl>>& new_content_layer_clients, - Vector<scoped_refptr<cc::Layer>>& new_scroll_hit_test_layers, - bool store_debug_info) { + Vector<scoped_refptr<cc::Layer>>& new_scroll_hit_test_layers) { DCHECK(pending_layer.paint_chunks.size()); const PaintChunk& first_paint_chunk = *pending_layer.paint_chunks[0]; DCHECK(first_paint_chunk.size()); @@ -248,7 +250,7 @@ auto cc_layer = content_layer_client->UpdateCcPictureLayer( paint_artifact, cc_combined_bounds, pending_layer.paint_chunks, - pending_layer.property_tree_state, store_debug_info); + pending_layer.property_tree_state); new_content_layer_clients.push_back(std::move(content_layer_client)); if (extra_data_for_testing_enabled_) extra_data_for_testing_->content_layers.push_back(cc_layer); @@ -658,16 +660,11 @@ for (auto& entry : synthesized_clip_cache_) entry.in_use = false; - bool store_debug_info = false; -#ifndef NDEBUG - store_debug_info = true; -#endif - for (const PendingLayer& pending_layer : pending_layers) { gfx::Vector2dF layer_offset; scoped_refptr<cc::Layer> layer = CompositedLayerForPendingLayer( paint_artifact, pending_layer, layer_offset, new_content_layer_clients, - new_scroll_hit_test_layers, store_debug_info); + new_scroll_hit_test_layers); auto property_state = pending_layer.property_tree_state; const auto* transform = property_state.Transform(); @@ -719,6 +716,7 @@ layer->SetEffectTreeIndex(effect_id); layer->SetContentsOpaque(pending_layer.known_to_be_opaque); + layer->SetDoubleSided(!pending_layer.backface_hidden); layer->SetShouldCheckBackfaceVisibility(pending_layer.backface_hidden); } property_tree_manager.Finalize();
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h index e2361d0..96793eb 100644 --- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h +++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h
@@ -172,8 +172,7 @@ gfx::Vector2dF& layer_offset, Vector<std::unique_ptr<ContentLayerClientImpl>>& new_content_layer_clients, - Vector<scoped_refptr<cc::Layer>>& new_scroll_hit_test_layers, - bool store_debug_info); + Vector<scoped_refptr<cc::Layer>>& new_scroll_hit_test_layers); const TransformPaintPropertyNode& ScrollTranslationForPendingLayer( const PaintArtifact&,
diff --git a/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.cpp b/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.cpp index 81ab46a..4bb5eaa 100644 --- a/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.cpp +++ b/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.cpp
@@ -40,8 +40,9 @@ DisplayItem::DumpPropertiesAsDebugString(string_builder); if (record_) { string_builder.Append(String::Format( - ", rect: [%f,%f %fx%f]", record_bounds_.X(), record_bounds_.Y(), - record_bounds_.Width(), record_bounds_.Height())); + ", rect: [%f,%f %fx%f], opaque: %s", record_bounds_.X(), + record_bounds_.Y(), record_bounds_.Width(), record_bounds_.Height(), + known_to_be_opaque_ ? "true" : "false")); } } #endif
diff --git a/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp b/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp index f165c98..3a24763 100644 --- a/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp +++ b/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp
@@ -970,7 +970,10 @@ #else LOG(ERROR) << "Run debug build to get more details."; #endif - LOG(ERROR) << "See http://crbug.com/619103."; + LOG(ERROR) << "See http://crbug.com/619103. For media layout tests, this " + "could fail due to change in buffered range. In that case, set " + "internals.runtimeFlags.paintUnderInvalidationCheckingEnabled " + "to false in layout test."; #ifndef NDEBUG const PaintRecord* new_record = nullptr;
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp index 16b8ec0..7eaeb44 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
@@ -297,7 +297,7 @@ Resource* ResourceFetcher::CachedResource(const KURL& resource_url) const { KURL url = MemoryCache::RemoveFragmentIdentifierIfNeeded(resource_url); - const WeakMember<Resource>& resource = document_resources_.at(url); + const WeakMember<Resource>& resource = cached_resources_map_.at(url); return resource.Get(); } @@ -323,17 +323,14 @@ return policy != kUse || resource->StillNeedsLoad(); } -// Limit the number of URLs in m_validatedURLs to avoid memory bloat. -// http://crbug.com/52411 -static const int kMaxValidatedURLsSize = 10000; - void ResourceFetcher::RequestLoadStarted(unsigned long identifier, Resource* resource, const FetchParameters& params, RevalidationPolicy policy, bool is_static_data) { + KURL url = MemoryCache::RemoveFragmentIdentifierIfNeeded(params.Url()); if (policy == kUse && resource->GetStatus() == ResourceStatus::kCached && - !validated_urls_.Contains(resource->Url())) { + !cached_resources_map_.Contains(url)) { // Loaded from MemoryCache. DidLoadResourceFromMemoryCache(identifier, resource, params.GetResourceRequest()); @@ -343,7 +340,7 @@ return; if (policy == kUse && !resource->StillNeedsLoad() && - !validated_urls_.Contains(params.GetResourceRequest().Url())) { + !cached_resources_map_.Contains(url)) { // Resources loaded from memory cache should be reported the first time // they're used. RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::Create( @@ -356,11 +353,6 @@ if (!resource_timing_report_timer_.IsActive()) resource_timing_report_timer_.StartOneShot(0, BLINK_FROM_HERE); } - - if (validated_urls_.size() >= kMaxValidatedURLsSize) { - validated_urls_.clear(); - } - validated_urls_.insert(params.GetResourceRequest().Url()); } void ResourceFetcher::DidLoadResourceFromMemoryCache( @@ -756,8 +748,9 @@ // If only the fragment identifiers differ, it is the same resource. DCHECK(EqualIgnoringFragmentIdentifier(resource->Url(), params.Url())); RequestLoadStarted(identifier, resource, params, policy, is_static_data); - document_resources_.Set( + cached_resources_map_.Set( MemoryCache::RemoveFragmentIdentifierIfNeeded(params.Url()), resource); + document_resources_.insert(resource); // Returns with an existing resource if the resource does not need to start // loading immediately. If revalidation policy was determined as |Revalidate|, @@ -1088,7 +1081,9 @@ // or other factors that require separate requests. if (type != Resource::kRaw) { if (!Context().IsLoadComplete() && - validated_urls_.Contains(existing_resource.Url())) + cached_resources_map_.Contains( + MemoryCache::RemoveFragmentIdentifierIfNeeded( + existing_resource.Url()))) return kUse; if (existing_resource.IsLoading()) return kUse; @@ -1192,7 +1187,7 @@ } void ResourceFetcher::ReloadImagesIfNotDeferred() { - for (Resource* resource : document_resources_.Values()) { + for (Resource* resource : document_resources_) { if (resource->GetType() == Resource::kImage && resource->StillNeedsLoad() && !ShouldDeferImageLoad(resource->Url())) StartLoad(resource); @@ -1485,8 +1480,7 @@ TRACE_EVENT0( "blink", "ResourceLoadPriorityOptimizer::updateAllImageResourcePriorities"); - for (const auto& document_resource : document_resources_) { - Resource* resource = document_resource.value.Get(); + for (Resource* resource : document_resources_) { if (!resource || resource->GetType() != Resource::kImage || !resource->IsLoading()) continue; @@ -1509,8 +1503,7 @@ } void ResourceFetcher::ReloadLoFiImages() { - for (const auto& document_resource : document_resources_) { - Resource* resource = document_resource.value.Get(); + for (Resource* resource : document_resources_) { if (resource) resource->ReloadIfLoFiOrPlaceholderImage(this, Resource::kReloadAlways); } @@ -1710,6 +1703,7 @@ visitor->Trace(archive_); visitor->Trace(loaders_); visitor->Trace(non_blocking_loaders_); + visitor->Trace(cached_resources_map_); visitor->Trace(document_resources_); visitor->Trace(preloads_); visitor->Trace(matched_preloads_);
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h index d440641..8fbeefb6 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.h
@@ -85,7 +85,7 @@ using DocumentResourceMap = HeapHashMap<String, WeakMember<Resource>>; const DocumentResourceMap& AllResources() const { - return document_resources_; + return cached_resources_map_; } // Binds the given Resource instance to this ResourceFetcher instance to @@ -259,8 +259,8 @@ Member<FetchContext> context_; Member<ResourceLoadScheduler> scheduler_; - HashSet<String> validated_urls_; - mutable DocumentResourceMap document_resources_; + DocumentResourceMap cached_resources_map_; + HeapHashSet<WeakMember<Resource>> document_resources_; HeapHashMap<PreloadKey, Member<Resource>> preloads_; HeapVector<Member<Resource>> matched_preloads_;
diff --git a/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h b/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h index d30afd3..e5c9802 100644 --- a/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h +++ b/third_party/WebKit/Source/platform/loader/testing/MockFetchContext.h
@@ -96,16 +96,14 @@ : runner_(std::move(runner)) {} void AddThrottlingObserver(ObserverType, Observer*) override {} void RemoveThrottlingObserver(ObserverType, Observer*) override {} - RefPtr<WebTaskRunner> TimerTaskRunner() override { return runner_; } RefPtr<WebTaskRunner> LoadingTaskRunner() override { return runner_; } RefPtr<WebTaskRunner> LoadingControlTaskRunner() override { return runner_; } - RefPtr<WebTaskRunner> SuspendableTaskRunner() override { return runner_; } - RefPtr<WebTaskRunner> UnthrottledTaskRunner() override { return runner_; } - RefPtr<WebTaskRunner> UnthrottledButBlockableTaskRunner() override { - return runner_; - } + RefPtr<WebTaskRunner> ThrottleableTaskRunner() override { return runner_; } + RefPtr<WebTaskRunner> DeferrableTaskRunner() override { return runner_; } + RefPtr<WebTaskRunner> PausableTaskRunner() override { return runner_; } + RefPtr<WebTaskRunner> UnpausableTaskRunner() override { return runner_; } private: RefPtr<WebTaskRunner> runner_;
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.cpp b/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.cpp index bdf0d16..2dd7869 100644 --- a/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.cpp +++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.cpp
@@ -40,6 +40,17 @@ namespace blink { +namespace { + +static int g_unique_id = 0; + +} // namespace + +// static +int MediaStreamComponent::GenerateUniqueId() { + return ++g_unique_id; +} + MediaStreamComponent* MediaStreamComponent::Create(MediaStreamSource* source) { return new MediaStreamComponent(CreateCanonicalUUIDString(), source); } @@ -65,6 +76,7 @@ WebMediaStreamTrack::ContentHintType content_hint) : source_(source), id_(id), + unique_id_(GenerateUniqueId()), enabled_(enabled), muted_(muted), content_hint_(content_hint) {
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h index a94156f8..6dd5cd8 100644 --- a/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h +++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h
@@ -52,6 +52,9 @@ : public GarbageCollectedFinalized<MediaStreamComponent> { USING_PRE_FINALIZER(MediaStreamComponent, Dispose); + private: + static int GenerateUniqueId(); + public: // This class represents whatever data the Web layer uses to represent // a track. It needs to be able to answer the getSettings question. @@ -75,7 +78,13 @@ MediaStreamSource* Source() const { return source_.Get(); } + // This is the same as the id of the |MediaStreamTrack|. It is unique in most + // contexts but collisions can occur e.g. if tracks are created by different + // |RTCPeerConnection|s or a remote track ID is signaled to be added, removed + // and then re-added resulting in a new track object the second time around. String Id() const { return id_; } + // Uniquely identifies this component. + int UniqueId() const { return unique_id_; } bool Enabled() const { return enabled_; } void SetEnabled(bool enabled) { enabled_ = enabled; } bool Muted() const { return muted_; } @@ -128,6 +137,7 @@ AudioSourceProviderImpl source_provider_; Member<MediaStreamSource> source_; String id_; + int unique_id_; bool enabled_; bool muted_; WebMediaStreamTrack::ContentHintType content_hint_;
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.cpp b/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.cpp index afd84e8..7c832a5b 100644 --- a/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.cpp +++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.cpp
@@ -36,6 +36,17 @@ namespace blink { +namespace { + +static int g_unique_id = 0; + +} // namespace + +// static +int MediaStreamDescriptor::GenerateUniqueId() { + return ++g_unique_id; +} + MediaStreamDescriptor* MediaStreamDescriptor::Create( const MediaStreamSourceVector& audio_sources, const MediaStreamSourceVector& video_sources) { @@ -123,7 +134,7 @@ const String& id, const MediaStreamSourceVector& audio_sources, const MediaStreamSourceVector& video_sources) - : client_(nullptr), id_(id), active_(true) { + : client_(nullptr), id_(id), unique_id_(GenerateUniqueId()), active_(true) { DCHECK(id_.length()); for (size_t i = 0; i < audio_sources.size(); i++) audio_components_.push_back(MediaStreamComponent::Create(audio_sources[i])); @@ -136,7 +147,7 @@ const String& id, const MediaStreamComponentVector& audio_components, const MediaStreamComponentVector& video_components) - : client_(nullptr), id_(id), active_(true) { + : client_(nullptr), id_(id), unique_id_(GenerateUniqueId()), active_(true) { DCHECK(id_.length()); for (MediaStreamComponentVector::const_iterator iter = audio_components.begin();
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h index 90e51989..313ba98 100644 --- a/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h +++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h
@@ -56,6 +56,9 @@ class PLATFORM_EXPORT MediaStreamDescriptor final : public GarbageCollectedFinalized<MediaStreamDescriptor> { + private: + static int GenerateUniqueId(); + public: // Only used for AudioDestinationNode. static MediaStreamDescriptor* Create( @@ -74,7 +77,13 @@ MediaStreamDescriptorClient* Client() const { return client_; } void SetClient(MediaStreamDescriptorClient* client) { client_ = client; } + // This is the same as the id of the |MediaStream|. It is unique in most + // contexts but collisions can occur e.g. if streams are created by different + // |RTCPeerConnection|s or a remote stream ID is signaled to be added, removed + // and then re-added resulting in a new stream object the second time around. String Id() const { return id_; } + // Uniquely identifies this descriptor. + int UniqueId() const { return unique_id_; } unsigned NumberOfAudioComponents() const { return audio_components_.size(); } MediaStreamComponent* AudioComponent(unsigned index) const { @@ -114,6 +123,7 @@ Member<MediaStreamDescriptorClient> client_; String id_; + int unique_id_; HeapVector<Member<MediaStreamComponent>> audio_components_; HeapVector<Member<MediaStreamComponent>> video_components_; Vector<WebMediaStreamObserver*> observers_;
diff --git a/third_party/WebKit/Source/platform/scheduler/DEPS b/third_party/WebKit/Source/platform/scheduler/DEPS index e4af261..6017b541 100644 --- a/third_party/WebKit/Source/platform/scheduler/DEPS +++ b/third_party/WebKit/Source/platform/scheduler/DEPS
@@ -16,6 +16,7 @@ "+base/metrics/field_trial.h", "+base/metrics/field_trial_params.h", "+base/metrics/histogram_macros.h", + "+base/observer_list.h", "+base/optional.h", "+base/pending_task.h", "+base/run_loop.h",
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc index e2fd7ddc..ade141c 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc
@@ -134,7 +134,7 @@ task_queue_throttler_->CreateWakeUpBudgetPool("test"); scoped_refptr<TaskQueue> queue = scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE); pool->SetWakeUpRate(0.1); pool->SetWakeUpDuration(base::TimeDelta::FromMilliseconds(10));
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.cc b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.cc index 3aba6d6ec..25737a4 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.cc
@@ -46,6 +46,18 @@ return control_task_queue_; } +scoped_refptr<MainThreadTaskQueue> +MainThreadSchedulerHelper::BestEffortMainThreadTaskQueue() { + if (!best_effort_task_queue_) { + best_effort_task_queue_ = + NewTaskQueue(MainThreadTaskQueue::QueueCreationParams( + MainThreadTaskQueue::QueueType::BEST_EFFORT) + .SetShouldMonitorQuiescence(true)); + best_effort_task_queue_->SetQueuePriority(TaskQueue::BEST_EFFORT_PRIORITY); + } + return best_effort_task_queue_; +} + scoped_refptr<MainThreadTaskQueue> MainThreadSchedulerHelper::NewTaskQueue( const MainThreadTaskQueue::QueueCreationParams& params) { return task_queue_manager_->CreateTaskQueue<MainThreadTaskQueue>(
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.h b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.h index 6df96e72..ab64d68d 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.h +++ b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_scheduler_helper.h
@@ -26,6 +26,7 @@ scoped_refptr<MainThreadTaskQueue> DefaultMainThreadTaskQueue(); scoped_refptr<MainThreadTaskQueue> ControlMainThreadTaskQueue(); + scoped_refptr<MainThreadTaskQueue> BestEffortMainThreadTaskQueue(); protected: scoped_refptr<TaskQueue> DefaultTaskQueue() override; @@ -36,6 +37,7 @@ const scoped_refptr<MainThreadTaskQueue> default_task_queue_; const scoped_refptr<MainThreadTaskQueue> control_task_queue_; + scoped_refptr<MainThreadTaskQueue> best_effort_task_queue_; DISALLOW_COPY_AND_ASSIGN(MainThreadSchedulerHelper); };
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.cc b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.cc index ac3c659a..37d2833 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.cc
@@ -26,10 +26,14 @@ return "unthrottled_tq"; case MainThreadTaskQueue::QueueType::FRAME_LOADING: return "frame_loading_tq"; - case MainThreadTaskQueue::QueueType::FRAME_TIMER: - return "frame_timer_tq"; - case MainThreadTaskQueue::QueueType::FRAME_UNTHROTTLED: - return "frame_unthrottled_tq"; + case MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE: + return "frame_throttleable_tq"; + case MainThreadTaskQueue::QueueType::FRAME_DEFERRABLE: + return "frame_deferrable_tq"; + case MainThreadTaskQueue::QueueType::FRAME_PAUSABLE: + return "frame_pausable_tq"; + case MainThreadTaskQueue::QueueType::FRAME_UNPAUSABLE: + return "frame_unpausable_tq"; case MainThreadTaskQueue::QueueType::COMPOSITOR: return "compositor_tq"; case MainThreadTaskQueue::QueueType::IDLE: @@ -38,6 +42,8 @@ return "test_tq"; case MainThreadTaskQueue::QueueType::FRAME_LOADING_CONTROL: return "frame_loading_control_tq"; + case MainThreadTaskQueue::QueueType::BEST_EFFORT: + return "best_effort"; case MainThreadTaskQueue::QueueType::COUNT: NOTREACHED(); return nullptr; @@ -53,17 +59,18 @@ case QueueType::DEFAULT: case QueueType::IDLE: case QueueType::TEST: + case QueueType::BEST_EFFORT: return QueueClass::NONE; case QueueType::DEFAULT_LOADING: case QueueType::FRAME_LOADING: case QueueType::FRAME_LOADING_CONTROL: return QueueClass::LOADING; case QueueType::DEFAULT_TIMER: - case QueueType::FRAME_TIMER: - // Unthrottled tasks are considered timers which can't be throttled and - // fall into TIMER class. - case QueueType::FRAME_UNTHROTTLED: case QueueType::UNTHROTTLED: + case QueueType::FRAME_THROTTLEABLE: + case QueueType::FRAME_DEFERRABLE: + case QueueType::FRAME_PAUSABLE: + case QueueType::FRAME_UNPAUSABLE: return QueueClass::TIMER; case QueueType::COMPOSITOR: return QueueClass::COMPOSITOR;
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.h b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.h index b014ee9e..0c8b547 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.h +++ b/third_party/WebKit/Source/platform/scheduler/renderer/main_thread_task_queue.h
@@ -20,20 +20,29 @@ enum class QueueType { // Keep MainThreadTaskQueue::NameForQueueType in sync. // This enum is used for a histogram and it should not be re-numbered. + // TODO(altimin): Clean up obsolete names and use a new histogram when + // the situation settles. CONTROL = 0, DEFAULT = 1, DEFAULT_LOADING = 2, + // DEFAULT_TIMER is deprecated and should be replaced with appropriate + // per-frame task queues. DEFAULT_TIMER = 3, UNTHROTTLED = 4, FRAME_LOADING = 5, - FRAME_TIMER = 6, - FRAME_UNTHROTTLED = 7, + // 6 : FRAME_THROTTLEABLE, replaced with FRAME_THROTTLEABLE. + // 7 : FRAME_PAUSABLE, replaced with FRAME_PAUSABLE COMPOSITOR = 8, IDLE = 9, TEST = 10, FRAME_LOADING_CONTROL = 11, + FRAME_THROTTLEABLE = 12, + FRAME_DEFERRABLE = 13, + FRAME_PAUSABLE = 14, + FRAME_UNPAUSABLE = 15, + BEST_EFFORT = 16, - COUNT = 12 + COUNT = 17 }; // Returns name of the given queue type. Returned string has application @@ -62,7 +71,7 @@ can_be_stopped(false), used_for_control_tasks(false) {} - QueueCreationParams SetCanBeBlocked(bool value) { + QueueCreationParams SetCanBeDeferred(bool value) { can_be_blocked = value; return *this; } @@ -126,7 +135,7 @@ QueueClass queue_class() const { return queue_class_; } - bool CanBeBlocked() const { return can_be_blocked_; } + bool CanBeDeferred() const { return can_be_blocked_; } bool CanBeThrottled() const { return can_be_throttled_; }
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc index 18e7557..bfeb1562 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_metrics_helper_unittest.cc
@@ -20,6 +20,7 @@ using QueueType = MainThreadTaskQueue::QueueType; using testing::ElementsAre; +using testing::UnorderedElementsAre; using base::Bucket; class RendererMetricsHelperTest : public ::testing::Test { @@ -88,7 +89,7 @@ base::TimeDelta::FromMilliseconds(5)); RunTask(QueueType::FRAME_LOADING, Milliseconds(800), base::TimeDelta::FromMilliseconds(70)); - RunTask(QueueType::FRAME_UNTHROTTLED, Milliseconds(1000), + RunTask(QueueType::FRAME_PAUSABLE, Milliseconds(1000), base::TimeDelta::FromMilliseconds(20)); RunTask(QueueType::COMPOSITOR, Milliseconds(1200), base::TimeDelta::FromMilliseconds(25)); @@ -99,13 +100,13 @@ RunTask(QueueType::CONTROL, Milliseconds(2000), base::TimeDelta::FromMilliseconds(25)); - RunTask(QueueType::FRAME_TIMER, Milliseconds(2600), + RunTask(QueueType::FRAME_THROTTLEABLE, Milliseconds(2600), base::TimeDelta::FromMilliseconds(175)); RunTask(QueueType::UNTHROTTLED, Milliseconds(2800), base::TimeDelta::FromMilliseconds(25)); RunTask(QueueType::FRAME_LOADING, Milliseconds(3000), base::TimeDelta::FromMilliseconds(35)); - RunTask(QueueType::FRAME_TIMER, Milliseconds(3200), + RunTask(QueueType::FRAME_THROTTLEABLE, Milliseconds(3200), base::TimeDelta::FromMilliseconds(5)); RunTask(QueueType::COMPOSITOR, Milliseconds(3400), base::TimeDelta::FromMilliseconds(20)); @@ -115,9 +116,9 @@ base::TimeDelta::FromMilliseconds(5)); RunTask(QueueType::CONTROL, Milliseconds(4200), base::TimeDelta::FromMilliseconds(20)); - RunTask(QueueType::FRAME_TIMER, Milliseconds(4400), + RunTask(QueueType::FRAME_THROTTLEABLE, Milliseconds(4400), base::TimeDelta::FromMilliseconds(115)); - RunTask(QueueType::FRAME_UNTHROTTLED, Milliseconds(4600), + RunTask(QueueType::FRAME_PAUSABLE, Milliseconds(4600), base::TimeDelta::FromMilliseconds(175)); RunTask(QueueType::IDLE, Milliseconds(5000), base::TimeDelta::FromMilliseconds(1600)); @@ -129,37 +130,37 @@ {static_cast<int>(QueueType::DEFAULT_TIMER), 5}, {static_cast<int>(QueueType::UNTHROTTLED), 25}, {static_cast<int>(QueueType::FRAME_LOADING), 105}, - {static_cast<int>(QueueType::FRAME_TIMER), 295}, - {static_cast<int>(QueueType::FRAME_UNTHROTTLED), 195}, {static_cast<int>(QueueType::COMPOSITOR), 45}, {static_cast<int>(QueueType::IDLE), 1650}, {static_cast<int>(QueueType::TEST), 85}, - {static_cast<int>(QueueType::FRAME_LOADING_CONTROL), 5}}; + {static_cast<int>(QueueType::FRAME_LOADING_CONTROL), 5}, + {static_cast<int>(QueueType::FRAME_THROTTLEABLE), 295}, + {static_cast<int>(QueueType::FRAME_PAUSABLE), 195}}; EXPECT_THAT(histogram_tester_->GetAllSamples( "RendererScheduler.TaskDurationPerQueueType2"), testing::ContainerEq(expected_samples)); - EXPECT_THAT( - histogram_tester_->GetAllSamples( - "RendererScheduler.TaskDurationPerQueueType2.Foreground"), - ElementsAre(Bucket(static_cast<int>(QueueType::CONTROL), 30), + EXPECT_THAT(histogram_tester_->GetAllSamples( + "RendererScheduler.TaskDurationPerQueueType2.Foreground"), + UnorderedElementsAre( + Bucket(static_cast<int>(QueueType::CONTROL), 30), Bucket(static_cast<int>(QueueType::DEFAULT), 2), Bucket(static_cast<int>(QueueType::DEFAULT_LOADING), 20), Bucket(static_cast<int>(QueueType::DEFAULT_TIMER), 5), Bucket(static_cast<int>(QueueType::FRAME_LOADING), 70), - Bucket(static_cast<int>(QueueType::FRAME_UNTHROTTLED), 20), Bucket(static_cast<int>(QueueType::COMPOSITOR), 25), - Bucket(static_cast<int>(QueueType::TEST), 85))); + Bucket(static_cast<int>(QueueType::TEST), 85), + Bucket(static_cast<int>(QueueType::FRAME_PAUSABLE), 20))); EXPECT_THAT( histogram_tester_->GetAllSamples( "RendererScheduler.TaskDurationPerQueueType2.Background"), - ElementsAre( + UnorderedElementsAre( Bucket(static_cast<int>(QueueType::CONTROL), 45), Bucket(static_cast<int>(QueueType::UNTHROTTLED), 25), Bucket(static_cast<int>(QueueType::FRAME_LOADING), 35), - Bucket(static_cast<int>(QueueType::FRAME_TIMER), 295), - Bucket(static_cast<int>(QueueType::FRAME_UNTHROTTLED), 175), + Bucket(static_cast<int>(QueueType::FRAME_THROTTLEABLE), 295), + Bucket(static_cast<int>(QueueType::FRAME_PAUSABLE), 175), Bucket(static_cast<int>(QueueType::COMPOSITOR), 20), Bucket(static_cast<int>(QueueType::IDLE), 1650), Bucket(static_cast<int>(QueueType::FRAME_LOADING_CONTROL), 5)));
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc index 44ea41c..8439ef3 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
@@ -299,6 +299,12 @@ } scoped_refptr<MainThreadTaskQueue> +RendererSchedulerImpl::BestEffortTaskQueue() { + helper_.CheckOnValidThread(); + return helper_.BestEffortMainThreadTaskQueue(); +} + +scoped_refptr<MainThreadTaskQueue> RendererSchedulerImpl::VirtualTimeControlTaskQueue() { helper_.CheckOnValidThread(); return virtual_time_control_task_queue_; @@ -330,6 +336,11 @@ if (task_queue->CanBeThrottled()) AddQueueToWakeUpBudgetPool(task_queue.get()); + if (queue_class == MainThreadTaskQueue::QueueClass::TIMER) { + if (main_thread_only().virtual_time_stopped) + task_queue->InsertFence(TaskQueue::InsertFencePosition::NOW); + } + return task_queue; } @@ -340,7 +351,7 @@ return NewTaskQueue( MainThreadTaskQueue::QueueCreationParams(queue_type) .SetCanBePaused(true) - .SetCanBeBlocked(true) + .SetCanBeDeferred(true) .SetUsedForControlTasks( queue_type == MainThreadTaskQueue::QueueType::FRAME_LOADING_CONTROL)); @@ -350,16 +361,12 @@ MainThreadTaskQueue::QueueType queue_type) { DCHECK_EQ(MainThreadTaskQueue::QueueClassForQueueType(queue_type), MainThreadTaskQueue::QueueClass::TIMER); - auto timer_task_queue = - NewTaskQueue(MainThreadTaskQueue::QueueCreationParams(queue_type) - .SetShouldReportWhenExecutionBlocked(true) - .SetCanBePaused(true) - .SetCanBeStopped(true) - .SetCanBeBlocked(true) - .SetCanBeThrottled(true)); - if (main_thread_only().virtual_time_stopped) - timer_task_queue->InsertFence(TaskQueue::InsertFencePosition::NOW); - return timer_task_queue; + return NewTaskQueue(MainThreadTaskQueue::QueueCreationParams(queue_type) + .SetShouldReportWhenExecutionBlocked(true) + .SetCanBePaused(true) + .SetCanBeStopped(true) + .SetCanBeDeferred(true) + .SetCanBeThrottled(true)); } std::unique_ptr<RenderWidgetSchedulingState> @@ -1147,10 +1154,11 @@ } main_thread_only().expensive_task_policy = expensive_task_policy; - if (main_thread_only().timer_queue_pause_count != 0 || - main_thread_only().timer_queue_stopped_when_backgrounded) { + if (main_thread_only().timer_queue_pause_count != 0) + new_policy.timer_queue_policy().is_paused = true; + + if (main_thread_only().timer_queue_stopped_when_backgrounded) new_policy.timer_queue_policy().is_stopped = true; - } if (main_thread_only().renderer_paused) { new_policy.loading_queue_policy().is_paused = true; @@ -1588,7 +1596,7 @@ return false; if (is_paused && task_queue->CanBePaused()) return false; - if (is_blocked && task_queue->CanBeBlocked()) + if (is_blocked && task_queue->CanBeDeferred()) return false; if (is_stopped && task_queue->CanBeStopped()) return false;
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.h b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.h index 65436d230..48a04442 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.h +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.h
@@ -164,6 +164,9 @@ // Returns a task queue where tasks run at the highest possible priority. scoped_refptr<MainThreadTaskQueue> ControlTaskQueue(); + // Returns a task queue where tasks run at the lowest priority. + scoped_refptr<MainThreadTaskQueue> BestEffortTaskQueue(); + // A control task queue which also respects virtual time. Only available if // virtual time has been enabled. scoped_refptr<MainThreadTaskQueue> VirtualTimeControlTaskQueue();
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc index eb6f4fc..f650780 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc
@@ -3769,7 +3769,7 @@ scoped_refptr<TaskQueue> loading_control_tq = scheduler_->NewLoadingTaskQueue( MainThreadTaskQueue::QueueType::FRAME_LOADING_CONTROL); scoped_refptr<MainThreadTaskQueue> timer_tq = scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE); scoped_refptr<MainThreadTaskQueue> unthrottled_tq = scheduler_->NewTaskQueue(MainThreadTaskQueue::QueueCreationParams( MainThreadTaskQueue::QueueType::UNTHROTTLED)); @@ -3801,10 +3801,11 @@ ->NewLoadingTaskQueue(MainThreadTaskQueue::QueueType::FRAME_LOADING) ->GetTimeDomain(), scheduler_->GetVirtualTimeDomain()); - EXPECT_EQ( - scheduler_->NewTimerTaskQueue(MainThreadTaskQueue::QueueType::FRAME_TIMER) - ->GetTimeDomain(), - scheduler_->GetVirtualTimeDomain()); + EXPECT_EQ(scheduler_ + ->NewTimerTaskQueue( + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE) + ->GetTimeDomain(), + scheduler_->GetVirtualTimeDomain()); EXPECT_EQ(scheduler_ ->NewTaskQueue(MainThreadTaskQueue::QueueCreationParams( MainThreadTaskQueue::QueueType::UNTHROTTLED)) @@ -3821,7 +3822,7 @@ scheduler_->EnableVirtualTime(); scoped_refptr<MainThreadTaskQueue> timer_tq = scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE); scoped_refptr<MainThreadTaskQueue> unthrottled_tq = scheduler_->NewTaskQueue(MainThreadTaskQueue::QueueCreationParams( MainThreadTaskQueue::QueueType::UNTHROTTLED));
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc index 84f6234..9533f3d 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler_unittest.cc
@@ -90,7 +90,7 @@ scheduler_.reset(new RendererSchedulerImpl(delegate_)); task_queue_throttler_ = scheduler_->task_queue_throttler(); timer_queue_ = scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE); } void TearDown() override { @@ -745,7 +745,7 @@ std::vector<base::TimeTicks> run_times; scoped_refptr<TaskQueue> second_queue = scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE); CPUTimeBudgetPool* pool = task_queue_throttler_->CreateCPUTimeBudgetPool("test"); @@ -1071,7 +1071,7 @@ scoped_refptr<MainThreadTaskQueue> second_queue = scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE); task_queue_throttler_->IncreaseThrottleRefCount(timer_queue_.get()); task_queue_throttler_->IncreaseThrottleRefCount(second_queue.get()); @@ -1107,7 +1107,7 @@ std::vector<base::TimeTicks> run_times; scoped_refptr<TaskQueue> second_queue = scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE); CPUTimeBudgetPool* pool1 = task_queue_throttler_->CreateCPUTimeBudgetPool("test");
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc index d56d3dec..e51dbc3f9d 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
@@ -46,45 +46,29 @@ active_connection_count_(0), weak_factory_(this) {} +namespace { + +void CleanUpQueue(MainThreadTaskQueue* queue) { + if (!queue) + return; + queue->UnregisterTaskQueue(); + queue->SetFrameScheduler(nullptr); + queue->SetBlameContext(nullptr); +} + +} // namespace + WebFrameSchedulerImpl::~WebFrameSchedulerImpl() { weak_factory_.InvalidateWeakPtrs(); - if (loading_task_queue_) { - loading_task_queue_->UnregisterTaskQueue(); - loading_task_queue_->SetFrameScheduler(nullptr); - loading_task_queue_->SetBlameContext(nullptr); - } + RemoveThrottleableQueueFromBackgroundCPUTimeBudgetPool(); - if (loading_control_task_queue_) { - loading_control_task_queue_->UnregisterTaskQueue(); - loading_control_task_queue_->SetFrameScheduler(nullptr); - loading_control_task_queue_->SetBlameContext(nullptr); - } - - if (timer_task_queue_) { - RemoveTimerQueueFromBackgroundCPUTimeBudgetPool(); - timer_task_queue_->UnregisterTaskQueue(); - timer_task_queue_->SetFrameScheduler(nullptr); - timer_task_queue_->SetBlameContext(nullptr); - } - - if (unthrottled_task_queue_) { - unthrottled_task_queue_->UnregisterTaskQueue(); - unthrottled_task_queue_->SetFrameScheduler(nullptr); - unthrottled_task_queue_->SetBlameContext(nullptr); - } - - if (suspendable_task_queue_) { - suspendable_task_queue_->UnregisterTaskQueue(); - suspendable_task_queue_->SetFrameScheduler(nullptr); - suspendable_task_queue_->SetBlameContext(nullptr); - } - - if (unthrottled_but_blockable_task_queue_) { - unthrottled_but_blockable_task_queue_->UnregisterTaskQueue(); - unthrottled_but_blockable_task_queue_->SetFrameScheduler(nullptr); - unthrottled_but_blockable_task_queue_->SetBlameContext(nullptr); - } + CleanUpQueue(loading_task_queue_.get()); + CleanUpQueue(loading_control_task_queue_.get()); + CleanUpQueue(throttleable_task_queue_.get()); + CleanUpQueue(deferrable_task_queue_.get()); + CleanUpQueue(pausable_task_queue_.get()); + CleanUpQueue(unpausable_task_queue_.get()); if (parent_web_view_scheduler_) { parent_web_view_scheduler_->Unregister(this); @@ -95,13 +79,14 @@ } void WebFrameSchedulerImpl::DetachFromWebViewScheduler() { - RemoveTimerQueueFromBackgroundCPUTimeBudgetPool(); + RemoveThrottleableQueueFromBackgroundCPUTimeBudgetPool(); parent_web_view_scheduler_ = nullptr; } -void WebFrameSchedulerImpl::RemoveTimerQueueFromBackgroundCPUTimeBudgetPool() { - if (!timer_task_queue_) +void WebFrameSchedulerImpl:: + RemoveThrottleableQueueFromBackgroundCPUTimeBudgetPool() { + if (!throttleable_task_queue_) return; if (!parent_web_view_scheduler_) @@ -114,7 +99,7 @@ return; time_budget_pool->RemoveQueue(renderer_scheduler_->tick_clock()->NowTicks(), - timer_task_queue_.get()); + throttleable_task_queue_.get()); } void WebFrameSchedulerImpl::AddThrottlingObserver(ObserverType type, @@ -142,7 +127,7 @@ return; bool was_throttled = ShouldThrottleTimers(); frame_visible_ = frame_visible; - UpdateTimerThrottling(was_throttled); + UpdateThrottling(was_throttled); } void WebFrameSchedulerImpl::SetCrossOrigin(bool cross_origin) { @@ -151,7 +136,7 @@ return; bool was_throttled = ShouldThrottleTimers(); cross_origin_ = cross_origin; - UpdateTimerThrottling(was_throttled); + UpdateThrottling(was_throttled); } RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::LoadingTaskRunner() { @@ -159,8 +144,8 @@ if (!loading_web_task_runner_) { loading_task_queue_ = renderer_scheduler_->NewLoadingTaskQueue( MainThreadTaskQueue::QueueType::FRAME_LOADING); - loading_task_queue_->SetFrameScheduler(this); loading_task_queue_->SetBlameContext(blame_context_); + loading_task_queue_->SetFrameScheduler(this); loading_queue_enabled_voter_ = loading_task_queue_->CreateQueueEnabledVoter(); loading_queue_enabled_voter_->SetQueueEnabled(!frame_paused_); @@ -174,8 +159,8 @@ if (!loading_control_web_task_runner_) { loading_control_task_queue_ = renderer_scheduler_->NewLoadingTaskQueue( MainThreadTaskQueue::QueueType::FRAME_LOADING_CONTROL); - loading_control_task_queue_->SetFrameScheduler(this); loading_control_task_queue_->SetBlameContext(blame_context_); + loading_control_task_queue_->SetFrameScheduler(this); loading_control_queue_enabled_voter_ = loading_control_task_queue_->CreateQueueEnabledVoter(); loading_control_queue_enabled_voter_->SetQueueEnabled(!frame_paused_); @@ -185,81 +170,90 @@ return loading_control_web_task_runner_; } -RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::TimerTaskRunner() { +RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::ThrottleableTaskRunner() { DCHECK(parent_web_view_scheduler_); - if (!timer_web_task_runner_) { - timer_task_queue_ = renderer_scheduler_->NewTimerTaskQueue( - MainThreadTaskQueue::QueueType::FRAME_TIMER); - timer_task_queue_->SetFrameScheduler(this); - timer_task_queue_->SetBlameContext(blame_context_); - timer_queue_enabled_voter_ = timer_task_queue_->CreateQueueEnabledVoter(); - timer_queue_enabled_voter_->SetQueueEnabled(!frame_paused_); + if (!throttleable_web_task_runner_) { + throttleable_task_queue_ = renderer_scheduler_->NewTaskQueue( + MainThreadTaskQueue::QueueCreationParams( + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE) + .SetShouldReportWhenExecutionBlocked(true) + .SetCanBeThrottled(true) + .SetCanBeStopped(true) + .SetCanBeDeferred(true) + .SetCanBePaused(true)); + throttleable_task_queue_->SetBlameContext(blame_context_); + throttleable_task_queue_->SetFrameScheduler(this); + throttleable_queue_enabled_voter_ = + throttleable_task_queue_->CreateQueueEnabledVoter(); + throttleable_queue_enabled_voter_->SetQueueEnabled(!frame_paused_); CPUTimeBudgetPool* time_budget_pool = parent_web_view_scheduler_->BackgroundCPUTimeBudgetPool(); if (time_budget_pool) { time_budget_pool->AddQueue(renderer_scheduler_->tick_clock()->NowTicks(), - timer_task_queue_.get()); + throttleable_task_queue_.get()); } if (ShouldThrottleTimers()) { renderer_scheduler_->task_queue_throttler()->IncreaseThrottleRefCount( - timer_task_queue_.get()); + throttleable_task_queue_.get()); } - timer_web_task_runner_ = WebTaskRunnerImpl::Create(timer_task_queue_); + throttleable_web_task_runner_ = + WebTaskRunnerImpl::Create(throttleable_task_queue_); } - return timer_web_task_runner_; + return throttleable_web_task_runner_; } -RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::SuspendableTaskRunner() { +RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::DeferrableTaskRunner() { DCHECK(parent_web_view_scheduler_); - if (!suspendable_web_task_runner_) { - // TODO(altimin): Split FRAME_UNTHROTTLED into FRAME_UNTHROTTLED and - // FRAME_UNSUSPENDED. - suspendable_task_queue_ = renderer_scheduler_->NewTaskQueue( + if (!deferrable_web_task_runner_) { + deferrable_task_queue_ = renderer_scheduler_->NewTaskQueue( MainThreadTaskQueue::QueueCreationParams( - MainThreadTaskQueue::QueueType::FRAME_UNTHROTTLED) - .SetCanBeBlocked(true) + MainThreadTaskQueue::QueueType::FRAME_THROTTLEABLE) + .SetShouldReportWhenExecutionBlocked(true) + .SetCanBeDeferred(true) .SetCanBePaused(true)); - suspendable_task_queue_->SetFrameScheduler(this); - suspendable_task_queue_->SetBlameContext(blame_context_); - suspendable_web_task_runner_ = - WebTaskRunnerImpl::Create(suspendable_task_queue_); - suspendable_queue_enabled_voter_ = - suspendable_task_queue_->CreateQueueEnabledVoter(); - suspendable_queue_enabled_voter_->SetQueueEnabled(!frame_paused_); + deferrable_task_queue_->SetBlameContext(blame_context_); + deferrable_task_queue_->SetFrameScheduler(this); + deferrable_web_task_runner_ = + WebTaskRunnerImpl::Create(deferrable_task_queue_); + deferrable_queue_enabled_voter_ = + deferrable_task_queue_->CreateQueueEnabledVoter(); + deferrable_queue_enabled_voter_->SetQueueEnabled(!frame_paused_); } - return suspendable_web_task_runner_; + return deferrable_web_task_runner_; } -RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::UnthrottledTaskRunner() { +RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::PausableTaskRunner() { DCHECK(parent_web_view_scheduler_); - if (!unthrottled_web_task_runner_) { - unthrottled_task_queue_ = renderer_scheduler_->NewTaskQueue( + if (!pausable_web_task_runner_) { + pausable_task_queue_ = renderer_scheduler_->NewTaskQueue( MainThreadTaskQueue::QueueCreationParams( - MainThreadTaskQueue::QueueType::FRAME_UNTHROTTLED)); - unthrottled_task_queue_->SetFrameScheduler(this); - unthrottled_task_queue_->SetBlameContext(blame_context_); - unthrottled_web_task_runner_ = - WebTaskRunnerImpl::Create(unthrottled_task_queue_); + MainThreadTaskQueue::QueueType::FRAME_PAUSABLE) + .SetShouldReportWhenExecutionBlocked(true) + .SetCanBePaused(true)); + pausable_task_queue_->SetBlameContext(blame_context_); + pausable_task_queue_->SetFrameScheduler(this); + pausable_web_task_runner_ = WebTaskRunnerImpl::Create(pausable_task_queue_); + pausable_queue_enabled_voter_ = + pausable_task_queue_->CreateQueueEnabledVoter(); + pausable_queue_enabled_voter_->SetQueueEnabled(!frame_paused_); } - return unthrottled_web_task_runner_; + return pausable_web_task_runner_; } -RefPtr<blink::WebTaskRunner> -WebFrameSchedulerImpl::UnthrottledButBlockableTaskRunner() { +RefPtr<blink::WebTaskRunner> WebFrameSchedulerImpl::UnpausableTaskRunner() { DCHECK(parent_web_view_scheduler_); - if (!unthrottled_but_blockable_web_task_runner_) { - unthrottled_but_blockable_task_queue_ = renderer_scheduler_->NewTaskQueue( + if (!unpausable_web_task_runner_) { + unpausable_task_queue_ = renderer_scheduler_->NewTaskQueue( MainThreadTaskQueue::QueueCreationParams( - MainThreadTaskQueue::QueueType::FRAME_UNTHROTTLED) - .SetCanBeBlocked(true)); - unthrottled_but_blockable_task_queue_->SetFrameScheduler(this); - unthrottled_but_blockable_task_queue_->SetBlameContext(blame_context_); - unthrottled_but_blockable_web_task_runner_ = - WebTaskRunnerImpl::Create(unthrottled_but_blockable_task_queue_); + MainThreadTaskQueue::QueueType::FRAME_UNPAUSABLE)); + unpausable_task_queue_->SetBlameContext(blame_context_); + unpausable_task_queue_->SetFrameScheduler(this); + unpausable_web_task_runner_ = + WebTaskRunnerImpl::Create(unpausable_task_queue_); } - return unthrottled_but_blockable_web_task_runner_; + return unpausable_web_task_runner_; } blink::WebViewScheduler* WebFrameSchedulerImpl::GetWebViewScheduler() { @@ -333,18 +327,23 @@ "loading_control_task_queue", trace_helper::PointerToString(loading_control_task_queue_.get())); } - if (timer_task_queue_) - state->SetString("timer_task_queue", - trace_helper::PointerToString(timer_task_queue_.get())); - if (unthrottled_task_queue_) { + if (throttleable_task_queue_) state->SetString( - "unthrottled_task_queue", - trace_helper::PointerToString(unthrottled_task_queue_.get())); + "throttleable_task_queue", + trace_helper::PointerToString(throttleable_task_queue_.get())); + if (deferrable_task_queue_) { + state->SetString( + "deferrable_task_queue", + trace_helper::PointerToString(deferrable_task_queue_.get())); } - if (suspendable_task_queue_) { + if (pausable_task_queue_) { + state->SetString("pausable_task_queue", + trace_helper::PointerToString(pausable_task_queue_.get())); + } + if (unpausable_task_queue_) { state->SetString( - "suspendable_task_queue", - trace_helper::PointerToString(suspendable_task_queue_.get())); + "unpausable_task_queue", + trace_helper::PointerToString(unpausable_task_queue_.get())); } if (blame_context_) { state->BeginDictionary("blame_context"); @@ -362,7 +361,7 @@ return; bool was_throttled = ShouldThrottleTimers(); page_visible_ = page_visible; - UpdateTimerThrottling(was_throttled); + UpdateThrottling(was_throttled); for (auto observer : loader_observers_) { observer->OnThrottlingStateChanged(page_visible_ @@ -381,10 +380,12 @@ loading_queue_enabled_voter_->SetQueueEnabled(!frame_paused); if (loading_control_queue_enabled_voter_) loading_control_queue_enabled_voter_->SetQueueEnabled(!frame_paused); - if (timer_queue_enabled_voter_) - timer_queue_enabled_voter_->SetQueueEnabled(!frame_paused); - if (suspendable_queue_enabled_voter_) - suspendable_queue_enabled_voter_->SetQueueEnabled(!frame_paused); + if (throttleable_queue_enabled_voter_) + throttleable_queue_enabled_voter_->SetQueueEnabled(!frame_paused); + if (deferrable_queue_enabled_voter_) + deferrable_queue_enabled_voter_->SetQueueEnabled(!frame_paused); + if (pausable_queue_enabled_voter_) + pausable_queue_enabled_voter_->SetQueueEnabled(!frame_paused); } void WebFrameSchedulerImpl::OnFirstMeaningfulPaint() { @@ -404,16 +405,16 @@ !frame_visible_ && cross_origin_; } -void WebFrameSchedulerImpl::UpdateTimerThrottling(bool was_throttled) { +void WebFrameSchedulerImpl::UpdateThrottling(bool was_throttled) { bool should_throttle = ShouldThrottleTimers(); - if (was_throttled == should_throttle || !timer_web_task_runner_) + if (was_throttled == should_throttle || !throttleable_web_task_runner_) return; if (should_throttle) { renderer_scheduler_->task_queue_throttler()->IncreaseThrottleRefCount( - timer_task_queue_.get()); + throttleable_task_queue_.get()); } else { renderer_scheduler_->task_queue_throttler()->DecreaseThrottleRefCount( - timer_task_queue_.get()); + throttleable_task_queue_.get()); } }
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h index b42f137..a746fd68 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h +++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.h
@@ -49,10 +49,10 @@ void SetCrossOrigin(bool cross_origin) override; RefPtr<WebTaskRunner> LoadingTaskRunner() override; RefPtr<WebTaskRunner> LoadingControlTaskRunner() override; - RefPtr<WebTaskRunner> TimerTaskRunner() override; - RefPtr<WebTaskRunner> SuspendableTaskRunner() override; - RefPtr<WebTaskRunner> UnthrottledTaskRunner() override; - RefPtr<WebTaskRunner> UnthrottledButBlockableTaskRunner() override; + RefPtr<WebTaskRunner> ThrottleableTaskRunner() override; + RefPtr<WebTaskRunner> DeferrableTaskRunner() override; + RefPtr<WebTaskRunner> PausableTaskRunner() override; + RefPtr<WebTaskRunner> UnpausableTaskRunner() override; WebViewScheduler* GetWebViewScheduler() override; void WillNavigateBackForwardSoon() override; void DidStartProvisionalLoad(bool is_main_frame) override; @@ -84,10 +84,10 @@ }; void DetachFromWebViewScheduler(); - void RemoveTimerQueueFromBackgroundCPUTimeBudgetPool(); - void ApplyPolicyToTimerQueue(); + void RemoveThrottleableQueueFromBackgroundCPUTimeBudgetPool(); + void ApplyPolicyToThrottleableQueue(); bool ShouldThrottleTimers() const; - void UpdateTimerThrottling(bool was_throttled); + void UpdateThrottling(bool was_throttled); void DidOpenActiveConnection(); void DidCloseActiveConnection(); @@ -96,22 +96,23 @@ scoped_refptr<MainThreadTaskQueue> loading_task_queue_; scoped_refptr<MainThreadTaskQueue> loading_control_task_queue_; - scoped_refptr<MainThreadTaskQueue> timer_task_queue_; - scoped_refptr<MainThreadTaskQueue> unthrottled_task_queue_; - scoped_refptr<MainThreadTaskQueue> suspendable_task_queue_; - scoped_refptr<MainThreadTaskQueue> unthrottled_but_blockable_task_queue_; + scoped_refptr<MainThreadTaskQueue> throttleable_task_queue_; + scoped_refptr<MainThreadTaskQueue> deferrable_task_queue_; + scoped_refptr<MainThreadTaskQueue> pausable_task_queue_; + scoped_refptr<MainThreadTaskQueue> unpausable_task_queue_; std::unique_ptr<TaskQueue::QueueEnabledVoter> loading_queue_enabled_voter_; std::unique_ptr<TaskQueue::QueueEnabledVoter> loading_control_queue_enabled_voter_; - std::unique_ptr<TaskQueue::QueueEnabledVoter> timer_queue_enabled_voter_; std::unique_ptr<TaskQueue::QueueEnabledVoter> - suspendable_queue_enabled_voter_; + throttleable_queue_enabled_voter_; + std::unique_ptr<TaskQueue::QueueEnabledVoter> deferrable_queue_enabled_voter_; + std::unique_ptr<TaskQueue::QueueEnabledVoter> pausable_queue_enabled_voter_; RefPtr<WebTaskRunnerImpl> loading_web_task_runner_; RefPtr<WebTaskRunnerImpl> loading_control_web_task_runner_; - RefPtr<WebTaskRunnerImpl> timer_web_task_runner_; - RefPtr<WebTaskRunnerImpl> unthrottled_web_task_runner_; - RefPtr<WebTaskRunnerImpl> suspendable_web_task_runner_; - RefPtr<WebTaskRunnerImpl> unthrottled_but_blockable_web_task_runner_; + RefPtr<WebTaskRunnerImpl> throttleable_web_task_runner_; + RefPtr<WebTaskRunnerImpl> deferrable_web_task_runner_; + RefPtr<WebTaskRunnerImpl> pausable_web_task_runner_; + RefPtr<WebTaskRunnerImpl> unpausable_web_task_runner_; RendererSchedulerImpl* renderer_scheduler_; // NOT OWNED WebViewSchedulerImpl* parent_web_view_scheduler_; // NOT OWNED base::trace_event::BlameContext* blame_context_; // NOT OWNED
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc index ab42f45..aa0ad36 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl_unittest.cc
@@ -114,9 +114,10 @@ RuntimeEnabledFeatures::SetTimerThrottlingForHiddenFramesEnabled(true); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -128,9 +129,10 @@ web_view_scheduler_->SetPageVisible(false); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -142,9 +144,10 @@ web_frame_scheduler_->SetFrameVisible(false); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -157,9 +160,10 @@ web_frame_scheduler_->SetCrossOrigin(true); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -172,9 +176,10 @@ web_frame_scheduler_->SetCrossOrigin(true); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -186,9 +191,10 @@ web_view_scheduler_->SetPageVisible(false); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -202,9 +208,10 @@ web_frame_scheduler_->SetCrossOrigin(true); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -215,24 +222,24 @@ int counter = 0; web_frame_scheduler_->LoadingTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter))); - web_frame_scheduler_->TimerTaskRunner()->PostTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter))); - web_frame_scheduler_->UnthrottledTaskRunner()->PostTask( + web_frame_scheduler_->DeferrableTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter))); - web_frame_scheduler_->SuspendableTaskRunner()->PostTask( + web_frame_scheduler_->PausableTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter))); - web_frame_scheduler_->UnthrottledButBlockableTaskRunner()->PostTask( + web_frame_scheduler_->UnpausableTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&IncrementCounter, WTF::Unretained(&counter))); web_frame_scheduler_->SetPaused(true); EXPECT_EQ(0, counter); mock_task_runner_->RunUntilIdle(); - EXPECT_EQ(2, counter); + EXPECT_EQ(1, counter); web_frame_scheduler_->SetPaused(false); - EXPECT_EQ(2, counter); + EXPECT_EQ(1, counter); mock_task_runner_->RunUntilIdle(); EXPECT_EQ(5, counter); }
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler.h b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler.h index 03a6cda..549bd89 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler.h +++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler.h
@@ -78,6 +78,22 @@ // WebFrameSchedulers. virtual void SetVirtualTimePolicy(VirtualTimePolicy) = 0; + class VirtualTimeObserver { + public: + virtual ~VirtualTimeObserver() {} + + // Called the next microtask after virtual time pauses for any reason. + // |virtual_time_offset| is the offset between the current virtual time and + // the initial virtual time when EnableVirtualTime() was called. + virtual void OnVirtualTimePaused(base::TimeDelta virtual_time_offset) = 0; + }; + + // Adds a VirtualTimeObserver instance to be notified when virtual time has + // been paused. Note the observer will fire in the microtask after the policy + // decision was made. + virtual void AddVirtualTimeObserver(VirtualTimeObserver*) = 0; + virtual void RemoveVirtualTimeObserver(VirtualTimeObserver*) = 0; + // Set the remaining virtual time budget to |budget|. Once the budget runs // out, |budget_exhausted_callback| is called. Note that the virtual time // policy is not affected when the budget expires.
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc index 35f1e34..3513a83 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc
@@ -115,6 +115,8 @@ background_time_budget_pool_(nullptr), delegate_(delegate) { renderer_scheduler->AddWebViewScheduler(this); + virtual_time_paused_notification_.Reset(base::Bind( + &WebViewSchedulerImpl::NotifyVirtualTimePaused, base::Unretained(this))); } WebViewSchedulerImpl::~WebViewSchedulerImpl() { @@ -127,6 +129,8 @@ if (background_time_budget_pool_) background_time_budget_pool_->Close(); + + virtual_time_paused_notification_.Cancel(); } void WebViewSchedulerImpl::SetPageVisible(bool page_visible) { @@ -181,6 +185,8 @@ virtual_time_control_task_queue_ = WebTaskRunnerImpl::Create( renderer_scheduler_->VirtualTimeControlTaskQueue()); ApplyVirtualTimePolicyToTimers(); + + initial_virtual_time_ = renderer_scheduler_->GetVirtualTimeDomain()->Now(); } void WebViewSchedulerImpl::DisableVirtualTimeForTesting() { @@ -208,6 +214,16 @@ void WebViewSchedulerImpl::SetAllowVirtualTimeToAdvance( bool allow_virtual_time_to_advance) { + // Notify observers if we've paused in a subsequent microtask. Important + // because observers may wish to use this signal as a trigger to batch process + // any pending network fetches, we always send this notification, even if + // we where previously paused. + virtual_time_paused_notification_.Cancel(); + if (!allow_virtual_time_to_advance && have_seen_loading_task_) { + renderer_scheduler_->BestEffortTaskQueue()->PostTask( + FROM_HERE, virtual_time_paused_notification_.GetCallback()); + } + if (allow_virtual_time_to_advance_ == allow_virtual_time_to_advance) return; allow_virtual_time_to_advance_ = allow_virtual_time_to_advance; @@ -292,6 +308,26 @@ BLINK_FROM_HERE, std::move(budget_exhausted_callback), budget); } +void WebViewSchedulerImpl::AddVirtualTimeObserver( + VirtualTimeObserver* observer) { + virtual_time_observers_.AddObserver(observer); +} + +void WebViewSchedulerImpl::RemoveVirtualTimeObserver( + VirtualTimeObserver* observer) { + virtual_time_observers_.RemoveObserver(observer); +} + +void WebViewSchedulerImpl::NotifyVirtualTimePaused() { + DCHECK(!allow_virtual_time_to_advance_); + + for (auto& observer : virtual_time_observers_) { + observer.OnVirtualTimePaused( + renderer_scheduler_->GetVirtualTimeDomain()->Now() - + initial_virtual_time_); + } +} + void WebViewSchedulerImpl::AudioStateChanged(bool is_audio_playing) { is_audio_playing_ = is_audio_playing; renderer_scheduler_->OnAudioStateChanged();
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.h b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.h index edc7eef..f38aa6d 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.h +++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.h
@@ -10,7 +10,9 @@ #include <string> #include "base/macros.h" +#include "base/observer_list.h" #include "platform/PlatformExport.h" +#include "platform/scheduler/base/cancelable_closure_holder.h" #include "platform/scheduler/base/task_queue.h" #include "platform/scheduler/child/web_scheduler.h" #include "platform/scheduler/child/web_task_runner_impl.h" @@ -54,6 +56,8 @@ void AudioStateChanged(bool is_audio_playing) override; bool HasActiveConnectionForTest() const override; void RequestBeginMainFrameNotExpected(bool new_state) override; + void AddVirtualTimeObserver(VirtualTimeObserver*) override; + void RemoveVirtualTimeObserver(VirtualTimeObserver*) override; // Virtual for testing. virtual void ReportIntervention(const std::string& message); @@ -101,6 +105,8 @@ // number of active connections. void UpdateBackgroundBudgetPoolThrottlingState(); + void NotifyVirtualTimePaused(); + std::set<WebFrameSchedulerImpl*> frame_schedulers_; std::set<unsigned long> pending_loads_; std::set<WebFrameSchedulerImpl*> provisional_loads_; @@ -122,6 +128,9 @@ bool has_active_connection_; CPUTimeBudgetPool* background_time_budget_pool_; // Not owned. WebViewScheduler::WebViewSchedulerDelegate* delegate_; // Not owned. + base::ObserverList<VirtualTimeObserver> virtual_time_observers_; + CancelableClosureHolder virtual_time_paused_notification_; + base::TimeTicks initial_virtual_time_; DISALLOW_COPY_AND_ASSIGN(WebViewSchedulerImpl); };
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc index 740300a..e16411b8 100644 --- a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc +++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl_unittest.cc
@@ -106,9 +106,10 @@ web_view_scheduler_->SetPageVisible(true); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -120,9 +121,10 @@ web_view_scheduler_->SetPageVisible(false); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -163,13 +165,15 @@ int run_count1 = 0; int run_count2 = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count1), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count1), TimeDelta::FromMilliseconds(1)); - web_frame_scheduler2->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler2->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler2->TimerTaskRunner(), &run_count2), + MakeRepeatingTask(web_frame_scheduler2->ThrottleableTaskRunner(), + &run_count2), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -205,31 +209,31 @@ std::vector<size_t> virtual_times_ms; base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); size_t initial_virtual_time_ms = - web_frame_scheduler_->TimerTaskRunner() + web_frame_scheduler_->ThrottleableTaskRunner() ->MonotonicallyIncreasingVirtualTimeSeconds() * 1000.0; web_view_scheduler_->EnableVirtualTime(); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeVirtualTimeRecorderTask(clock_.get(), - web_frame_scheduler_->TimerTaskRunner(), - &real_times, &virtual_times_ms), + MakeVirtualTimeRecorderTask( + clock_.get(), web_frame_scheduler_->ThrottleableTaskRunner(), + &real_times, &virtual_times_ms), TimeDelta::FromMilliseconds(2)); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeVirtualTimeRecorderTask(clock_.get(), - web_frame_scheduler_->TimerTaskRunner(), - &real_times, &virtual_times_ms), + MakeVirtualTimeRecorderTask( + clock_.get(), web_frame_scheduler_->ThrottleableTaskRunner(), + &real_times, &virtual_times_ms), TimeDelta::FromMilliseconds(20)); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeVirtualTimeRecorderTask(clock_.get(), - web_frame_scheduler_->TimerTaskRunner(), - &real_times, &virtual_times_ms), + MakeVirtualTimeRecorderTask( + clock_.get(), web_frame_scheduler_->ThrottleableTaskRunner(), + &real_times, &virtual_times_ms), TimeDelta::FromMilliseconds(200)); mock_task_runner_->RunUntilIdle(); @@ -246,7 +250,7 @@ std::vector<size_t> virtual_times_ms; base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); size_t initial_virtual_time_ms = - web_frame_scheduler_->TimerTaskRunner() + web_frame_scheduler_->ThrottleableTaskRunner() ->MonotonicallyIncreasingVirtualTimeSeconds() * 1000.0; @@ -289,9 +293,10 @@ base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunTasksWhile(mock_task_runner_->TaskRunCountBelow(2000)); @@ -325,21 +330,21 @@ web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE); web_view_scheduler_->EnableVirtualTime(); - web_frame_scheduler_->TimerTaskRunner()->PostTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 0, WTF::Unretained(&run_order))); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, WTF::Bind(&DelayedRunOrderTask, 1, - WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), + WTF::Passed(web_frame_scheduler_->ThrottleableTaskRunner()), WTF::Unretained(&run_order)), TimeDelta::FromMilliseconds(2)); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, WTF::Bind(&DelayedRunOrderTask, 3, - WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), + WTF::Passed(web_frame_scheduler_->ThrottleableTaskRunner()), WTF::Unretained(&run_order)), TimeDelta::FromMilliseconds(4)); @@ -355,21 +360,21 @@ web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::ADVANCE); web_view_scheduler_->EnableVirtualTime(); - web_frame_scheduler_->TimerTaskRunner()->PostTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 0, WTF::Unretained(&run_order))); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, WTF::Bind(&DelayedRunOrderTask, 1, - WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), + WTF::Passed(web_frame_scheduler_->ThrottleableTaskRunner()), WTF::Unretained(&run_order)), TimeDelta::FromMilliseconds(2)); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, WTF::Bind(&DelayedRunOrderTask, 3, - WTF::Passed(web_frame_scheduler_->TimerTaskRunner()), + WTF::Passed(web_frame_scheduler_->ThrottleableTaskRunner()), WTF::Unretained(&run_order)), TimeDelta::FromMilliseconds(4)); @@ -392,9 +397,10 @@ web_view_scheduler_->SetPageVisible(false); int run_count = 0; - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeRepeatingTask(web_frame_scheduler_->TimerTaskRunner(), &run_count), + MakeRepeatingTask(web_frame_scheduler_->ThrottleableTaskRunner(), + &run_count), TimeDelta::FromMilliseconds(1)); mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1)); @@ -410,7 +416,7 @@ std::unique_ptr<WebFrameSchedulerImpl> web_frame_scheduler = web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr); - web_frame_scheduler->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 1, WTF::Unretained(&run_order)), TimeDelta::FromMilliseconds(1)); @@ -436,7 +442,7 @@ for (int i = 0; i < 10; i++) { WebFrameSchedulerImpl* web_frame_scheduler = web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr).release(); - web_frame_scheduler->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, MakeDeletionTask(web_frame_scheduler), TimeDelta::FromMilliseconds(1)); } @@ -444,7 +450,7 @@ } TEST_F(WebViewSchedulerImplTest, DeleteWebViewScheduler_InTask) { - web_frame_scheduler_->TimerTaskRunner()->PostTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostTask( BLINK_FROM_HERE, MakeDeletionTask(web_view_scheduler_.release())); mock_task_runner_->RunUntilIdle(); } @@ -455,7 +461,7 @@ WebFrameSchedulerImpl* web_frame_scheduler = web_view_scheduler_->CreateWebFrameSchedulerImpl(nullptr).release(); RefPtr<blink::WebTaskRunner> timer_task_runner = - web_frame_scheduler->TimerTaskRunner(); + web_frame_scheduler->ThrottleableTaskRunner(); int run_count = 0; timer_task_runner->PostDelayedTask( @@ -616,7 +622,7 @@ web_view_scheduler_->SetVirtualTimePolicy(VirtualTimePolicy::PAUSE); web_view_scheduler_->EnableVirtualTime(); - web_frame_scheduler->TimerTaskRunner()->PostTask( + web_frame_scheduler->ThrottleableTaskRunner()->PostTask( BLINK_FROM_HERE, WTF::Bind(&RunOrderTask, 1, WTF::Unretained(&run_order))); @@ -634,38 +640,38 @@ std::vector<size_t> virtual_times_ms; base::TimeTicks initial_real_time = scheduler_->tick_clock()->NowTicks(); size_t initial_virtual_time_ms = - web_frame_scheduler_->TimerTaskRunner() + web_frame_scheduler_->ThrottleableTaskRunner() ->MonotonicallyIncreasingVirtualTimeSeconds() * 1000.0; web_view_scheduler_->EnableVirtualTime(); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeVirtualTimeRecorderTask(clock_.get(), - web_frame_scheduler_->TimerTaskRunner(), - &real_times, &virtual_times_ms), + MakeVirtualTimeRecorderTask( + clock_.get(), web_frame_scheduler_->ThrottleableTaskRunner(), + &real_times, &virtual_times_ms), TimeDelta::FromMilliseconds(1)); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeVirtualTimeRecorderTask(clock_.get(), - web_frame_scheduler_->TimerTaskRunner(), - &real_times, &virtual_times_ms), + MakeVirtualTimeRecorderTask( + clock_.get(), web_frame_scheduler_->ThrottleableTaskRunner(), + &real_times, &virtual_times_ms), TimeDelta::FromMilliseconds(2)); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeVirtualTimeRecorderTask(clock_.get(), - web_frame_scheduler_->TimerTaskRunner(), - &real_times, &virtual_times_ms), + MakeVirtualTimeRecorderTask( + clock_.get(), web_frame_scheduler_->ThrottleableTaskRunner(), + &real_times, &virtual_times_ms), TimeDelta::FromMilliseconds(5)); - web_frame_scheduler_->TimerTaskRunner()->PostDelayedTask( + web_frame_scheduler_->ThrottleableTaskRunner()->PostDelayedTask( BLINK_FROM_HERE, - MakeVirtualTimeRecorderTask(clock_.get(), - web_frame_scheduler_->TimerTaskRunner(), - &real_times, &virtual_times_ms), + MakeVirtualTimeRecorderTask( + clock_.get(), web_frame_scheduler_->ThrottleableTaskRunner(), + &real_times, &virtual_times_ms), TimeDelta::FromMilliseconds(7)); web_view_scheduler_->GrantVirtualTimeBudget( @@ -735,13 +741,13 @@ mock_task_runner_->RunUntilTime(base::TimeTicks() + base::TimeDelta::FromMilliseconds(2500)); - web_frame_scheduler_->TimerTaskRunner() + web_frame_scheduler_->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE, base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), TimeDelta::FromMilliseconds(1)); - web_frame_scheduler_->TimerTaskRunner() + web_frame_scheduler_->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE, @@ -761,13 +767,13 @@ web_view_scheduler_->SetPageVisible(false); - web_frame_scheduler_->TimerTaskRunner() + web_frame_scheduler_->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE, base::Bind(&ExpensiveTestTask, clock_.get(), &run_times), TimeDelta::FromMicroseconds(1)); - web_frame_scheduler_->TimerTaskRunner() + web_frame_scheduler_->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE, @@ -809,7 +815,7 @@ base::TimeDelta::FromMilliseconds(20500)); for (size_t i = 0; i < 3; ++i) { - web_frame_scheduler1->TimerTaskRunner() + web_frame_scheduler1->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE, @@ -832,7 +838,7 @@ websocket_connection = web_frame_scheduler1->OnActiveConnectionCreated(); for (size_t i = 0; i < 3; ++i) { - web_frame_scheduler1->TimerTaskRunner() + web_frame_scheduler1->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE, @@ -854,7 +860,7 @@ run_times.clear(); for (size_t i = 0; i < 3; ++i) { - web_frame_scheduler2->TimerTaskRunner() + web_frame_scheduler2->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE, @@ -881,7 +887,7 @@ base::TimeDelta::FromMilliseconds(70500)); for (size_t i = 0; i < 3; ++i) { - web_frame_scheduler1->TimerTaskRunner() + web_frame_scheduler1->ThrottleableTaskRunner() ->ToSingleThreadTaskRunner() ->PostDelayedTask( BLINK_FROM_HERE,
diff --git a/third_party/WebKit/Source/platform/wtf/Assertions.h b/third_party/WebKit/Source/platform/wtf/Assertions.h index b904a8d2..de12c5c2 100644 --- a/third_party/WebKit/Source/platform/wtf/Assertions.h +++ b/third_party/WebKit/Source/platform/wtf/Assertions.h
@@ -96,10 +96,14 @@ // DEFINE_TYPE_CASTS // -// toType() functions are static_cast<> wrappers with SECURITY_DCHECK. It's +// ToType() functions are static_cast<> wrappers with SECURITY_DCHECK. It's // helpful to find bad casts. // -// toTypeOrDie() has a runtime type check, and it crashes if the specified +// ToTypeOrNull() functions are similar to dynamic_cast<>. They return +// type-casted values if the specified predicate is true, and return +// nullptr otherwise. +// +// ToTypeOrDie() has a runtime type check, and it crashes if the specified // object is not an instance of the destination type. It is used if // * it's hard to prevent from passing unexpected objects, // * proceeding with the following code doesn't make sense, and @@ -124,6 +128,30 @@ } \ void To##thisType(const thisType*); \ void To##thisType(const thisType&); \ + \ + inline thisType* To##thisType##OrNull(argumentType* argument) { \ + if (!(argument) || !(pointerPredicate)) \ + return nullptr; \ + return static_cast<thisType*>(argument); \ + } \ + inline const thisType* To##thisType##OrNull(const argumentType* argument) { \ + if (!(argument) || !(pointerPredicate)) \ + return nullptr; \ + return static_cast<const thisType*>(argument); \ + } \ + inline thisType* To##thisType##OrNull(argumentType& argument) { \ + if (!(referencePredicate)) \ + return nullptr; \ + return static_cast<thisType*>(&argument); \ + } \ + inline const thisType* To##thisType##OrNull(const argumentType& argument) { \ + if (!(referencePredicate)) \ + return nullptr; \ + return static_cast<const thisType*>(&argument); \ + } \ + void To##thisType##OrNull(const thisType*); \ + void To##thisType##OrNull(const thisType&); \ + \ inline thisType* To##thisType##OrDie(argumentType* argument) { \ CHECK(!argument || (pointerPredicate)); \ return static_cast<thisType*>(argument); \
diff --git a/third_party/WebKit/Tools/Scripts/test-webkitpy b/third_party/WebKit/Tools/Scripts/test-webkitpy index 292e3b2..5e559b9 100755 --- a/third_party/WebKit/Tools/Scripts/test-webkitpy +++ b/third_party/WebKit/Tools/Scripts/test-webkitpy
@@ -36,20 +36,32 @@ import typ -skip = [] -if sys.platform == 'win32': - # These test fail on win32. We could annotate some of these in - # class-level skips, but we don't support package/module-level skips. - # bugs.webkit.org/show_bug.cgi?id=54526 . - skip = [ - 'webkitpy.common.checkout.*', - 'webkitpy.common.config.*', - 'webkitpy.tool.*', - 'webkitpy.w3c.*', - 'webkitpy.layout_tests.layout_package.bot_test_expectations_unittest.*', - ] -sys.exit(typ.main(top_level_dir=path_finder.get_scripts_dir(), - skip=skip, - path=[path_finder.get_webkitpy_thirdparty_dir()], - win_multiprocessing='spawn')) +def main(): + skip = [] + if sys.platform == 'win32': + # These test fail on win32. We could annotate some of these in + # class-level skips, but we don't support package/module-level skips. + # bugs.webkit.org/show_bug.cgi?id=54526 . + skip = [ + 'webkitpy.common.checkout.*', + 'webkitpy.common.config.*', + 'webkitpy.tool.*', + 'webkitpy.w3c.*', + 'webkitpy.layout_tests.layout_package.bot_test_expectations_unittest.*', + ] + + ret = typ.main(top_level_dir=path_finder.get_scripts_dir(), + skip=skip, + path=[path_finder.get_webkitpy_thirdparty_dir()], + win_multiprocessing='spawn') + if ret: + sys.exit(ret) + path_finder.add_blink_tools_dir_to_sys_path() + sys.exit(typ.main(top_level_dir=path_finder.get_blink_tools_dir(), + skip=[], + path=[], + win_multiprocessing='spawn')) + +if __name__ == "__main__": + main()
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py index ab7a225..0f9575ac 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py
@@ -79,6 +79,16 @@ return os.path.join(get_scripts_dir(), 'webkitpy', 'thirdparty') +def get_blink_tools_dir(): + return os.path.join(get_chromium_src_dir(), 'third_party', 'blink', 'tools') + + +def add_blink_tools_dir_to_sys_path(): + path = get_blink_tools_dir() + if path not in sys.path: + sys.path.append(path) + + class PathFinder(object): def __init__(self, filesystem, sys_path=None, env_path=None):
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py index 092e8b2..4ad47ce 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/style/checkers/python.py
@@ -79,6 +79,7 @@ finder.path_from_tools_scripts(), finder.path_from_blink_source('build', 'scripts'), finder.path_from_tools_scripts('webkitpy', 'thirdparty'), + finder.path_from_chromium_base('third_party', 'blink', 'tools'), finder.path_from_blink_source('bindings', 'scripts'), finder.path_from_chromium_base('build', 'android'), finder.path_from_chromium_base('third_party', 'catapult', 'devil'),
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_commit.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_commit.py index 0c27918..ed987fac 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_commit.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_commit.py
@@ -3,6 +3,7 @@ # found in the LICENSE file. from webkitpy.w3c.chromium_finder import absolute_chromium_dir, absolute_chromium_wpt_dir +from webkitpy.w3c.common import is_file_exportable from webkitpy.common.system.executive import ScriptError @@ -106,27 +107,7 @@ 'git', 'diff-tree', '--name-only', '--no-commit-id', '-r', self.sha, '--', self.absolute_chromium_wpt_dir ], cwd=self.absolute_chromium_dir).splitlines() - fs = self.host.filesystem - blacklist = [ - 'MANIFEST.json', - fs.join('resources', 'testharnessreport.js'), - ] - relative_wpt_path = fs.relpath( - self.absolute_chromium_wpt_dir, self.absolute_chromium_dir) - qualified_blacklist = [fs.join(relative_wpt_path, f) for f in blacklist] - - is_ignored = lambda f: ( - f in qualified_blacklist or - self.is_baseline(f) or - # See http://crbug.com/702283 for context. - fs.basename(f) == 'OWNERS') - return [f for f in changed_files if not is_ignored(f)] - - @staticmethod - def is_baseline(basename): - """Checks whether a given file name in wpt appears to be a baseline.""" - # TODO(qyearsley): Find a better, centralized place for this. - return basename.endswith('-expected.txt') + return [f for f in changed_files if is_file_exportable(f)] def format_patch(self): """Makes a patch with only exportable changes."""
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_exportable_commits_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_exportable_commits_unittest.py index d89e732..1608d58a 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_exportable_commits_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/chromium_exportable_commits_unittest.py
@@ -56,7 +56,8 @@ 'rev-parse': 'add087a97844f4b9e307d9a216940582d96db306', 'crrev-parse': 'add087a97844f4b9e307d9a216940582d96db306', 'diff': 'fake diff', - 'diff-tree': 'some\nfiles', + 'diff-tree': 'third_party/WebKit/LayoutTests/external/wpt/some\n' + 'third_party/WebKit/LayoutTests/external/wpt/files', 'format-patch': 'hey I\'m a patch', 'footers': 'cr-rev-position', }, strict=True) @@ -73,13 +74,14 @@ ['git', 'show', '--format=%B', '--no-patch', 'add087a97844f4b9e307d9a216940582d96db306'], ['git', 'diff-tree', '--name-only', '--no-commit-id', '-r', 'add087a97844f4b9e307d9a216940582d96db306', '--', '/mock-checkout/third_party/WebKit/LayoutTests/external/wpt'], - ['git', 'format-patch', '-1', '--stdout', 'add087a97844f4b9e307d9a216940582d96db306', '--', 'some', 'files'], + ['git', 'format-patch', '-1', '--stdout', 'add087a97844f4b9e307d9a216940582d96db306', '--', + 'third_party/WebKit/LayoutTests/external/wpt/some', 'third_party/WebKit/LayoutTests/external/wpt/files'], ]) def test_exportable_commits_since_require_clean_by_default(self): host = MockHost() host.executive = mock_git_commands({ - 'diff-tree': 'some\nfiles', + 'diff-tree': 'third_party/WebKit/LayoutTests/external/wpt/some_files', 'footers': 'cr-rev-position', 'format-patch': 'hey I\'m a patch', 'rev-list': 'add087a97844f4b9e307d9a216940582d96db306\n' @@ -99,7 +101,7 @@ def test_exportable_commits_since_without_require_clean(self): host = MockHost() host.executive = mock_git_commands({ - 'diff-tree': 'some\nfiles', + 'diff-tree': 'third_party/WebKit/LayoutTests/external/wpt/some_files', 'footers': 'cr-rev-position', 'format-patch': 'hey I\'m a patch', 'rev-list': 'add087a97844f4b9e307d9a216940582d96db306\n'
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py index 08e9df90..89056d3d 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common.py
@@ -36,3 +36,40 @@ if key in contents: credentials[key] = contents[key] return credentials + + +def is_testharness_baseline(filename): + """Checks whether a given file name appears to be a testharness baseline. + + Args: + filename: A path (absolute or relative) or a basename. + """ + return filename.endswith('-expected.txt') + + +def is_basename_skipped(basename): + """Checks whether to skip (not sync) a file based on its basename. + + Note: this function is used during both import and export, i.e., files with + skipped basenames are never imported or exported. + """ + assert '/' not in basename + blacklist = [ + 'MANIFEST.json', # MANIFEST.json is automatically regenerated. + 'OWNERS', # https://crbug.com/584660 https://crbug.com/702283 + 'reftest.list', # https://crbug.com/582838 + ] + return (basename in blacklist + or is_testharness_baseline(basename) + or basename.startswith('.')) + + +def is_file_exportable(path): + """Checks whether a file in Chromium WPT should be exported to upstream. + + Args: + path: A relative path from the root of Chromium repository. + """ + assert path.startswith(CHROMIUM_WPT_DIR) + basename = path[path.rfind('/') + 1:] + return not is_basename_skipped(basename)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common_unittest.py index e2c60371..2d1394ad 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/common_unittest.py
@@ -6,7 +6,13 @@ import unittest from webkitpy.common.host_mock import MockHost -from webkitpy.w3c.common import read_credentials +from webkitpy.w3c.common import ( + read_credentials, + is_testharness_baseline, + is_basename_skipped, + is_file_exportable, + CHROMIUM_WPT_DIR +) class CommonTest(unittest.TestCase): @@ -37,3 +43,38 @@ 'GERRIT_USER': 'user-gerrit', 'GERRIT_TOKEN': 'pass-gerrit', }) + + def test_is_testharness_baseline(self): + self.assertTrue(is_testharness_baseline('fake-test-expected.txt')) + self.assertTrue(is_testharness_baseline('external/wpt/fake-test-expected.txt')) + self.assertTrue(is_testharness_baseline('/tmp/wpt/fake-test-expected.txt')) + self.assertFalse(is_testharness_baseline('fake-test-expected.html')) + self.assertFalse(is_testharness_baseline('external/wpt/fake-test-expected.html')) + + def test_is_basename_skipped(self): + self.assertTrue(is_basename_skipped('MANIFEST.json')) + self.assertTrue(is_basename_skipped('OWNERS')) + self.assertTrue(is_basename_skipped('reftest.list')) + self.assertTrue(is_basename_skipped('.gitignore')) + self.assertFalse(is_basename_skipped('something.json')) + + def test_is_basename_skipped_asserts_basename(self): + with self.assertRaises(AssertionError): + is_basename_skipped('third_party/fake/OWNERS') + + def test_is_file_exportable(self): + self.assertTrue(is_file_exportable(CHROMIUM_WPT_DIR + 'html/fake-test.html')) + self.assertFalse(is_file_exportable(CHROMIUM_WPT_DIR + 'html/fake-test-expected.txt')) + self.assertFalse(is_file_exportable(CHROMIUM_WPT_DIR + 'MANIFEST.json')) + self.assertFalse(is_file_exportable(CHROMIUM_WPT_DIR + 'dom/OWNERS')) + + def test_is_file_exportable_asserts_path(self): + # Rejects basenames. + with self.assertRaises(AssertionError): + is_file_exportable('MANIFEST.json') + # Rejects files not in Chromium WPT. + with self.assertRaises(AssertionError): + is_file_exportable('third_party/fake/OWNERS') + # Rejects absolute paths. + with self.assertRaises(AssertionError): + is_file_exportable('/mock-checkout/third_party/WebKit/LayoutTests/external/wpt/OWNERS')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py index c689821..f947f34 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor.py
@@ -67,9 +67,11 @@ assert not self.filesystem.isabs(start_directory) directory = self.finder.path_from_chromium_base(start_directory) external_root = self.finder.path_from_layout_tests('external') - # Changes to LayoutTests/TestExpectations itself should be skipped and - # not raise an assertion. - if directory == self.finder.layout_tests_dir(): + # Changes to both LayoutTests/TestExpectations and the entire + # LayoutTests/FlagExpectations/ directory should be skipped and not + # raise an assertion. + if directory == self.finder.layout_tests_dir() or \ + directory.startswith(self.finder.path_from_layout_tests('FlagExpectations')): return None, None assert directory.startswith(external_root), '%s must start with %s' % ( directory, external_root)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py index 91911a51..9a580c4 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/directory_owners_extractor_unittest.py
@@ -83,8 +83,12 @@ def test_find_and_extract_owners_out_of_tree(self): with self.assertRaises(AssertionError): self.extractor.find_and_extract_owners('third_party/WebKit/LayoutTests/other') - self.assertEqual(self.extractor.find_and_extract_owners('third_party/WebKit/LayoutTests'), - (None, None)) + self.assertEqual( + self.extractor.find_and_extract_owners('third_party/WebKit/LayoutTests'), + (None, None)) + self.assertEqual( + self.extractor.find_and_extract_owners('third_party/WebKit/LayoutTests/FlagExpectations/foo-bar'), + (None, None)) def test_extract_owners(self): self.filesystem.files = {
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py index 95c320e..b4c6dbd 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/gerrit.py
@@ -5,10 +5,9 @@ import base64 import json import logging -import os import re -from webkitpy.w3c.common import CHROMIUM_WPT_DIR +from webkitpy.w3c.common import CHROMIUM_WPT_DIR, is_file_exportable _log = logging.getLogger(__name__) URL_BASE = 'https://chromium-review.googlesource.com' @@ -133,26 +132,17 @@ if 'NOEXPORT=true' in self.current_revision['commit_with_footers']: return False - files_in_wpt = [f for f in files if f.startswith('third_party/WebKit/LayoutTests/external/wpt')] + files_in_wpt = [f for f in files if f.startswith(CHROMIUM_WPT_DIR)] if not files_in_wpt: return False - exportable_files = [f for f in files_in_wpt if self.exportable_filename(f)] + exportable_files = [f for f in files_in_wpt if is_file_exportable(f)] if not exportable_files: return False return True - def exportable_filename(self, filename): - """Returns True if the file could be exportable, or False otherwise.""" - filename = os.path.basename(filename.lower()) - return ( - not filename.endswith('-expected.txt') - and not filename.startswith('.') - and not filename.endswith('.json') - ) - def get_patch(self): """Gets patch for latest revision of CL. @@ -170,6 +160,7 @@ This method expects a `git diff`-formatted patch. """ filtered_patch = [] + diff_re = re.compile(r'^diff --git a/(.*) b/(.*)$') # Patch begins with message, always applicable. in_exportable_diff = True @@ -182,7 +173,10 @@ continue # File is being changed, detect if it's exportable. - if CHROMIUM_WPT_DIR in line and not line.endswith('-expected.txt'): + match = diff_re.match(line) + assert match, "%s is not an expected git diff header" % line + _, new_file = match.groups() + if CHROMIUM_WPT_DIR in new_file and is_file_exportable(new_file): in_exportable_diff = True filtered_patch.append(line) else:
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py index 2c7f4286..61f7e74 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_copier.py
@@ -32,10 +32,10 @@ """ import logging -import mimetypes from webkitpy.common.path_finder import PathFinder from webkitpy.layout_tests.models.test_expectations import TestExpectationParser +from webkitpy.w3c.common import is_basename_skipped _log = logging.getLogger(__name__) @@ -124,8 +124,7 @@ continue # FIXME: This block should really be a separate function, but the early-continues make that difficult. - if filename == 'OWNERS' or filename == 'reftest.list': - # See http://crbug.com/584660 and http://crbug.com/582838. + if is_basename_skipped(filename): _log.debug('Skipping: %s', path_full) _log.debug(' Reason: This file may cause Chromium presubmit to fail.') continue
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py index 72157867..3d4c362 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py
@@ -69,7 +69,7 @@ 'remote': 'github', 'format-patch': 'fake patch', 'diff': 'fake patch diff', - 'diff-tree': 'fake\n\files\nchanged', + 'diff-tree': 'third_party/WebKit/LayoutTests/external/wpt/some_files', 'crrev-parse': 'c881563d734a86f7d9cd57ac509653a61c45c240', } if args[1] == 'show':
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py index f2362d9..caaede5 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -21,7 +21,7 @@ from webkitpy.layout_tests.models.test_expectations import TestExpectations, TestExpectationParser from webkitpy.layout_tests.port.base import Port from webkitpy.w3c.chromium_exportable_commits import exportable_commits_over_last_n_commits -from webkitpy.w3c.common import read_credentials +from webkitpy.w3c.common import read_credentials, is_testharness_baseline, is_file_exportable from webkitpy.w3c.directory_owners_extractor import DirectoryOwnersExtractor from webkitpy.w3c.local_wpt import LocalWPT from webkitpy.w3c.test_copier import TestCopier @@ -308,11 +308,14 @@ self.run(['git', 'add', manifest_base_path]) def _clear_out_dest_path(self): + """Removes all files that are synced with upstream from Chromium WPT. + + Instead of relying on TestCopier to overwrite these files, cleaning up + first ensures if upstream deletes some files, we also delete them. + """ _log.info('Cleaning out tests from %s.', self.dest_path) should_remove = lambda fs, dirname, basename: ( - not self.is_baseline(basename) and - # See http://crbug.com/702283 for context. - basename != 'OWNERS') + is_file_exportable(fs.relpath(fs.join(dirname, basename), self.finder.chromium_base()))) files_to_delete = self.fs.files_under(self.dest_path, file_filter=should_remove) for subpath in files_to_delete: self.remove(self.finder.path_from_layout_tests('external', subpath)) @@ -338,7 +341,7 @@ def _delete_orphaned_baselines(self): _log.info('Deleting any orphaned baselines.') - is_baseline_filter = lambda fs, dirname, basename: self.is_baseline(basename) + is_baseline_filter = lambda fs, dirname, basename: is_testharness_baseline(basename) baselines = self.fs.files_under(self.dest_path, file_filter=is_baseline_filter) @@ -367,12 +370,6 @@ base = '/' + rel_path.replace('-expected.txt', '') return any((base + ext) in wpt_urls for ext in Port.supported_file_extensions) - @staticmethod - def is_baseline(basename): - # TODO(qyearsley): Find a better, centralized place for this. - # Also, the name for this method should be is_text_baseline. - return basename.endswith('-expected.txt') - def run(self, cmd, exit_on_failure=True, cwd=None, stdin=''): _log.debug('Running command: %s', ' '.join(cmd))
diff --git a/third_party/WebKit/public/BUILD.gn b/third_party/WebKit/public/BUILD.gn index 3b97f5d..dc49b87 100644 --- a/third_party/WebKit/public/BUILD.gn +++ b/third_party/WebKit/public/BUILD.gn
@@ -319,6 +319,7 @@ "platform/WebRenderingStats.h", "platform/WebRuntimeFeatures.h", "platform/WebScreenInfo.h", + "platform/WebScrollBoundaryBehavior.h", "platform/WebScrollbar.h", "platform/WebScrollbarBehavior.h", "platform/WebScrollbarButtonsPlacement.h", @@ -369,6 +370,7 @@ "platform/WebURLRequest.h", "platform/WebURLResponse.h", "platform/WebVector.h", + "platform/WebVideoFrameSubmitter.h", "platform/WebViewportStyle.h", "platform/WebWorkerFetchContext.h", "platform/linux/WebFallbackFont.h",
diff --git a/third_party/WebKit/public/platform/DEPS b/third_party/WebKit/public/platform/DEPS index 601e0a9..764aa49a 100644 --- a/third_party/WebKit/public/platform/DEPS +++ b/third_party/WebKit/public/platform/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+base/callback.h", "+base/callback_forward.h", + "+base/containers/flat_set.h", "+base/location.h", "+base/logging.h", "+base/metrics",
diff --git a/third_party/WebKit/public/platform/WebCORS.h b/third_party/WebKit/public/platform/WebCORS.h index 3c771b0..1619943c 100644 --- a/third_party/WebKit/public/platform/WebCORS.h +++ b/third_party/WebKit/public/platform/WebCORS.h
@@ -28,9 +28,8 @@ #define WebCORS_h #include "platform/loader/fetch/ResourceLoaderOptions.h" -#include "platform/network/HTTPHeaderMap.h" -#include "platform/wtf/HashSet.h" -#include "platform/wtf/text/StringHash.h" +#include "public/platform/WebHTTPHeaderMap.h" +#include "public/platform/WebHTTPHeaderSet.h" #include "public/platform/WebString.h" #include "public/platform/WebURL.h" #include "public/platform/WebURLRequest.h" @@ -42,8 +41,6 @@ namespace WebCORS { -typedef HashSet<String, CaseFoldingHash> HTTPHeaderSet; - // Enumerating the error conditions that the CORS // access control check can report, including success. // @@ -94,7 +91,7 @@ BLINK_PLATFORM_EXPORT AccessStatus CheckAccess(const WebURL, const int response_status_code, - const HTTPHeaderMap&, + const WebHTTPHeaderMap&, WebURLRequest::FetchCredentialsMode, const WebSecurityOrigin&); @@ -119,7 +116,7 @@ // "Access-Control-Allow-External:" header. Shares error conditions with // standard preflight checking. BLINK_PLATFORM_EXPORT PreflightStatus -CheckExternalPreflight(const HTTPHeaderMap&); +CheckExternalPreflight(const WebHTTPHeaderMap&); BLINK_PLATFORM_EXPORT WebURLRequest CreateAccessControlPreflightRequest(const WebURLRequest&); @@ -132,7 +129,7 @@ WebURLRequest&, const WebURL, const int redirect_response_status_code, - const HTTPHeaderMap&, + const WebHTTPHeaderMap&, WebURLRequest::FetchCredentialsMode, ResourceLoaderOptions&, WebString&); @@ -141,13 +138,13 @@ BLINK_PLATFORM_EXPORT WebString AccessControlErrorString(const AccessStatus, const int response_status_code, - const HTTPHeaderMap&, + const WebHTTPHeaderMap&, const WebSecurityOrigin&, const WebURLRequest::RequestContext); BLINK_PLATFORM_EXPORT WebString PreflightErrorString(const PreflightStatus, - const HTTPHeaderMap&, + const WebHTTPHeaderMap&, const int preflight_response_status_code); BLINK_PLATFORM_EXPORT WebString RedirectErrorString(const RedirectStatus, @@ -155,11 +152,11 @@ BLINK_PLATFORM_EXPORT void ParseAccessControlExposeHeadersAllowList( const WebString&, - HTTPHeaderSet&); + WebHTTPHeaderSet&); BLINK_PLATFORM_EXPORT void ExtractCorsExposedHeaderNamesList( const WebURLResponse&, - HTTPHeaderSet&); + WebHTTPHeaderSet&); BLINK_PLATFORM_EXPORT bool IsOnAccessControlResponseHeaderWhitelist( const WebString&); @@ -184,7 +181,7 @@ BLINK_PLATFORM_EXPORT bool IsCORSSafelistedMethod(const WebString&); BLINK_PLATFORM_EXPORT bool ContainsOnlyCORSSafelistedOrForbiddenHeaders( - const HTTPHeaderMap&); + const WebHTTPHeaderMap&); } // namespace WebCORS
diff --git a/third_party/WebKit/public/platform/WebCORSPreflightResultCache.h b/third_party/WebKit/public/platform/WebCORSPreflightResultCache.h index 31fc933..c1b1042 100644 --- a/third_party/WebKit/public/platform/WebCORSPreflightResultCache.h +++ b/third_party/WebKit/public/platform/WebCORSPreflightResultCache.h
@@ -28,11 +28,12 @@ #define WebCORSPreflightResultCache_h #include <memory> +#include <string> +#include "base/containers/flat_set.h" #include "platform/loader/fetch/ResourceLoaderOptions.h" -#include "platform/wtf/HashMap.h" -#include "platform/wtf/HashSet.h" -#include "platform/wtf/ThreadSpecific.h" -#include "platform/wtf/text/WTFString.h" +#include "public/platform/WebHTTPHeaderMap.h" +#include "public/platform/WebHTTPHeaderSet.h" +#include "public/platform/WebNonCopyable.h" #include "public/platform/WebString.h" #include "public/platform/WebURL.h" #include "public/platform/WebURLRequest.h" @@ -40,34 +41,28 @@ namespace blink { -class HTTPHeaderMap; - // Represents an entry of the CORS-preflight cache. // See https://fetch.spec.whatwg.org/#concept-cache. -class BLINK_PLATFORM_EXPORT WebCORSPreflightResultCacheItem { - WTF_MAKE_NONCOPYABLE(WebCORSPreflightResultCacheItem); - USING_FAST_MALLOC(WebCORSPreflightResultCacheItem); - +class BLINK_PLATFORM_EXPORT WebCORSPreflightResultCacheItem + : public WebNonCopyable { public: static std::unique_ptr<WebCORSPreflightResultCacheItem> Create( const WebURLRequest::FetchCredentialsMode, - const HTTPHeaderMap&, + const WebHTTPHeaderMap&, WebString& error_description); bool AllowsCrossOriginMethod(const WebString&, WebString& error_description) const; - bool AllowsCrossOriginHeaders(const HTTPHeaderMap&, + bool AllowsCrossOriginHeaders(const WebHTTPHeaderMap&, WebString& error_description) const; bool AllowsRequest(WebURLRequest::FetchCredentialsMode, const WebString& method, - const HTTPHeaderMap& request_headers) const; + const WebHTTPHeaderMap& request_headers) const; private: - typedef HashSet<String, CaseFoldingHash> HeadersSet; - explicit WebCORSPreflightResultCacheItem(WebURLRequest::FetchCredentialsMode); - bool Parse(const HTTPHeaderMap& response_header, + bool Parse(const WebHTTPHeaderMap& response_header, WebString& error_description); // FIXME: A better solution to holding onto the absolute expiration time might @@ -77,14 +72,12 @@ // Corresponds to the fields of the CORS-preflight cache with the same name. bool credentials_; - HashSet<String> methods_; - HeadersSet headers_; + base::flat_set<std::string> methods_; + WebHTTPHeaderSet headers_; }; -class BLINK_PLATFORM_EXPORT WebCORSPreflightResultCache { - WTF_MAKE_NONCOPYABLE(WebCORSPreflightResultCache); - USING_FAST_MALLOC(WebCORSPreflightResultCache); - +class BLINK_PLATFORM_EXPORT WebCORSPreflightResultCache + : public WebNonCopyable { public: // Returns a WebCORSPreflightResultCache which is shared in the same thread. static WebCORSPreflightResultCache& Shared(); @@ -96,14 +89,12 @@ const WebURL&, WebURLRequest::FetchCredentialsMode, const WebString& method, - const HTTPHeaderMap& request_headers); - - protected: - friend class WTF::ThreadSpecific<WebCORSPreflightResultCache>; - - // Protected for tests: + const WebHTTPHeaderMap& request_headers); WebCORSPreflightResultCache() {} + ~WebCORSPreflightResultCache(); + + protected: typedef std::map< std::string, std::map<std::string, std::unique_ptr<WebCORSPreflightResultCacheItem>>>
diff --git a/third_party/WebKit/public/platform/WebHTTPHeaderMap.h b/third_party/WebKit/public/platform/WebHTTPHeaderMap.h new file mode 100644 index 0000000..97d1ca76 --- /dev/null +++ b/third_party/WebKit/public/platform/WebHTTPHeaderMap.h
@@ -0,0 +1,44 @@ +// 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 WebHTTPHeaderMap_h +#define WebHTTPHeaderMap_h + +#include <memory> +#include "net/http/http_request_headers.h" +#include "net/http/http_response_headers.h" +#include "public/platform/WebString.h" + +#if INSIDE_BLINK +#include "platform/network/HTTPHeaderMap.h" +#endif + +namespace blink { + +// A HTTP header map that takes net:: types but internally stores them in +// blink::HTTPHeaderMap. Therefore, not every header fits into this map. +// Notably, multiple Set-Cookie header fields are needed to set multiple cookies +class BLINK_PLATFORM_EXPORT WebHTTPHeaderMap { + public: + ~WebHTTPHeaderMap(); + + WebString Get(const WebString& name) const; + + explicit WebHTTPHeaderMap(const net::HttpRequestHeaders*); + explicit WebHTTPHeaderMap(const net::HttpResponseHeaders*); + +#if INSIDE_BLINK + WebHTTPHeaderMap(const HTTPHeaderMap&); + const HTTPHeaderMap& GetHTTPHeaderMap() const; +#endif + + private: + class WebHTTPHeaderMapImpl; + + std::unique_ptr<WebHTTPHeaderMapImpl> implementation_; +}; + +} // namespace blink + +#endif // WebHTTPHeaderMap_h
diff --git a/third_party/WebKit/public/platform/WebHTTPHeaderSet.h b/third_party/WebKit/public/platform/WebHTTPHeaderSet.h new file mode 100644 index 0000000..c80fe4a --- /dev/null +++ b/third_party/WebKit/public/platform/WebHTTPHeaderSet.h
@@ -0,0 +1,24 @@ +// 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 WebHTTPHeaderSet_h +#define WebHTTPHeaderSet_h + +#include <set> +#include <string> +#include "base/strings/string_util.h" + +namespace blink { + +struct CompareIgnoreCase { + bool operator()(const std::string& left, const std::string& right) const { + return base::CompareCaseInsensitiveASCII(left, right) < 0; + } +}; + +using WebHTTPHeaderSet = std::set<std::string, CompareIgnoreCase>; + +} // namespace blink + +#endif // WebHTTPHeaderSet_h
diff --git a/third_party/WebKit/public/platform/WebLayerTreeView.h b/third_party/WebKit/public/platform/WebLayerTreeView.h index a341f0e..ef41701 100644 --- a/third_party/WebKit/public/platform/WebLayerTreeView.h +++ b/third_party/WebKit/public/platform/WebLayerTreeView.h
@@ -33,6 +33,7 @@ #include "WebEventListenerProperties.h" #include "WebFloatPoint.h" #include "WebImageLayer.h" +#include "WebScrollBoundaryBehavior.h" #include "WebSize.h" #include "base/callback.h" #include "cc/output/swap_promise.h" @@ -135,6 +136,10 @@ float bottom_height, bool shrink_viewport) {} + // Set the browser's behavior when overscroll happens, e.g. whether to glow + // or navigate. + virtual void SetScrollBoundaryBehavior(const WebScrollBoundaryBehavior&) {} + // Flow control and scheduling --------------------------------------- // Indicates that blink needs a BeginFrame, but that nothing might actually be
diff --git a/third_party/WebKit/public/platform/WebMediaStream.h b/third_party/WebKit/public/platform/WebMediaStream.h index d27171c..a8b6943 100644 --- a/third_party/WebKit/public/platform/WebMediaStream.h +++ b/third_party/WebKit/public/platform/WebMediaStream.h
@@ -72,6 +72,7 @@ bool IsNull() const { return private_.IsNull(); } BLINK_PLATFORM_EXPORT WebString Id() const; + BLINK_PLATFORM_EXPORT int UniqueId() const; BLINK_PLATFORM_EXPORT void AudioTracks(WebVector<WebMediaStreamTrack>&) const; BLINK_PLATFORM_EXPORT void VideoTracks(WebVector<WebMediaStreamTrack>&) const;
diff --git a/third_party/WebKit/public/platform/WebMediaStreamTrack.h b/third_party/WebKit/public/platform/WebMediaStreamTrack.h index 4ec56c7..31b66d9 100644 --- a/third_party/WebKit/public/platform/WebMediaStreamTrack.h +++ b/third_party/WebKit/public/platform/WebMediaStreamTrack.h
@@ -107,6 +107,7 @@ bool IsNull() const { return private_.IsNull(); } BLINK_PLATFORM_EXPORT WebString Id() const; + BLINK_PLATFORM_EXPORT int UniqueId() const; BLINK_PLATFORM_EXPORT WebMediaStreamSource Source() const; BLINK_PLATFORM_EXPORT bool IsEnabled() const;
diff --git a/third_party/WebKit/public/platform/WebRuntimeFeatures.h b/third_party/WebKit/public/platform/WebRuntimeFeatures.h index aac83b5..340e05b 100644 --- a/third_party/WebKit/public/platform/WebRuntimeFeatures.h +++ b/third_party/WebKit/public/platform/WebRuntimeFeatures.h
@@ -78,6 +78,7 @@ BLINK_PLATFORM_EXPORT static void EnableCanvas2dImageChromium(bool); BLINK_PLATFORM_EXPORT static void EnableColorCorrectRendering(bool); BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool); + BLINK_PLATFORM_EXPORT static void EnableScrollTopLeftInterop(bool); BLINK_PLATFORM_EXPORT static void EnableDatabase(bool); BLINK_PLATFORM_EXPORT static void EnableDecodeToYUV(bool); BLINK_PLATFORM_EXPORT static void EnableExperimentalCanvasFeatures(bool);
diff --git a/third_party/WebKit/public/platform/WebSurfaceLayerBridge.h b/third_party/WebKit/public/platform/WebSurfaceLayerBridge.h index ad43df7..9968e47b 100644 --- a/third_party/WebKit/public/platform/WebSurfaceLayerBridge.h +++ b/third_party/WebKit/public/platform/WebSurfaceLayerBridge.h
@@ -7,15 +7,29 @@ #include "WebCommon.h" #include "WebLayer.h" +#include "WebLayerTreeView.h" + +namespace viz { +class FrameSinkId; +} namespace blink { +// Listens for updates made on the WebLayer by the WebSurfaceLayerBridge. +class BLINK_PLATFORM_EXPORT WebSurfaceLayerBridgeObserver { + public: + virtual void OnWebLayerReplaced() = 0; +}; + // Maintains and exposes the SurfaceLayer. class BLINK_PLATFORM_EXPORT WebSurfaceLayerBridge { public: - static WebSurfaceLayerBridge* Create(); + static std::unique_ptr<WebSurfaceLayerBridge> Create( + WebLayerTreeView*, + WebSurfaceLayerBridgeObserver*); virtual ~WebSurfaceLayerBridge(); virtual WebLayer* GetWebLayer() const = 0; + virtual const viz::FrameSinkId& GetFrameSinkId() const = 0; }; } // namespace blink
diff --git a/third_party/WebKit/public/platform/WebVideoFrameSubmitter.h b/third_party/WebKit/public/platform/WebVideoFrameSubmitter.h new file mode 100644 index 0000000..065afe69 --- /dev/null +++ b/third_party/WebKit/public/platform/WebVideoFrameSubmitter.h
@@ -0,0 +1,30 @@ +// 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 WebVideoFrameSubmitter_h +#define WebVideoFrameSubmitter_h + +#include "WebCommon.h" +#include "cc/layers/video_frame_provider.h" + +namespace viz { +class FrameSinkId; +} // namespace viz + +namespace blink { + +// Exposes the VideoFrameSubmitter, which submits CompositorFrames containing +// information from VideoFrames. +class BLINK_PLATFORM_EXPORT WebVideoFrameSubmitter + : public cc::VideoFrameProvider::Client { + public: + static std::unique_ptr<WebVideoFrameSubmitter> Create( + cc::VideoFrameProvider*); + virtual ~WebVideoFrameSubmitter() = default; + virtual void StartSubmitting(const viz::FrameSinkId&) = 0; +}; + +} // namespace blink + +#endif // WebVideoFrameSubmitter_h
diff --git a/third_party/WebKit/public/platform/web_feature.mojom b/third_party/WebKit/public/platform/web_feature.mojom index 2e188c71..56258478 100644 --- a/third_party/WebKit/public/platform/web_feature.mojom +++ b/third_party/WebKit/public/platform/web_feature.mojom
@@ -1654,6 +1654,29 @@ kV8LabeledExpressionStatement = 2119, kPaymentRequestSupportedMethodsArray = 2120, kNavigatorDeviceMemory = 2121, + kFixedWidthTableDistributionChanged = 2122, + kWebkitBoxLayout = 2123, + kWebkitBoxLayoutHorizontal = 2124, + kWebkitBoxLayoutVertical = 2125, + kWebkitBoxAlignNotInitial = 2126, + kWebkitBoxDirectionNotInitial = 2127, + kWebkitBoxLinesNotInitial = 2128, + kWebkitBoxPackNotInitial = 2129, + kWebkitBoxChildFlexNotInitial = 2130, + kWebkitBoxChildFlexGroupNotInitial = 2131, + kWebkitBoxChildOrdinalGroupNotInitial = 2132, + kWebkitBoxNotDefaultOrder = 2133, + kWebkitBoxNoChildren = 2134, + kWebkitBoxOneChild = 2135, + kWebkitBoxOneChildIsLayoutBlockFlowInline = 2136, + kWebkitBoxManyChildren = 2137, + kWebkitBoxLineClamp = 2138, + kWebkitBoxLineClampPercentage = 2139, + kWebkitBoxLineClampNoChildren = 2140, + kWebkitBoxLineClampOneChild = 2141, + kWebkitBoxLineClampOneChildIsLayoutBlockFlowInline = 2142, + kWebkitBoxLineClampManyChildren = 2143, + kWebkitBoxLineClampDoesSomething = 2144, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/WebKit/public/web/WebAXObject.h b/third_party/WebKit/public/web/WebAXObject.h index b139f443..b796e87 100644 --- a/third_party/WebKit/public/web/WebAXObject.h +++ b/third_party/WebKit/public/web/WebAXObject.h
@@ -153,6 +153,10 @@ BLINK_EXPORT WebString AccessKey() const; BLINK_EXPORT unsigned BackgroundColor() const; + BLINK_EXPORT bool CanPress() const; + BLINK_EXPORT bool CanSetValueAttribute() const; + BLINK_EXPORT bool CanSetFocusAttribute() const; + BLINK_EXPORT bool CanSetSelectedAttribute() const; BLINK_EXPORT unsigned GetColor() const; // Deprecated. BLINK_EXPORT void ColorValue(int& r, int& g, int& b) const; @@ -218,10 +222,6 @@ WebAXObject& focus_object, int& focus_offset, WebAXTextAffinity& focus_affinity) const; - BLINK_EXPORT void SetSelection(const WebAXObject& anchor_object, - int anchor_offset, - const WebAXObject& focus_object, - int focus_offset) const; // The following selection functions return text offsets calculated starting // the current object. They only report on a selection that is placed on @@ -262,24 +262,29 @@ WebVector<int>& starts, WebVector<int>& ends) const; - // Actions + // Actions. Return true if handled. BLINK_EXPORT WebAXDefaultActionVerb Action() const; - BLINK_EXPORT bool CanDecrement() const; - BLINK_EXPORT bool CanIncrement() const; - BLINK_EXPORT bool CanPress() const; - BLINK_EXPORT bool CanSetValueAttribute() const; - BLINK_EXPORT bool CanSetFocusAttribute() const; - BLINK_EXPORT bool CanSetSelectedAttribute() const; - BLINK_EXPORT bool PerformDefaultAction() const; - BLINK_EXPORT bool Press() const; - BLINK_EXPORT bool Increment() const; + BLINK_EXPORT bool Click() const; BLINK_EXPORT bool Decrement() const; - BLINK_EXPORT void SetFocused(bool) const; - BLINK_EXPORT void SetSelectedTextRange(int selection_start, - int selection_end) const; - BLINK_EXPORT void SetSequentialFocusNavigationStartingPoint() const; - BLINK_EXPORT void SetValue(WebString) const; - BLINK_EXPORT void ShowContextMenu() const; + BLINK_EXPORT bool Increment() const; + BLINK_EXPORT bool Focus() const; + BLINK_EXPORT bool SetSelected(bool) const; + BLINK_EXPORT bool SetSelection(const WebAXObject& anchor_object, + int anchor_offset, + const WebAXObject& focus_object, + int focus_offset) const; + BLINK_EXPORT bool SetSequentialFocusNavigationStartingPoint() const; + BLINK_EXPORT bool SetValue(WebString) const; + BLINK_EXPORT bool ShowContextMenu() const; + // Make this object visible by scrolling as many nested scrollable views as + // needed. + BLINK_EXPORT bool ScrollToMakeVisible() const; + // Same, but if the whole object can't be made visible, try for this subrect, + // in local coordinates. + BLINK_EXPORT bool ScrollToMakeVisibleWithSubFocus(const WebRect&) const; + // Scroll this object to a given point in global coordinates of the top-level + // window. + BLINK_EXPORT bool ScrollToGlobalPoint(const WebPoint&) const; // For a table BLINK_EXPORT int AriaColumnCount() const; @@ -344,16 +349,6 @@ WebFloatRect& bounds_in_container, SkMatrix44& container_transform) const; - // Make this object visible by scrolling as many nested scrollable views as - // needed. - BLINK_EXPORT void ScrollToMakeVisible() const; - // Same, but if the whole object can't be made visible, try for this subrect, - // in local coordinates. - BLINK_EXPORT void ScrollToMakeVisibleWithSubFocus(const WebRect&) const; - // Scroll this object to a given point in global coordinates of the top-level - // window. - BLINK_EXPORT void ScrollToGlobalPoint(const WebPoint&) const; - #if INSIDE_BLINK BLINK_EXPORT WebAXObject(AXObject*); WebAXObject& operator=(AXObject*);
diff --git a/third_party/WebKit/public/web/WebFrameClient.h b/third_party/WebKit/public/web/WebFrameClient.h index e358512..6611674 100644 --- a/third_party/WebKit/public/web/WebFrameClient.h +++ b/third_party/WebKit/public/web/WebFrameClient.h
@@ -101,6 +101,7 @@ class WebExternalPopupMenu; class WebExternalPopupMenuClient; class WebFileChooserCompletion; +class WebLayerTreeView; class WebLocalFrame; class WebMediaPlayer; class WebMediaPlayerClient; @@ -147,7 +148,8 @@ WebMediaPlayerClient*, WebMediaPlayerEncryptedMediaClient*, WebContentDecryptionModule*, - const WebString& sink_id) { + const WebString& sink_id, + WebLayerTreeView*) { return nullptr; }
diff --git a/third_party/WebKit/public/web/WebFrameWidget.h b/third_party/WebKit/public/web/WebFrameWidget.h index 72f54ea..dd89ec67 100644 --- a/third_party/WebKit/public/web/WebFrameWidget.h +++ b/third_party/WebKit/public/web/WebFrameWidget.h
@@ -42,6 +42,7 @@ class WebLocalFrame; class WebInputMethodController; class WebWidgetClient; +struct WebActiveWheelFlingParameters; class WebFrameWidget : public WebWidget { public: @@ -121,6 +122,12 @@ // Sets the inert bit on an out-of-process iframe, causing it to ignore // input. virtual void SetIsInert(bool) {} + + // Called to inform the WebFrameWidget that a wheel fling animation was + // started externally (for instance by the compositor) but must be completed + // by the WebFrameWidget. + virtual void TransferActiveWheelFlingAnimation( + const WebActiveWheelFlingParameters&) = 0; }; } // namespace blink
diff --git a/third_party/WebKit/public/web/WebView.h b/third_party/WebKit/public/web/WebView.h index 4d9a94f7..729c1ce 100644 --- a/third_party/WebKit/public/web/WebView.h +++ b/third_party/WebKit/public/web/WebView.h
@@ -57,7 +57,6 @@ class WebString; class WebViewClient; class WebViewScheduler; -struct WebActiveWheelFlingParameters; struct WebDeviceEmulationParams; struct WebFloatPoint; struct WebMediaPlayerAction; @@ -412,18 +411,6 @@ BLINK_EXPORT static void WillEnterModalLoop(); BLINK_EXPORT static void DidExitModalLoop(); - // Called to inform the WebView that a wheel fling animation was started - // externally (for instance by the compositor) but must be completed by the - // WebView. - virtual void TransferActiveWheelFlingAnimation( - const WebActiveWheelFlingParameters&) = 0; - - // Cancels an active fling, returning true if a fling was active. - virtual bool EndActiveFlingAnimation() = 0; - - // Returns true if there's an active fling animation. - virtual bool IsFlinging() const = 0; - virtual void SetShowPaintRects(bool) = 0; virtual void SetShowFPSCounter(bool) = 0; virtual void SetShowScrollBottleneckRects(bool) = 0;
diff --git a/third_party/WebKit/public/web/WebViewClient.h b/third_party/WebKit/public/web/WebViewClient.h index b29e0954..a838716 100644 --- a/third_party/WebKit/public/web/WebViewClient.h +++ b/third_party/WebKit/public/web/WebViewClient.h
@@ -243,7 +243,8 @@ void DidOverscroll(const WebFloatSize& overscroll_delta, const WebFloatSize& accumulated_overscroll, const WebFloatPoint& position_in_viewport, - const WebFloatSize& velocity_in_viewport) override {} + const WebFloatSize& velocity_in_viewport, + const WebScrollBoundaryBehavior& behavior) override {} void HasTouchEventHandlers(bool) override {} WebLayerTreeView* InitializeLayerTreeView() override { return nullptr; } WebScreenInfo GetScreenInfo() override { return WebScreenInfo(); }
diff --git a/third_party/WebKit/public/web/WebWidget.h b/third_party/WebKit/public/web/WebWidget.h index bf139ef3..ef6b948d 100644 --- a/third_party/WebKit/public/web/WebWidget.h +++ b/third_party/WebKit/public/web/WebWidget.h
@@ -171,6 +171,9 @@ // Changes the text direction of the selected input node. virtual void SetTextDirection(WebTextDirection) {} + // Returns true if the WebWidget is currently animating a GestureFling. + virtual bool IsFlinging() const { return false; } + // Returns true if the WebWidget uses GPU accelerated compositing // to render its contents. virtual bool IsAcceleratedCompositingActive() const { return false; }
diff --git a/third_party/WebKit/public/web/WebWidgetClient.h b/third_party/WebKit/public/web/WebWidgetClient.h index 9b75e83..81e3e8dd 100644 --- a/third_party/WebKit/public/web/WebWidgetClient.h +++ b/third_party/WebKit/public/web/WebWidgetClient.h
@@ -136,7 +136,8 @@ virtual void DidOverscroll(const WebFloatSize& overscroll_delta, const WebFloatSize& accumulated_overscroll, const WebFloatPoint& position_in_viewport, - const WebFloatSize& velocity_in_viewport) {} + const WebFloatSize& velocity_in_viewport, + const WebScrollBoundaryBehavior& behavior) {} // Called to update if touch events should be sent. virtual void HasTouchEventHandlers(bool) {}
diff --git a/third_party/blink/tools/blinkpy/__init__.py b/third_party/blink/tools/blinkpy/__init__.py new file mode 100644 index 0000000..a22a6ee --- /dev/null +++ b/third_party/blink/tools/blinkpy/__init__.py
@@ -0,0 +1,3 @@ +# 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.
diff --git a/third_party/blink/tools/blinkpy/common/__init__.py b/third_party/blink/tools/blinkpy/common/__init__.py new file mode 100644 index 0000000..a22a6ee --- /dev/null +++ b/third_party/blink/tools/blinkpy/common/__init__.py
@@ -0,0 +1,3 @@ +# 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.
diff --git a/third_party/blink/tools/blinkpy/common/camel_to_snake.py b/third_party/blink/tools/blinkpy/common/camel_to_snake.py new file mode 100644 index 0000000..5f8cc4d --- /dev/null +++ b/third_party/blink/tools/blinkpy/common/camel_to_snake.py
@@ -0,0 +1,41 @@ +# 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 re + + +def convert(name): + special_cases = [ + ('CSS', 'Css'), + ('Context2D', 'Context_2d'), + ('DList', 'Dlist'), + ('ETC1', 'Etc1'), + ('IFrame', 'Iframe'), + ('OList', 'Olist'), + ('OnLine', 'Online'), + ('Path2D', 'Path_2d'), + ('Point2D', 'Point_2d'), + ('RTCDTMF', 'Rtc_dtmf'), + ('S3TC', 'S3tc'), + ('UList', 'Ulist'), + ('XPath', 'Xpath'), + ('sRGB', 'Srgb'), + + ('SVGFE', 'Svg_fe'), + ('SVGMPath', 'Svg_mpath'), + ('SVGTSpan', 'Svg_tspan'), + ('SVG', 'Svg'), + + ('XHTML', 'Xhtml'), + ('HTML', 'Html'), + + ('WebGL2', 'Webgl2'), + ('WebGL', 'Webgl'), + ] + for old, new in special_cases: + name = re.sub(old, new, name) + + name = re.sub(r'([A-Z][A-Z0-9]*)([A-Z][a-z0-9])', r'\1_\2', name) + name = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', name) + return name.lower()
diff --git a/third_party/blink/tools/blinkpy/common/camel_to_snake_unittest.py b/third_party/blink/tools/blinkpy/common/camel_to_snake_unittest.py new file mode 100644 index 0000000..ae66430 --- /dev/null +++ b/third_party/blink/tools/blinkpy/common/camel_to_snake_unittest.py
@@ -0,0 +1,27 @@ +# 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 unittest + +from blinkpy.common.camel_to_snake import convert + + +class TestCamelToSnake(unittest.TestCase): + + def test_convert(self): + self.assertEqual(convert('Animation.idl'), 'animation.idl') + self.assertEqual(convert('CSS.idl'), 'css.idl') + self.assertEqual(convert('CSSURLImageValue'), 'css_url_image_value') + self.assertEqual(convert('CDATASection'), 'cdata_section') + self.assertEqual(convert('NavigatorOnLine'), 'navigator_online') + self.assertEqual(convert('HTMLDListElement'), 'html_dlist_element') + self.assertEqual(convert('HTMLIFrameElement'), 'html_iframe_element') + self.assertEqual(convert('HTMLOptGroupElement'), 'html_opt_group_element') + self.assertEqual(convert('HTMLFieldSetElement'), 'html_field_set_element') + self.assertEqual(convert('HTMLTextAreaElement'), 'html_text_area_element') + self.assertEqual(convert('SVGFEBlendElement'), 'svg_fe_blend_element') + self.assertEqual(convert('SVGURIReference'), 'svg_uri_reference') + self.assertEqual(convert('XPathEvaluator'), 'xpath_evaluator') + self.assertEqual(convert('UTF16TextIterator'), 'utf16_text_iterator') + self.assertEqual(convert('WebGLCompressedTextureETC1.idl'), 'webgl_compressed_texture_etc1.idl')
diff --git a/third_party/blink/tools/compile_devtools_frontend.py b/third_party/blink/tools/compile_devtools_frontend.py new file mode 100755 index 0000000..7c6f8dea --- /dev/null +++ b/third_party/blink/tools/compile_devtools_frontend.py
@@ -0,0 +1,20 @@ +#!/usr/bin/env vpython +# 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. + +"""Compile DevTools frontend code with Closure compiler. + +This script wraps devtools/scripts/compile_frontend.py. +DevTools bot kicks this script. +""" + +import os +import sys + +sys.path.append(os.path.join( + os.path.dirname(__file__), '..', '..', 'WebKit', 'Source', 'devtools', 'scripts')) +import compile_frontend + +if __name__ == '__main__': + sys.exit(compile_frontend.main())
diff --git a/third_party/crc32c/BUILD.gn b/third_party/crc32c/BUILD.gn new file mode 100644 index 0000000..76283087 --- /dev/null +++ b/third_party/crc32c/BUILD.gn
@@ -0,0 +1,110 @@ +# 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("//build/config/features.gni") +import("//testing/test.gni") + +# Only applied to CRC32C source and tests. (not exported) +config("crc32c_config") { + include_dirs = [ + "config", + "src/include", + ] + + defines = [] + + # If we ever support big-endian builds, add logic to conditionally enable + # BYTE_ORDER_BIG_ENDIAN. + + if (target_cpu == "x86" || target_cpu == "x64") { + defines += [ + "HAVE_MM_PREFETCH=1", + "HAVE_SSE42=1", + ] + } + if (is_clang || !is_win) { + defines += [ "HAVE_BUILTIN_PREFETCH=1" ] + } + + if (current_cpu == "arm64") { + defines += [ "HAVE_ARM64_CRC32C=1" ] + } + + if (is_linux || is_chromeos) { + defines += [ "HAVE_STRONG_GETAUXVAL=1" ] + } else if (is_android) { + # Android added <sys/auxv.h> in API level 20. + defines += [ "HAVE_WEAK_GETAUXVAL=1" ] + } +} + +source_set("crc32c") { + sources = [ + "config/crc32c/crc32c_config.h", + "src/include/crc32c/crc32c.h", + "src/src/crc32c.cc", + "src/src/crc32c_arm_linux_check.h", + "src/src/crc32c_internal.h", + "src/src/crc32c_portable.cc", + "src/src/crc32c_prefetch.h", + "src/src/crc32c_read_le.h", + "src/src/crc32c_round_up.h", + "src/src/crc32c_sse42_check.h", + ] + + configs += [ ":crc32c_config" ] + deps = [ + ":crc32c_arm64", + ":crc32c_sse42", + ] +} + +source_set("crc32c_sse42") { + sources = [ + "config/crc32c/crc32c_config.h", + "src/src/crc32c_sse42.cc", + "src/src/crc32c_sse42.h", + ] + + configs += [ ":crc32c_config" ] + if (target_cpu == "x86" || target_cpu == "x64") { + if (is_win && !is_clang) { + cflags = [ "/arch:AVX" ] + } else { + cflags = [ "-msse4.2" ] + } + } +} + +source_set("crc32c_arm64") { + sources = [ + "config/crc32c/crc32c_config.h", + "src/src/crc32c_arm64.cc", + "src/src/crc32c_arm64.h", + ] + + configs += [ ":crc32c_config" ] + if (current_cpu == "arm64") { + cflags = [ "-march=armv8-a+crc+crypto" ] + } +} + +test("crc32c_tests") { + sources = [ + "src/src/crc32c_arm64_unittest.cc", + "src/src/crc32c_extend_unittests.h", + "src/src/crc32c_portable_unittest.cc", + "src/src/crc32c_prefetch_unittest.cc", + "src/src/crc32c_read_le_unittest.cc", + "src/src/crc32c_round_up_unittest.cc", + "src/src/crc32c_sse42_unittest.cc", + "src/src/crc32c_unittest.cc", + ] + + configs += [ ":crc32c_config" ] + deps = [ + ":crc32c", + "//testing/gtest:gtest_main", + ] +}
diff --git a/third_party/crc32c/OWNERS b/third_party/crc32c/OWNERS new file mode 100644 index 0000000..80cd612 --- /dev/null +++ b/third_party/crc32c/OWNERS
@@ -0,0 +1,9 @@ +# Primary for bugs, reviews: +pwnall@chromium.org + +# Secondary: +cmumford@chromium.org +jsbell@chromium.org + +# TEAM: storage-dev@chromium.org +# COMPONENT: Blink>Storage
diff --git a/third_party/crc32c/README.chromium b/third_party/crc32c/README.chromium new file mode 100644 index 0000000..4adb768a --- /dev/null +++ b/third_party/crc32c/README.chromium
@@ -0,0 +1,16 @@ +Name: CRC32C +Short Name: crc32c +URL: https://github.com/google/crc32c +Version: 1.0.1 +License: New BSD +License File: src/LICENSE +Security Critical: yes + +Description: +CRC32C implementation with support for CPU-specific acceleration instructions + +Local Additions: +* gn file for building in chromium +* Manually generated config/{android,mac,linux,win32,win64}/crc32c_config.h + * Used the build commands in the README + * Picked up the output in include/crc32c/crc32c_config.h
diff --git a/third_party/crc32c/config/crc32c/crc32c_config.h b/third_party/crc32c/config/crc32c/crc32c_config.h new file mode 100644 index 0000000..3589fa6 --- /dev/null +++ b/third_party/crc32c/config/crc32c/crc32c_config.h
@@ -0,0 +1,6 @@ +// 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. + +// This is a stub. The preprocessor macros that are usually defined here are +// supplied by BUILD.gn instead.
diff --git a/third_party/leveldatabase/BUILD.gn b/third_party/leveldatabase/BUILD.gn index a0701f2..f01769cb 100644 --- a/third_party/leveldatabase/BUILD.gn +++ b/third_party/leveldatabase/BUILD.gn
@@ -14,21 +14,6 @@ ] } -source_set("leveldatabase_opts.sse42") { - sources = [ - "src/port/port_posix_sse.cc", - ] - - configs += [ ":leveldatabase_config" ] - - if (target_cpu == "x86" || target_cpu == "x64") { - defines += [ "LEVELDB_PLATFORM_POSIX_SSE" ] - if (!is_win || is_clang) { - cflags = [ "-msse4.2" ] - } - } -} - static_library("leveldatabase") { sources = [ "env_chromium.cc", @@ -123,8 +108,8 @@ public_configs = [ ":leveldatabase_config" ] deps = [ - ":leveldatabase_opts.sse42", "//base", + "//third_party/crc32c", "//third_party/re2", "//third_party/snappy", ]
diff --git a/third_party/leveldatabase/README.chromium b/third_party/leveldatabase/README.chromium index f493039..6456d606 100644 --- a/third_party/leveldatabase/README.chromium +++ b/third_party/leveldatabase/README.chromium
@@ -25,4 +25,4 @@ * TRACE macros/thread name for chrome://tracing diagnostics * Handle in-process exclusive file locks, based on src/util/env_posix.cc * Unit tests for the Chromium environment. -* db_bench is built as leveldb_bench in Chromium. +* db_bench is built as leveldb_db_bench in Chromium.
diff --git a/third_party/leveldatabase/port/port_chromium.cc b/third_party/leveldatabase/port/port_chromium.cc index 2bf8c30..858a4e38 100644 --- a/third_party/leveldatabase/port/port_chromium.cc +++ b/third_party/leveldatabase/port/port_chromium.cc
@@ -4,7 +4,10 @@ #include "port/port_chromium.h" +#include <string> + #include "base/threading/platform_thread.h" +#include "third_party/crc32c/src/include/crc32c/crc32c.h" #include "third_party/snappy/src/snappy.h" #include "util/logging.h" @@ -90,5 +93,9 @@ return snappy::RawUncompress(input_data, input_length, output); } +uint32_t AcceleratedCRC32C(uint32_t crc, const char* buf, size_t size) { + return crc32c::Extend(crc, reinterpret_cast<const uint8_t*>(buf), size); +} + } // namespace port } // namespace leveldb
diff --git a/third_party/leveldatabase/port/port_chromium.h b/third_party/leveldatabase/port/port_chromium.h index 3dc2d98..11a0bc5 100644 --- a/third_party/leveldatabase/port/port_chromium.h +++ b/third_party/leveldatabase/port/port_chromium.h
@@ -115,7 +115,6 @@ return false; } -// Implemented in leveldb's src/port/port_posix_sse.cc. uint32_t AcceleratedCRC32C(uint32_t crc, const char* buf, size_t size); } // namespace port
diff --git a/third_party/libFuzzer/BUILD.gn b/third_party/libFuzzer/BUILD.gn index 8d08d1a3..8b86c4a 100644 --- a/third_party/libFuzzer/BUILD.gn +++ b/third_party/libFuzzer/BUILD.gn
@@ -8,6 +8,7 @@ configs += [ "//build/config/sanitizers:default_sanitizer_flags_but_coverage" ] sources = [ + "src/FuzzerClangCounters.cpp", "src/FuzzerCrossOver.cpp", "src/FuzzerDriver.cpp", "src/FuzzerExtFunctionsDlsym.cpp",
diff --git a/third_party/netty4/BUILD.gn b/third_party/netty4/BUILD.gn index ac337d9..379e02c 100644 --- a/third_party/netty4/BUILD.gn +++ b/third_party/netty4/BUILD.gn
@@ -8,5 +8,6 @@ import("netty4.gni") android_java_prebuilt("netty_all_java") { + testonly = true jar_path = NETTY4_JAR_FILE }
diff --git a/third_party/webrtc_overrides/webrtc/base/logging.cc b/third_party/webrtc_overrides/webrtc/base/logging.cc deleted file mode 100644 index cae52041..0000000 --- a/third_party/webrtc_overrides/webrtc/base/logging.cc +++ /dev/null
@@ -1,374 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// NOTE: -// Since this file includes Chromium headers, it must not include -// third_party/webrtc/rtc_base/logging.h since it defines some of the same macros as -// Chromium does and we'll run into conflicts. - -#if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) -#include <CoreServices/CoreServices.h> -#endif // OS_MACOSX - -#include <algorithm> -#include <iomanip> - -#include "base/atomicops.h" -#include "base/logging.h" -#include "base/strings/string_util.h" -#include "base/threading/platform_thread.h" -#include "third_party/webrtc/rtc_base/stringencode.h" -#include "third_party/webrtc/rtc_base/stringutils.h" - -// This needs to be included after base/logging.h. -#include "third_party/webrtc_overrides/webrtc/rtc_base/diagnostic_logging.h" -#include "third_party/webrtc_overrides/webrtc/rtc_base/logging.h" - -#if defined(WEBRTC_MAC) -#include "base/mac/mac_logging.h" -#endif - -// Disable logging when fuzzing, for performance reasons. -// WEBRTC_UNSAFE_FUZZER_MODE is defined by WebRTC's BUILD.gn when -// built with use_libfuzzer or use_drfuzz. -#if defined(WEBRTC_UNSAFE_FUZZER_MODE) -#define WEBRTC_ENABLE_LOGGING false -#else -#define WEBRTC_ENABLE_LOGGING true -#endif - -// From this file we can't use VLOG since it expands into usage of the __FILE__ -// macro (for correct filtering). The actual logging call from DIAGNOSTIC_LOG in -// ~DiagnosticLogMessage. Note that the second parameter to the LAZY_STREAM -// macro is not used since the filter check has already been done for -// DIAGNOSTIC_LOG. -#define LOG_LAZY_STREAM_DIRECT(file_name, line_number, sev) \ - LAZY_STREAM(logging::LogMessage(file_name, line_number, sev).stream(), \ - WEBRTC_ENABLE_LOGGING) - -namespace rtc { - -void (*g_logging_delegate_function)(const std::string&) = NULL; -void (*g_extra_logging_init_function)( - void (*logging_delegate_function)(const std::string&)) = NULL; -#ifndef NDEBUG -static_assert(sizeof(base::subtle::Atomic32) == sizeof(base::PlatformThreadId), - "Atomic32 not same size as PlatformThreadId"); -base::subtle::Atomic32 g_init_logging_delegate_thread_id = 0; -#endif - -///////////////////////////////////////////////////////////////////////////// -// Constant Labels -///////////////////////////////////////////////////////////////////////////// - -const char* FindLabel(int value, const ConstantLabel entries[]) { - for (int i = 0; entries[i].label; ++i) { - if (value == entries[i].value) return entries[i].label; - } - return 0; -} - -std::string ErrorName(int err, const ConstantLabel* err_table) { - if (err == 0) - return "No error"; - - if (err_table != 0) { - if (const char * value = FindLabel(err, err_table)) - return value; - } - - char buffer[16]; - base::snprintf(buffer, sizeof(buffer), "0x%08x", err); - return buffer; -} - -///////////////////////////////////////////////////////////////////////////// -// Log helper functions -///////////////////////////////////////////////////////////////////////////// - -inline int WebRtcSevToChromeSev(LoggingSeverity sev) { - switch (sev) { - case LS_ERROR: - return ::logging::LOG_ERROR; - case LS_WARNING: - return ::logging::LOG_WARNING; - case LS_INFO: - return ::logging::LOG_INFO; - case LS_VERBOSE: - case LS_SENSITIVE: - return ::logging::LOG_VERBOSE; - default: - NOTREACHED(); - return ::logging::LOG_FATAL; - } -} - -inline int WebRtcVerbosityLevel(LoggingSeverity sev) { - switch (sev) { - case LS_ERROR: - return -2; - case LS_WARNING: - return -1; - case LS_INFO: // We treat 'info' and 'verbose' as the same verbosity level. - case LS_VERBOSE: - return 1; - case LS_SENSITIVE: - return 2; - default: - NOTREACHED(); - return 0; - } -} - -// Logs extra information for LOG_E. -static void LogExtra(std::ostringstream* print_stream, - LogErrorContext err_ctx, - int err, - const char* module) { - if (err_ctx == ERRCTX_NONE) - return; - - (*print_stream) << ": "; - (*print_stream) << "[0x" << std::setfill('0') << std::hex << std::setw(8) - << err << "]"; - switch (err_ctx) { - case ERRCTX_ERRNO: - (*print_stream) << " " << strerror(err); - break; -#if defined(WEBRTC_WIN) - case ERRCTX_HRESULT: { - char msgbuf[256]; - DWORD flags = FORMAT_MESSAGE_FROM_SYSTEM; - HMODULE hmod = GetModuleHandleA(module); - if (hmod) - flags |= FORMAT_MESSAGE_FROM_HMODULE; - if (DWORD len = FormatMessageA( - flags, hmod, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - msgbuf, sizeof(msgbuf) / sizeof(msgbuf[0]), NULL)) { - while ((len > 0) && - isspace(static_cast<unsigned char>(msgbuf[len - 1]))) { - msgbuf[--len] = 0; - } - (*print_stream) << " " << msgbuf; - } - break; - } -#elif defined(WEBRTC_IOS) - case ERRCTX_OSSTATUS: - (*print_stream) << " " - << "Unknown LibJingle error: " << err; - break; -#elif defined(WEBRTC_MAC) - case ERRCTX_OSSTATUS: { - (*print_stream) << " " << logging::DescriptionFromOSStatus(err); - break; - } -#endif // defined(WEBRTC_WIN) - default: - break; - } -} - -DiagnosticLogMessage::DiagnosticLogMessage(const char* file, - int line, - LoggingSeverity severity, - LogErrorContext err_ctx, - int err) - : DiagnosticLogMessage(file, line, severity, err_ctx, err, nullptr) {} - -DiagnosticLogMessage::DiagnosticLogMessage(const char* file, - int line, - LoggingSeverity severity, - LogErrorContext err_ctx, - int err, - const char* module) - : file_name_(file), - line_(line), - severity_(severity), - err_ctx_(err_ctx), - err_(err), - module_(module), - log_to_chrome_(CheckVlogIsOnHelper(severity, file, strlen(file) + 1)) {} - -DiagnosticLogMessage::~DiagnosticLogMessage() { - const bool call_delegate = - g_logging_delegate_function && severity_ <= LS_INFO; - - if (call_delegate || log_to_chrome_) { - LogExtra(&print_stream_, err_ctx_, err_, module_); - const std::string& str = print_stream_.str(); - if (log_to_chrome_) { - LOG_LAZY_STREAM_DIRECT(file_name_, line_, - rtc::WebRtcSevToChromeSev(severity_)) << str; - } - - if (g_logging_delegate_function && severity_ <= LS_INFO) { - g_logging_delegate_function(str); - } - } -} - -// static -void LogMessage::LogToDebug(int min_sev) { - logging::SetMinLogLevel(min_sev); -} - -// Note: this function is a copy from the overriden libjingle implementation. -void LogMultiline(LoggingSeverity level, const char* label, bool input, - const void* data, size_t len, bool hex_mode, - LogMultilineState* state) { - // TODO(grunell): This will not do the expected verbosity level checking. We - // need a macro for the multiline logging. - // https://code.google.com/p/webrtc/issues/detail?id=5011 - if (!LOG_CHECK_LEVEL_V(level)) - return; - - const char * direction = (input ? " << " : " >> "); - - // NULL data means to flush our count of unprintable characters. - if (!data) { - if (state && state->unprintable_count_[input]) { - LOG_V(level) << label << direction << "## " - << state->unprintable_count_[input] - << " consecutive unprintable ##"; - state->unprintable_count_[input] = 0; - } - return; - } - - // The ctype classification functions want unsigned chars. - const unsigned char* udata = static_cast<const unsigned char*>(data); - - if (hex_mode) { - const size_t LINE_SIZE = 24; - char hex_line[LINE_SIZE * 9 / 4 + 2], asc_line[LINE_SIZE + 1]; - while (len > 0) { - memset(asc_line, ' ', sizeof(asc_line)); - memset(hex_line, ' ', sizeof(hex_line)); - size_t line_len = std::min(len, LINE_SIZE); - for (size_t i = 0; i < line_len; ++i) { - unsigned char ch = udata[i]; - asc_line[i] = isprint(ch) ? ch : '.'; - hex_line[i*2 + i/4] = hex_encode(ch >> 4); - hex_line[i*2 + i/4 + 1] = hex_encode(ch & 0xf); - } - asc_line[sizeof(asc_line)-1] = 0; - hex_line[sizeof(hex_line)-1] = 0; - LOG_V(level) << label << direction - << asc_line << " " << hex_line << " "; - udata += line_len; - len -= line_len; - } - return; - } - - size_t consecutive_unprintable = state ? state->unprintable_count_[input] : 0; - - const unsigned char* end = udata + len; - while (udata < end) { - const unsigned char* line = udata; - const unsigned char* end_of_line = strchrn<unsigned char>(udata, - end - udata, - '\n'); - if (!end_of_line) { - udata = end_of_line = end; - } else { - udata = end_of_line + 1; - } - - bool is_printable = true; - - // If we are in unprintable mode, we need to see a line of at least - // kMinPrintableLine characters before we'll switch back. - const ptrdiff_t kMinPrintableLine = 4; - if (consecutive_unprintable && ((end_of_line - line) < kMinPrintableLine)) { - is_printable = false; - } else { - // Determine if the line contains only whitespace and printable - // characters. - bool is_entirely_whitespace = true; - for (const unsigned char* pos = line; pos < end_of_line; ++pos) { - if (isspace(*pos)) - continue; - is_entirely_whitespace = false; - if (!isprint(*pos)) { - is_printable = false; - break; - } - } - // Treat an empty line following unprintable data as unprintable. - if (consecutive_unprintable && is_entirely_whitespace) { - is_printable = false; - } - } - if (!is_printable) { - consecutive_unprintable += (udata - line); - continue; - } - // Print out the current line, but prefix with a count of prior unprintable - // characters. - if (consecutive_unprintable) { - LOG_V(level) << label << direction << "## " << consecutive_unprintable - << " consecutive unprintable ##"; - consecutive_unprintable = 0; - } - // Strip off trailing whitespace. - while ((end_of_line > line) && isspace(*(end_of_line-1))) { - --end_of_line; - } - // Filter out any private data - std::string substr(reinterpret_cast<const char*>(line), end_of_line - line); - std::string::size_type pos_private = substr.find("Email"); - if (pos_private == std::string::npos) { - pos_private = substr.find("Passwd"); - } - if (pos_private == std::string::npos) { - LOG_V(level) << label << direction << substr; - } else { - LOG_V(level) << label << direction << "## omitted for privacy ##"; - } - } - - if (state) { - state->unprintable_count_[input] = consecutive_unprintable; - } -} - -void InitDiagnosticLoggingDelegateFunction( - void (*delegate)(const std::string&)) { -#ifndef NDEBUG - // Ensure that this function is always called from the same thread. - base::subtle::NoBarrier_CompareAndSwap(&g_init_logging_delegate_thread_id, 0, - static_cast<base::subtle::Atomic32>(base::PlatformThread::CurrentId())); - DCHECK_EQ( - g_init_logging_delegate_thread_id, - static_cast<base::subtle::Atomic32>(base::PlatformThread::CurrentId())); -#endif - CHECK(delegate); - // This function may be called with the same argument several times if the - // page is reloaded or there are several PeerConnections on one page with - // logging enabled. This is OK, we simply don't have to do anything. - if (delegate == g_logging_delegate_function) - return; - CHECK(!g_logging_delegate_function); - g_logging_delegate_function = delegate; - - if (g_extra_logging_init_function) - g_extra_logging_init_function(delegate); -} - -void SetExtraLoggingInit( - void (*function)(void (*delegate)(const std::string&))) { - CHECK(function); - CHECK(!g_extra_logging_init_function); - g_extra_logging_init_function = function; -} - -bool CheckVlogIsOnHelper( - rtc::LoggingSeverity severity, const char* file, size_t N) { - return rtc::WebRtcVerbosityLevel(severity) <= - ::logging::GetVlogLevelHelper(file, N); -} - -} // namespace rtc
diff --git a/third_party/webrtc_overrides/webrtc/base/logging.h b/third_party/webrtc_overrides/webrtc/base/logging.h deleted file mode 100644 index 2442cf1..0000000 --- a/third_party/webrtc_overrides/webrtc/base/logging.h +++ /dev/null
@@ -1,8 +0,0 @@ -#ifndef THIRD_PARTY_WEBRTC_OVERRIDES_WEBRTC_BASE_LOGGING_H_ -#define THIRD_PARTY_WEBRTC_OVERRIDES_WEBRTC_BASE_LOGGING_H_ - -// This header is deprecated and is just left here temporarily during -// refactoring. See https://bugs.webrtc.org/7634 for more details. -#include "third_party/webrtc_overrides/webrtc/rtc_base/logging.h" - -#endif // THIRD_PARTY_WEBRTC_OVERRIDES_WEBRTC_BASE_LOGGING_H_
diff --git a/third_party/webrtc_overrides/webrtc/base/task_queue.cc b/third_party/webrtc_overrides/webrtc/base/task_queue.cc deleted file mode 100644 index a51fc1e..0000000 --- a/third_party/webrtc_overrides/webrtc/base/task_queue.cc +++ /dev/null
@@ -1,149 +0,0 @@ -/* - * Copyright 2016 The WebRTC Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#include "third_party/webrtc_overrides/webrtc/rtc_base/task_queue.h" - -#include "base/bind.h" -#include "base/lazy_instance.h" -#include "base/threading/thread.h" -#include "base/threading/thread_local.h" - -namespace rtc { -namespace { - -void RunTask(std::unique_ptr<QueuedTask> task) { - if (!task->Run()) - task.release(); -} - -class PostAndReplyTask : public QueuedTask { - public: - PostAndReplyTask( - std::unique_ptr<QueuedTask> task, - std::unique_ptr<QueuedTask> reply, - const scoped_refptr<base::SingleThreadTaskRunner>& reply_task_runner) - : task_(std::move(task)), - reply_(std::move(reply)), - reply_task_runner_(reply_task_runner) {} - - ~PostAndReplyTask() override {} - - private: - bool Run() override { - if (!task_->Run()) - task_.release(); - - reply_task_runner_->PostTask(FROM_HERE, - base::Bind(&RunTask, base::Passed(&reply_))); - return true; - } - - std::unique_ptr<QueuedTask> task_; - std::unique_ptr<QueuedTask> reply_; - scoped_refptr<base::SingleThreadTaskRunner> reply_task_runner_; -}; - -// A lazily created thread local storage for quick access to a TaskQueue. -base::LazyInstance<base::ThreadLocalPointer<TaskQueue>>::Leaky lazy_tls_ptr = - LAZY_INSTANCE_INITIALIZER; - -} // namespace - -bool TaskQueue::IsCurrent() const { - return Current() == this; -} - -class TaskQueue::WorkerThread : public base::Thread { - public: - WorkerThread(const char* queue_name, TaskQueue* queue); - ~WorkerThread() override; - - private: - virtual void Init() override; - - TaskQueue* const queue_; -}; - -TaskQueue::WorkerThread::WorkerThread(const char* queue_name, TaskQueue* queue) - : base::Thread(queue_name), queue_(queue) {} - -void TaskQueue::WorkerThread::Init() { - lazy_tls_ptr.Pointer()->Set(queue_); -} - -TaskQueue::WorkerThread::~WorkerThread() { - DCHECK(!Thread::IsRunning()); -} - -TaskQueue::TaskQueue(const char* queue_name, - Priority priority /*= Priority::NORMAL*/) - : thread_( - std::unique_ptr<WorkerThread>(new WorkerThread(queue_name, this))) { - DCHECK(queue_name); - base::Thread::Options options; - switch (priority) { - case Priority::HIGH: - options.priority = base::ThreadPriority::REALTIME_AUDIO; - break; - case Priority::LOW: - options.priority = base::ThreadPriority::BACKGROUND; - break; - case Priority::NORMAL: - default: - options.priority = base::ThreadPriority::NORMAL; - break; - } - bool result = thread_->StartWithOptions(options); - CHECK(result); -} - -TaskQueue::~TaskQueue() { - DCHECK(!IsCurrent()); - thread_->Stop(); -} - -// static -TaskQueue* TaskQueue::Current() { - return lazy_tls_ptr.Pointer()->Get(); -} - -// static -bool TaskQueue::IsCurrent(const char* queue_name) { - TaskQueue* current = Current(); - return current && current->thread_->thread_name().compare(queue_name) == 0; -} - -void TaskQueue::PostTask(std::unique_ptr<QueuedTask> task) { - thread_->task_runner()->PostTask(FROM_HERE, - base::Bind(&RunTask, base::Passed(&task))); -} - -void TaskQueue::PostDelayedTask(std::unique_ptr<QueuedTask> task, - uint32_t milliseconds) { - thread_->task_runner()->PostDelayedTask( - FROM_HERE, base::Bind(&RunTask, base::Passed(&task)), - base::TimeDelta::FromMilliseconds(milliseconds)); -} - -void TaskQueue::PostTaskAndReply(std::unique_ptr<QueuedTask> task, - std::unique_ptr<QueuedTask> reply, - TaskQueue* reply_queue) { - PostTask(std::unique_ptr<QueuedTask>(new PostAndReplyTask( - std::move(task), std::move(reply), reply_queue->thread_->task_runner()))); -} - -void TaskQueue::PostTaskAndReply(std::unique_ptr<QueuedTask> task, - std::unique_ptr<QueuedTask> reply) { - thread_->task_runner()->PostTaskAndReply( - FROM_HERE, base::Bind(&RunTask, base::Passed(&task)), - base::Bind(&RunTask, base::Passed(&reply))); -} - -} // namespace rtc
diff --git a/third_party/webrtc_overrides/webrtc/base/win32socketinit.cc b/third_party/webrtc_overrides/webrtc/base/win32socketinit.cc deleted file mode 100644 index 6cd6f6ee..0000000 --- a/third_party/webrtc_overrides/webrtc/base/win32socketinit.cc +++ /dev/null
@@ -1,22 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Redirect WebRTC's winsock initialization activity into Chromium's -// singleton object that managest precisely that for the browser. - -#include "third_party/webrtc/rtc_base/win32socketinit.h" - -#include "net/base/winsock_init.h" - -#if !defined(WEBRTC_WIN) -#error "Only compile this on Windows" -#endif - -namespace rtc { - -void EnsureWinsockInit() { - net::EnsureWinsockInit(); -} - -} // namespace rtc
diff --git a/third_party/win_build_output/OWNERS b/third_party/win_build_output/OWNERS new file mode 100644 index 0000000..03e5e18 --- /dev/null +++ b/third_party/win_build_output/OWNERS
@@ -0,0 +1,2 @@ +scottmg@chromium.org +thakis@chromium.org
diff --git a/third_party/win_build_output/README.chromium b/third_party/win_build_output/README.chromium new file mode 100644 index 0000000..8621089d --- /dev/null +++ b/third_party/win_build_output/README.chromium
@@ -0,0 +1,28 @@ +Name: Checked in build outputs generated on Windows. +Version: - +Revision: - +License: BSD 3-clause +License File: ../../LICENSE +Security Critical: yes + +This directory contains outputs of some tools that run during the chrome/win +build and that exist only as closed-source Windows binaries and that are used +only in very few places of the build, and whose build inputs change almost +never. By checking in the outputs of these tools, the chrome/win build can +work on non-Windows hosts. + +On Windows, we run the tool and then compare its output with the checked-in +files. If they differ, we error out. In that case (e.g. when you change +the input files, or the tool versions), you need to copy the new outputs into +this directory. + +For mc.exe: +* mc.exe generates foo.h and foo.rc in out\gn\gen\path\to\file.mc. Copy over + these two files to third_party\win_build_output\mc\path\to\file. Then open + foo.rc and copy all the .bin files referenced from the .rc file (and delete + all checked-in files no tin this list). + +For midl.exe: +* midl.exe generates foo.h, foo.dlldata.c, foo_i.c, foo_p.i, foo_p.c, and + sometimes foo.tlb. Copy these 5 (or 6, if the .tlb file is present) to + third_party\win_build_output\midl\path\to\file.
diff --git a/third_party/win_build_output/mc/base/trace_event/etw_manifest/MSG00001.bin b/third_party/win_build_output/mc/base/trace_event/etw_manifest/MSG00001.bin new file mode 100644 index 0000000..bcedca5 --- /dev/null +++ b/third_party/win_build_output/mc/base/trace_event/etw_manifest/MSG00001.bin Binary files differ
diff --git a/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_win.h b/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_win.h new file mode 100644 index 0000000..6dd28199 --- /dev/null +++ b/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_win.h
@@ -0,0 +1,454 @@ +//**********************************************************************` +//* This is an include file generated by Message Compiler. *` +//* *` +//* Copyright (c) Microsoft Corporation. All Rights Reserved. *` +//**********************************************************************` +#pragma once +#include <wmistr.h> +#include <evntrace.h> +#include "evntprov.h" +// +// Initial Defs +// +#if !defined(ETW_INLINE) +#define ETW_INLINE DECLSPEC_NOINLINE __inline +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +// +// Allow disabling of code generation +// +#ifndef MCGEN_DISABLE_PROVIDER_CODE_GENERATION +#if !defined(McGenDebug) +#define McGenDebug(a,b) +#endif + + +#if !defined(MCGEN_TRACE_CONTEXT_DEF) +#define MCGEN_TRACE_CONTEXT_DEF +typedef struct _MCGEN_TRACE_CONTEXT +{ + TRACEHANDLE RegistrationHandle; + TRACEHANDLE Logger; + ULONGLONG MatchAnyKeyword; + ULONGLONG MatchAllKeyword; + ULONG Flags; + ULONG IsEnabled; + UCHAR Level; + UCHAR Reserve; + USHORT EnableBitsCount; + PULONG EnableBitMask; + const ULONGLONG* EnableKeyWords; + const UCHAR* EnableLevel; +} MCGEN_TRACE_CONTEXT, *PMCGEN_TRACE_CONTEXT; +#endif + +#if !defined(MCGEN_LEVEL_KEYWORD_ENABLED_DEF) +#define MCGEN_LEVEL_KEYWORD_ENABLED_DEF +FORCEINLINE +BOOLEAN +McGenLevelKeywordEnabled( + _In_ PMCGEN_TRACE_CONTEXT EnableInfo, + _In_ UCHAR Level, + _In_ ULONGLONG Keyword + ) +{ + // + // Check if the event Level is lower than the level at which + // the channel is enabled. + // If the event Level is 0 or the channel is enabled at level 0, + // all levels are enabled. + // + + if ((Level <= EnableInfo->Level) || // This also covers the case of Level == 0. + (EnableInfo->Level == 0)) { + + // + // Check if Keyword is enabled + // + + if ((Keyword == (ULONGLONG)0) || + ((Keyword & EnableInfo->MatchAnyKeyword) && + ((Keyword & EnableInfo->MatchAllKeyword) == EnableInfo->MatchAllKeyword))) { + return TRUE; + } + } + + return FALSE; + +} +#endif + +#if !defined(MCGEN_EVENT_ENABLED_DEF) +#define MCGEN_EVENT_ENABLED_DEF +FORCEINLINE +BOOLEAN +McGenEventEnabled( + _In_ PMCGEN_TRACE_CONTEXT EnableInfo, + _In_ PCEVENT_DESCRIPTOR EventDescriptor + ) +{ + + return McGenLevelKeywordEnabled(EnableInfo, EventDescriptor->Level, EventDescriptor->Keyword); + +} +#endif + + +// +// EnableCheckMacro +// +#ifndef MCGEN_ENABLE_CHECK +#define MCGEN_ENABLE_CHECK(Context, Descriptor) (Context.IsEnabled && McGenEventEnabled(&Context, &Descriptor)) +#endif + +#if !defined(MCGEN_CONTROL_CALLBACK) +#define MCGEN_CONTROL_CALLBACK + +DECLSPEC_NOINLINE __inline +VOID +__stdcall +McGenControlCallbackV2( + _In_ LPCGUID SourceId, + _In_ ULONG ControlCode, + _In_ UCHAR Level, + _In_ ULONGLONG MatchAnyKeyword, + _In_ ULONGLONG MatchAllKeyword, + _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData, + _Inout_opt_ PVOID CallbackContext + ) +/*++ + +Routine Description: + + This is the notification callback for Windows Vista and later. + +Arguments: + + SourceId - The GUID that identifies the session that enabled the provider. + + ControlCode - The parameter indicates whether the provider + is being enabled or disabled. + + Level - The level at which the event is enabled. + + MatchAnyKeyword - The bitmask of keywords that the provider uses to + determine the category of events that it writes. + + MatchAllKeyword - This bitmask additionally restricts the category + of events that the provider writes. + + FilterData - The provider-defined data. + + CallbackContext - The context of the callback that is defined when the provider + called EtwRegister to register itself. + +Remarks: + + ETW calls this function to notify provider of enable/disable + +--*/ +{ + PMCGEN_TRACE_CONTEXT Ctx = (PMCGEN_TRACE_CONTEXT)CallbackContext; + ULONG Ix; +#ifndef MCGEN_PRIVATE_ENABLE_CALLBACK_V2 + UNREFERENCED_PARAMETER(SourceId); + UNREFERENCED_PARAMETER(FilterData); +#endif + + if (Ctx == NULL) { + return; + } + + switch (ControlCode) { + + case EVENT_CONTROL_CODE_ENABLE_PROVIDER: + Ctx->Level = Level; + Ctx->MatchAnyKeyword = MatchAnyKeyword; + Ctx->MatchAllKeyword = MatchAllKeyword; + Ctx->IsEnabled = EVENT_CONTROL_CODE_ENABLE_PROVIDER; + + for (Ix = 0; Ix < Ctx->EnableBitsCount; Ix += 1) { + if (McGenLevelKeywordEnabled(Ctx, Ctx->EnableLevel[Ix], Ctx->EnableKeyWords[Ix]) != FALSE) { + Ctx->EnableBitMask[Ix >> 5] |= (1 << (Ix % 32)); + } else { + Ctx->EnableBitMask[Ix >> 5] &= ~(1 << (Ix % 32)); + } + } + break; + + case EVENT_CONTROL_CODE_DISABLE_PROVIDER: + Ctx->IsEnabled = EVENT_CONTROL_CODE_DISABLE_PROVIDER; + Ctx->Level = 0; + Ctx->MatchAnyKeyword = 0; + Ctx->MatchAllKeyword = 0; + if (Ctx->EnableBitsCount > 0) { + RtlZeroMemory(Ctx->EnableBitMask, (((Ctx->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); + } + break; + + default: + break; + } + +#ifdef MCGEN_PRIVATE_ENABLE_CALLBACK_V2 + // + // Call user defined callback + // + MCGEN_PRIVATE_ENABLE_CALLBACK_V2( + SourceId, + ControlCode, + Level, + MatchAnyKeyword, + MatchAllKeyword, + FilterData, + CallbackContext + ); +#endif + + return; +} + +#endif +#endif // MCGEN_DISABLE_PROVIDER_CODE_GENERATION +//+ +// Provider Chrome Event Count 1 +//+ +EXTERN_C __declspec(selectany) const GUID CHROME = {0xd2d578d9, 0x2936, 0x45b6, {0xa0, 0x9f, 0x30, 0xe3, 0x27, 0x15, 0xf4, 0x2d}}; + +// +// Channel +// +#define CHROME_CHANNEL_SYSTEM 0x8 + +// +// Event Descriptors +// +EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR ChromeEvent = {0x1, 0x0, 0x8, 0x4, 0x0, 0x0, 0x8000000000000000}; +#define ChromeEvent_value 0x1 + +// +// Note on Generate Code from Manifest for Windows Vista and above +// +//Structures : are handled as a size and pointer pairs. The macro for the event will have an extra +//parameter for the size in bytes of the structure. Make sure that your structures have no extra padding. +// +//Strings: There are several cases that can be described in the manifest. For array of variable length +//strings, the generated code will take the count of characters for the whole array as an input parameter. +// +//SID No support for array of SIDs, the macro will take a pointer to the SID and use appropriate +//GetLengthSid function to get the length. +// + +// +// Allow disabling of code generation +// +#ifndef MCGEN_DISABLE_PROVIDER_CODE_GENERATION + +// +// Globals +// + + +// +// Event Enablement Bits +// + +EXTERN_C __declspec(selectany) DECLSPEC_CACHEALIGN ULONG ChromeEnableBits[1]; +EXTERN_C __declspec(selectany) const ULONGLONG ChromeKeywords[1] = {0x8000000000000000}; +EXTERN_C __declspec(selectany) const UCHAR ChromeLevels[1] = {4}; +EXTERN_C __declspec(selectany) MCGEN_TRACE_CONTEXT CHROME_Context = {0, 0, 0, 0, 0, 0, 0, 0, 1, ChromeEnableBits, ChromeKeywords, ChromeLevels}; + +EXTERN_C __declspec(selectany) REGHANDLE ChromeHandle = (REGHANDLE)0; + +#if !defined(McGenEventRegisterUnregister) +#define McGenEventRegisterUnregister +#pragma warning(push) +#pragma warning(disable:6103) +DECLSPEC_NOINLINE __inline +ULONG __stdcall +McGenEventRegister( + _In_ LPCGUID ProviderId, + _In_opt_ PENABLECALLBACK EnableCallback, + _In_opt_ PVOID CallbackContext, + _Inout_ PREGHANDLE RegHandle + ) +/*++ + +Routine Description: + + This function registers the provider with ETW USER mode. + +Arguments: + ProviderId - Provider ID to be register with ETW. + + EnableCallback - Callback to be used. + + CallbackContext - Context for this provider. + + RegHandle - Pointer to registration handle. + +Remarks: + + If the handle != NULL will return ERROR_SUCCESS + +--*/ +{ + ULONG Error; + + + if (*RegHandle) { + // + // already registered + // + return ERROR_SUCCESS; + } + + Error = EventRegister( ProviderId, EnableCallback, CallbackContext, RegHandle); + + return Error; +} +#pragma warning(pop) + + +DECLSPEC_NOINLINE __inline +ULONG __stdcall +McGenEventUnregister(_Inout_ PREGHANDLE RegHandle) +/*++ + +Routine Description: + + Unregister from ETW USER mode + +Arguments: + RegHandle this is the pointer to the provider context +Remarks: + If provider has not been registered, RegHandle == NULL, + return ERROR_SUCCESS +--*/ +{ + ULONG Error; + + + if(!(*RegHandle)) { + // + // Provider has not registerd + // + return ERROR_SUCCESS; + } + + Error = EventUnregister(*RegHandle); + *RegHandle = (REGHANDLE)0; + + return Error; +} +#endif +// +// Register with ETW Vista + +// +#ifndef EventRegisterChrome +#define EventRegisterChrome() McGenEventRegister(&CHROME, McGenControlCallbackV2, &CHROME_Context, &ChromeHandle) +#endif + +// +// UnRegister with ETW +// +#ifndef EventUnregisterChrome +#define EventUnregisterChrome() McGenEventUnregister(&ChromeHandle) +#endif + +// +// Enablement check macro for ChromeEvent +// + +#define EventEnabledChromeEvent() ((ChromeEnableBits[0] & 0x00000001) != 0) + +// +// Event Macro for ChromeEvent +// +#define EventWriteChromeEvent(Name, Phase, Arg_Name_1, Arg_Value_1, Arg_Name_2, Arg_Value_2, Arg_Name_3, Arg_Value_3)\ + EventEnabledChromeEvent() ?\ + Template_ssssssss(ChromeHandle, &ChromeEvent, Name, Phase, Arg_Name_1, Arg_Value_1, Arg_Name_2, Arg_Value_2, Arg_Name_3, Arg_Value_3)\ + : ERROR_SUCCESS\ + +#endif // MCGEN_DISABLE_PROVIDER_CODE_GENERATION + + +// +// Allow Diasabling of code generation +// +#ifndef MCGEN_DISABLE_PROVIDER_CODE_GENERATION + +// +// Template Functions +// +// +//Template from manifest : tid_chrome_event +// +#ifndef Template_ssssssss_def +#define Template_ssssssss_def +ETW_INLINE +ULONG +Template_ssssssss( + _In_ REGHANDLE RegHandle, + _In_ PCEVENT_DESCRIPTOR Descriptor, + _In_opt_ LPCSTR _Arg0, + _In_opt_ LPCSTR _Arg1, + _In_opt_ LPCSTR _Arg2, + _In_opt_ LPCSTR _Arg3, + _In_opt_ LPCSTR _Arg4, + _In_opt_ LPCSTR _Arg5, + _In_opt_ LPCSTR _Arg6, + _In_opt_ LPCSTR _Arg7 + ) +{ +#define ARGUMENT_COUNT_ssssssss 8 + + EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_ssssssss]; + + EventDataDescCreate(&EventData[0], + (_Arg0 != NULL) ? _Arg0 : "NULL", + (_Arg0 != NULL) ? (ULONG)((strlen(_Arg0) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + EventDataDescCreate(&EventData[1], + (_Arg1 != NULL) ? _Arg1 : "NULL", + (_Arg1 != NULL) ? (ULONG)((strlen(_Arg1) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + EventDataDescCreate(&EventData[2], + (_Arg2 != NULL) ? _Arg2 : "NULL", + (_Arg2 != NULL) ? (ULONG)((strlen(_Arg2) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + EventDataDescCreate(&EventData[3], + (_Arg3 != NULL) ? _Arg3 : "NULL", + (_Arg3 != NULL) ? (ULONG)((strlen(_Arg3) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + EventDataDescCreate(&EventData[4], + (_Arg4 != NULL) ? _Arg4 : "NULL", + (_Arg4 != NULL) ? (ULONG)((strlen(_Arg4) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + EventDataDescCreate(&EventData[5], + (_Arg5 != NULL) ? _Arg5 : "NULL", + (_Arg5 != NULL) ? (ULONG)((strlen(_Arg5) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + EventDataDescCreate(&EventData[6], + (_Arg6 != NULL) ? _Arg6 : "NULL", + (_Arg6 != NULL) ? (ULONG)((strlen(_Arg6) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + EventDataDescCreate(&EventData[7], + (_Arg7 != NULL) ? _Arg7 : "NULL", + (_Arg7 != NULL) ? (ULONG)((strlen(_Arg7) + 1) * sizeof(CHAR)) : (ULONG)sizeof("NULL")); + + return EventWrite(RegHandle, Descriptor, ARGUMENT_COUNT_ssssssss, EventData); +} +#endif + +#endif // MCGEN_DISABLE_PROVIDER_CODE_GENERATION + +#if defined(__cplusplus) +}; +#endif + +#define MSG_ChromeEvent_EventMessage 0x00000001L
diff --git a/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_win.rc b/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_win.rc new file mode 100644 index 0000000..3dba33db --- /dev/null +++ b/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_win.rc
@@ -0,0 +1,3 @@ +LANGUAGE 0x9,0x1 +1 11 "MSG00001.bin" +1 WEVT_TEMPLATE "chrome_events_winTEMP.BIN"
diff --git a/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_winTEMP.BIN b/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_winTEMP.BIN new file mode 100644 index 0000000..8967fb3 --- /dev/null +++ b/third_party/win_build_output/mc/base/trace_event/etw_manifest/chrome_events_winTEMP.BIN Binary files differ
diff --git a/third_party/win_build_output/mc/chrome/common/win/MSG00409.bin b/third_party/win_build_output/mc/chrome/common/win/MSG00409.bin new file mode 100644 index 0000000..7dfe34ba --- /dev/null +++ b/third_party/win_build_output/mc/chrome/common/win/MSG00409.bin Binary files differ
diff --git a/third_party/win_build_output/mc/chrome/common/win/eventlog_messages.h b/third_party/win_build_output/mc/chrome/common/win/eventlog_messages.h new file mode 100644 index 0000000..deec869 --- /dev/null +++ b/third_party/win_build_output/mc/chrome/common/win/eventlog_messages.h
@@ -0,0 +1,66 @@ +// 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. +// +// Defines the names and types of messages that are logged with the SYSLOG +// macro. +// TODO(pastarmovj): Subdivide into more categories if needed. +// +// Values are 32 bit values laid out as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +---+-+-+-----------------------+-------------------------------+ +// |Sev|C|R| Facility | Code | +// +---+-+-+-----------------------+-------------------------------+ +// +// where +// +// Sev - is the severity code +// +// 00 - Success +// 01 - Informational +// 10 - Warning +// 11 - Error +// +// C - is the Customer code flag +// +// R - is a reserved bit +// +// Facility - is the facility code +// +// Code - is the facility's status code +// +// +// Define the facility codes +// +#define FACILITY_SYSTEM 0x0 + + +// +// Define the severity codes +// +#define STATUS_SEVERITY_INFORMATIONAL 0x0 +#define STATUS_SEVERITY_WARNING 0x1 +#define STATUS_SEVERITY_ERROR 0x2 +#define STATUS_SEVERITY_FATAL 0x3 + + +// +// MessageId: BROWSER_CATEGORY +// +// MessageText: +// +// Browser Events +// +#define BROWSER_CATEGORY ((WORD)0x00000001L) + +// +// MessageId: MSG_LOG_MESSAGE +// +// MessageText: +// +// %1!S! +// +#define MSG_LOG_MESSAGE ((DWORD)0x80000100L) +
diff --git a/third_party/win_build_output/mc/chrome/common/win/eventlog_messages.rc b/third_party/win_build_output/mc/chrome/common/win/eventlog_messages.rc new file mode 100644 index 0000000..4bd3ab7 --- /dev/null +++ b/third_party/win_build_output/mc/chrome/common/win/eventlog_messages.rc
@@ -0,0 +1,2 @@ +LANGUAGE 0x9,0x1 +1 11 "MSG00409.bin"
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0000d.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0000d.bin new file mode 100644 index 0000000..4de8d8b6 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0000d.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00401.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00401.bin new file mode 100644 index 0000000..2b581f19 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00401.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00402.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00402.bin new file mode 100644 index 0000000..5a96e87 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00402.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00403.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00403.bin new file mode 100644 index 0000000..c0b6e6344 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00403.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00404.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00404.bin new file mode 100644 index 0000000..4a2be986 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00404.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00405.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00405.bin new file mode 100644 index 0000000..18ae5059 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00405.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00406.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00406.bin new file mode 100644 index 0000000..1452779 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00406.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00407.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00407.bin new file mode 100644 index 0000000..4976d7fd --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00407.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00408.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00408.bin new file mode 100644 index 0000000..b12b014 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00408.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00409.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00409.bin new file mode 100644 index 0000000..dc397639 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00409.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0040b.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0040b.bin new file mode 100644 index 0000000..29a4351 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0040b.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0040c.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0040c.bin new file mode 100644 index 0000000..59faee86 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0040c.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0040d.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0040d.bin new file mode 100644 index 0000000..3008b04 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0040d.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0040e.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0040e.bin new file mode 100644 index 0000000..4f533d7 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0040e.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00410.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00410.bin new file mode 100644 index 0000000..a5917a7 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00410.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00411.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00411.bin new file mode 100644 index 0000000..ac82f6ca --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00411.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00412.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00412.bin new file mode 100644 index 0000000..b04914be --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00412.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00413.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00413.bin new file mode 100644 index 0000000..a5f8b4bd --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00413.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00414.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00414.bin new file mode 100644 index 0000000..61ee0253 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00414.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00415.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00415.bin new file mode 100644 index 0000000..89abd7c --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00415.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00416.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00416.bin new file mode 100644 index 0000000..edf53f8 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00416.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00418.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00418.bin new file mode 100644 index 0000000..7efe6c96 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00418.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00419.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00419.bin new file mode 100644 index 0000000..0eb2bcc --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00419.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0041a.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0041a.bin new file mode 100644 index 0000000..1e9238ae --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0041a.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0041b.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0041b.bin new file mode 100644 index 0000000..d6362bf --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0041b.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0041d.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0041d.bin new file mode 100644 index 0000000..39de29c --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0041d.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0041e.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0041e.bin new file mode 100644 index 0000000..b01b2d8 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0041e.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0041f.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0041f.bin new file mode 100644 index 0000000..3267418c --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0041f.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00421.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00421.bin new file mode 100644 index 0000000..b72cde1 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00421.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00422.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00422.bin new file mode 100644 index 0000000..c2f04f9 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00422.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00424.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00424.bin new file mode 100644 index 0000000..247ebbc3 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00424.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00425.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00425.bin new file mode 100644 index 0000000..ec05c9c --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00425.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00426.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00426.bin new file mode 100644 index 0000000..e92f70b --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00426.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00427.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00427.bin new file mode 100644 index 0000000..798b0ef --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00427.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00429.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00429.bin new file mode 100644 index 0000000..dbeb3867 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00429.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0042a.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0042a.bin new file mode 100644 index 0000000..3a49bf5 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0042a.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00439.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00439.bin new file mode 100644 index 0000000..762a181 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00439.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0043e.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0043e.bin new file mode 100644 index 0000000..e0eef25 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0043e.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00441.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00441.bin new file mode 100644 index 0000000..5840f80 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00441.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00445.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00445.bin new file mode 100644 index 0000000..4412231 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00445.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00447.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00447.bin new file mode 100644 index 0000000..5482400 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00447.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00449.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00449.bin new file mode 100644 index 0000000..ff5ee61 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00449.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0044a.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0044a.bin new file mode 100644 index 0000000..29f814dd --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0044a.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0044b.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0044b.bin new file mode 100644 index 0000000..11eecc99 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0044b.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0044c.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0044c.bin new file mode 100644 index 0000000..1fc945a --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0044c.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0044e.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0044e.bin new file mode 100644 index 0000000..76b98bfe --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0044e.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0045e.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0045e.bin new file mode 100644 index 0000000..a389b276 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0045e.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00464.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00464.bin new file mode 100644 index 0000000..8ee3c89 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00464.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00804.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00804.bin new file mode 100644 index 0000000..261786a --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00804.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00809.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00809.bin new file mode 100644 index 0000000..dc397639 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00809.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0080a.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0080a.bin new file mode 100644 index 0000000..77cd6ae --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0080a.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00816.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00816.bin new file mode 100644 index 0000000..9e9f797 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00816.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG0081a.bin b/third_party/win_build_output/mc/remoting/host/win/MSG0081a.bin new file mode 100644 index 0000000..417257d --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG0081a.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/MSG00c0a.bin b/third_party/win_build_output/mc/remoting/host/win/MSG00c0a.bin new file mode 100644 index 0000000..acc6d29 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/MSG00c0a.bin Binary files differ
diff --git a/third_party/win_build_output/mc/remoting/host/win/remoting_host_messages.h b/third_party/win_build_output/mc/remoting/host/win/remoting_host_messages.h new file mode 100644 index 0000000..ab044d45 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/remoting_host_messages.h
@@ -0,0 +1,96 @@ + // Copyright 2013 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. + // The categories of events. +// +// Values are 32 bit values laid out as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +---+-+-+-----------------------+-------------------------------+ +// |Sev|C|R| Facility | Code | +// +---+-+-+-----------------------+-------------------------------+ +// +// where +// +// Sev - is the severity code +// +// 00 - Success +// 01 - Informational +// 10 - Warning +// 11 - Error +// +// C - is the Customer code flag +// +// R - is a reserved bit +// +// Facility - is the facility code +// +// Code - is the facility's status code +// +// +// Define the facility codes +// +#define FACILITY_HOST 0x0 + + +// +// Define the severity codes +// +#define STATUS_SEVERITY_SUCCESS 0x0 +#define STATUS_SEVERITY_INFORMATIONAL 0x1 +#define STATUS_SEVERITY_WARNING 0x2 +#define STATUS_SEVERITY_ERROR 0x3 + + +// +// MessageId: HOST_CATEGORY +// +// MessageText: +// +// +#define HOST_CATEGORY ((WORD)0x00000001L) + + // The message definitions. +// +// MessageId: MSG_HOST_CLIENT_CONNECTED +// +// MessageText: +// +// +#define MSG_HOST_CLIENT_CONNECTED ((DWORD)0x40000001L) + +// +// MessageId: MSG_HOST_CLIENT_DISCONNECTED +// +// MessageText: +// +// +#define MSG_HOST_CLIENT_DISCONNECTED ((DWORD)0x40000002L) + +// +// MessageId: MSG_HOST_CLIENT_ACCESS_DENIED +// +// MessageText: +// +// +#define MSG_HOST_CLIENT_ACCESS_DENIED ((DWORD)0xC0000003L) + +// +// MessageId: MSG_HOST_CLIENT_ROUTING_CHANGED +// +// MessageText: +// +// +#define MSG_HOST_CLIENT_ROUTING_CHANGED ((DWORD)0x40000004L) + +// +// MessageId: MSG_HOST_STARTED +// +// MessageText: +// +// +#define MSG_HOST_STARTED ((DWORD)0x40000005L) + + // This line makes sure that mc.exe does not complain about a single '.' at + // the end of the file. \ No newline at end of file
diff --git a/third_party/win_build_output/mc/remoting/host/win/remoting_host_messages.rc b/third_party/win_build_output/mc/remoting/host/win/remoting_host_messages.rc new file mode 100644 index 0000000..4715f93 --- /dev/null +++ b/third_party/win_build_output/mc/remoting/host/win/remoting_host_messages.rc
@@ -0,0 +1,108 @@ +LANGUAGE 0x5e,0x1 +1 11 "MSG0045e.bin" +LANGUAGE 0x1,0x1 +1 11 "MSG00401.bin" +LANGUAGE 0x2,0x1 +1 11 "MSG00402.bin" +LANGUAGE 0x45,0x1 +1 11 "MSG00445.bin" +LANGUAGE 0x3,0x1 +1 11 "MSG00403.bin" +LANGUAGE 0x5,0x1 +1 11 "MSG00405.bin" +LANGUAGE 0x6,0x1 +1 11 "MSG00406.bin" +LANGUAGE 0x7,0x1 +1 11 "MSG00407.bin" +LANGUAGE 0x8,0x1 +1 11 "MSG00408.bin" +LANGUAGE 0x9,0x1 +1 11 "MSG00409.bin" +LANGUAGE 0x9,0x2 +1 11 "MSG00809.bin" +LANGUAGE 0xa,0x3 +1 11 "MSG00c0a.bin" +LANGUAGE 0xa,0x2 +1 11 "MSG0080a.bin" +LANGUAGE 0x25,0x1 +1 11 "MSG00425.bin" +LANGUAGE 0x29,0x1 +1 11 "MSG00429.bin" +LANGUAGE 0xd,0x0 +1 11 "MSG0000d.bin" +LANGUAGE 0xb,0x1 +1 11 "MSG0040b.bin" +LANGUAGE 0x64,0x1 +1 11 "MSG00464.bin" +LANGUAGE 0xc,0x1 +1 11 "MSG0040c.bin" +LANGUAGE 0x47,0x1 +1 11 "MSG00447.bin" +LANGUAGE 0xd,0x1 +1 11 "MSG0040d.bin" +LANGUAGE 0x39,0x1 +1 11 "MSG00439.bin" +LANGUAGE 0x1a,0x1 +1 11 "MSG0041a.bin" +LANGUAGE 0xe,0x1 +1 11 "MSG0040e.bin" +LANGUAGE 0x21,0x1 +1 11 "MSG00421.bin" +LANGUAGE 0x10,0x1 +1 11 "MSG00410.bin" +LANGUAGE 0x11,0x1 +1 11 "MSG00411.bin" +LANGUAGE 0x4b,0x1 +1 11 "MSG0044b.bin" +LANGUAGE 0x12,0x1 +1 11 "MSG00412.bin" +LANGUAGE 0x27,0x1 +1 11 "MSG00427.bin" +LANGUAGE 0x26,0x1 +1 11 "MSG00426.bin" +LANGUAGE 0x4c,0x1 +1 11 "MSG0044c.bin" +LANGUAGE 0x4e,0x1 +1 11 "MSG0044e.bin" +LANGUAGE 0x3e,0x1 +1 11 "MSG0043e.bin" +LANGUAGE 0x14,0x1 +1 11 "MSG00414.bin" +LANGUAGE 0x13,0x1 +1 11 "MSG00413.bin" +LANGUAGE 0x15,0x1 +1 11 "MSG00415.bin" +LANGUAGE 0x16,0x1 +1 11 "MSG00416.bin" +LANGUAGE 0x16,0x2 +1 11 "MSG00816.bin" +LANGUAGE 0x18,0x1 +1 11 "MSG00418.bin" +LANGUAGE 0x19,0x1 +1 11 "MSG00419.bin" +LANGUAGE 0x1b,0x1 +1 11 "MSG0041b.bin" +LANGUAGE 0x24,0x1 +1 11 "MSG00424.bin" +LANGUAGE 0x1a,0x2 +1 11 "MSG0081a.bin" +LANGUAGE 0x1d,0x1 +1 11 "MSG0041d.bin" +LANGUAGE 0x41,0x1 +1 11 "MSG00441.bin" +LANGUAGE 0x49,0x1 +1 11 "MSG00449.bin" +LANGUAGE 0x4a,0x1 +1 11 "MSG0044a.bin" +LANGUAGE 0x1e,0x1 +1 11 "MSG0041e.bin" +LANGUAGE 0x1f,0x1 +1 11 "MSG0041f.bin" +LANGUAGE 0x22,0x1 +1 11 "MSG00422.bin" +LANGUAGE 0x2a,0x1 +1 11 "MSG0042a.bin" +LANGUAGE 0x4,0x2 +1 11 "MSG00804.bin" +LANGUAGE 0x4,0x1 +1 11 "MSG00404.bin"
diff --git a/third_party/win_build_output/midl/google_update/google_update_idl.dlldata.c b/third_party/win_build_output/midl/google_update/google_update_idl.dlldata.c new file mode 100644 index 0000000..e2d4c4a --- /dev/null +++ b/third_party/win_build_output/midl/google_update/google_update_idl.dlldata.c
@@ -0,0 +1,38 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + +#define PROXY_DELEGATION + +#include <rpcproxy.h> + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( google_update_idl ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( google_update_idl ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */
diff --git a/third_party/win_build_output/midl/google_update/google_update_idl.h b/third_party/win_build_output/midl/google_update/google_update_idl.h new file mode 100644 index 0000000..5b5691aa --- /dev/null +++ b/third_party/win_build_output/midl/google_update/google_update_idl.h
@@ -0,0 +1,4892 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../google_update/google_update_idl.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the <rpcndr.h> version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of <rpcndr.h> +#endif /* __RPCNDR_H_VERSION__ */ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __google_update_idl_h__ +#define __google_update_idl_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IGoogleUpdate3_FWD_DEFINED__ +#define __IGoogleUpdate3_FWD_DEFINED__ +typedef interface IGoogleUpdate3 IGoogleUpdate3; + +#endif /* __IGoogleUpdate3_FWD_DEFINED__ */ + + +#ifndef __IAppBundle_FWD_DEFINED__ +#define __IAppBundle_FWD_DEFINED__ +typedef interface IAppBundle IAppBundle; + +#endif /* __IAppBundle_FWD_DEFINED__ */ + + +#ifndef __IApp_FWD_DEFINED__ +#define __IApp_FWD_DEFINED__ +typedef interface IApp IApp; + +#endif /* __IApp_FWD_DEFINED__ */ + + +#ifndef __IAppCommand_FWD_DEFINED__ +#define __IAppCommand_FWD_DEFINED__ +typedef interface IAppCommand IAppCommand; + +#endif /* __IAppCommand_FWD_DEFINED__ */ + + +#ifndef __IAppVersion_FWD_DEFINED__ +#define __IAppVersion_FWD_DEFINED__ +typedef interface IAppVersion IAppVersion; + +#endif /* __IAppVersion_FWD_DEFINED__ */ + + +#ifndef __IPackage_FWD_DEFINED__ +#define __IPackage_FWD_DEFINED__ +typedef interface IPackage IPackage; + +#endif /* __IPackage_FWD_DEFINED__ */ + + +#ifndef __ICurrentState_FWD_DEFINED__ +#define __ICurrentState_FWD_DEFINED__ +typedef interface ICurrentState ICurrentState; + +#endif /* __ICurrentState_FWD_DEFINED__ */ + + +#ifndef __IRegistrationUpdateHook_FWD_DEFINED__ +#define __IRegistrationUpdateHook_FWD_DEFINED__ +typedef interface IRegistrationUpdateHook IRegistrationUpdateHook; + +#endif /* __IRegistrationUpdateHook_FWD_DEFINED__ */ + + +#ifndef __ICredentialDialog_FWD_DEFINED__ +#define __ICredentialDialog_FWD_DEFINED__ +typedef interface ICredentialDialog ICredentialDialog; + +#endif /* __ICredentialDialog_FWD_DEFINED__ */ + + +#ifndef __IGoogleUpdate3Web_FWD_DEFINED__ +#define __IGoogleUpdate3Web_FWD_DEFINED__ +typedef interface IGoogleUpdate3Web IGoogleUpdate3Web; + +#endif /* __IGoogleUpdate3Web_FWD_DEFINED__ */ + + +#ifndef __IGoogleUpdate3WebSecurity_FWD_DEFINED__ +#define __IGoogleUpdate3WebSecurity_FWD_DEFINED__ +typedef interface IGoogleUpdate3WebSecurity IGoogleUpdate3WebSecurity; + +#endif /* __IGoogleUpdate3WebSecurity_FWD_DEFINED__ */ + + +#ifndef __IAppBundleWeb_FWD_DEFINED__ +#define __IAppBundleWeb_FWD_DEFINED__ +typedef interface IAppBundleWeb IAppBundleWeb; + +#endif /* __IAppBundleWeb_FWD_DEFINED__ */ + + +#ifndef __IAppWeb_FWD_DEFINED__ +#define __IAppWeb_FWD_DEFINED__ +typedef interface IAppWeb IAppWeb; + +#endif /* __IAppWeb_FWD_DEFINED__ */ + + +#ifndef __IAppCommandWeb_FWD_DEFINED__ +#define __IAppCommandWeb_FWD_DEFINED__ +typedef interface IAppCommandWeb IAppCommandWeb; + +#endif /* __IAppCommandWeb_FWD_DEFINED__ */ + + +#ifndef __IAppVersionWeb_FWD_DEFINED__ +#define __IAppVersionWeb_FWD_DEFINED__ +typedef interface IAppVersionWeb IAppVersionWeb; + +#endif /* __IAppVersionWeb_FWD_DEFINED__ */ + + +#ifndef __ICoCreateAsyncStatus_FWD_DEFINED__ +#define __ICoCreateAsyncStatus_FWD_DEFINED__ +typedef interface ICoCreateAsyncStatus ICoCreateAsyncStatus; + +#endif /* __ICoCreateAsyncStatus_FWD_DEFINED__ */ + + +#ifndef __ICoCreateAsync_FWD_DEFINED__ +#define __ICoCreateAsync_FWD_DEFINED__ +typedef interface ICoCreateAsync ICoCreateAsync; + +#endif /* __ICoCreateAsync_FWD_DEFINED__ */ + + +#ifndef __IBrowserHttpRequest2_FWD_DEFINED__ +#define __IBrowserHttpRequest2_FWD_DEFINED__ +typedef interface IBrowserHttpRequest2 IBrowserHttpRequest2; + +#endif /* __IBrowserHttpRequest2_FWD_DEFINED__ */ + + +#ifndef __IProcessLauncher_FWD_DEFINED__ +#define __IProcessLauncher_FWD_DEFINED__ +typedef interface IProcessLauncher IProcessLauncher; + +#endif /* __IProcessLauncher_FWD_DEFINED__ */ + + +#ifndef __IOneClickProcessLauncher_FWD_DEFINED__ +#define __IOneClickProcessLauncher_FWD_DEFINED__ +typedef interface IOneClickProcessLauncher IOneClickProcessLauncher; + +#endif /* __IOneClickProcessLauncher_FWD_DEFINED__ */ + + +#ifndef __IProgressWndEvents_FWD_DEFINED__ +#define __IProgressWndEvents_FWD_DEFINED__ +typedef interface IProgressWndEvents IProgressWndEvents; + +#endif /* __IProgressWndEvents_FWD_DEFINED__ */ + + +#ifndef __IJobObserver_FWD_DEFINED__ +#define __IJobObserver_FWD_DEFINED__ +typedef interface IJobObserver IJobObserver; + +#endif /* __IJobObserver_FWD_DEFINED__ */ + + +#ifndef __IGoogleUpdate_FWD_DEFINED__ +#define __IGoogleUpdate_FWD_DEFINED__ +typedef interface IGoogleUpdate IGoogleUpdate; + +#endif /* __IGoogleUpdate_FWD_DEFINED__ */ + + +#ifndef __IGoogleUpdateCore_FWD_DEFINED__ +#define __IGoogleUpdateCore_FWD_DEFINED__ +typedef interface IGoogleUpdateCore IGoogleUpdateCore; + +#endif /* __IGoogleUpdateCore_FWD_DEFINED__ */ + + +#ifndef __IGoogleUpdate3_FWD_DEFINED__ +#define __IGoogleUpdate3_FWD_DEFINED__ +typedef interface IGoogleUpdate3 IGoogleUpdate3; + +#endif /* __IGoogleUpdate3_FWD_DEFINED__ */ + + +#ifndef __IAppBundle_FWD_DEFINED__ +#define __IAppBundle_FWD_DEFINED__ +typedef interface IAppBundle IAppBundle; + +#endif /* __IAppBundle_FWD_DEFINED__ */ + + +#ifndef __IApp_FWD_DEFINED__ +#define __IApp_FWD_DEFINED__ +typedef interface IApp IApp; + +#endif /* __IApp_FWD_DEFINED__ */ + + +#ifndef __IAppCommand_FWD_DEFINED__ +#define __IAppCommand_FWD_DEFINED__ +typedef interface IAppCommand IAppCommand; + +#endif /* __IAppCommand_FWD_DEFINED__ */ + + +#ifndef __IAppVersion_FWD_DEFINED__ +#define __IAppVersion_FWD_DEFINED__ +typedef interface IAppVersion IAppVersion; + +#endif /* __IAppVersion_FWD_DEFINED__ */ + + +#ifndef __IPackage_FWD_DEFINED__ +#define __IPackage_FWD_DEFINED__ +typedef interface IPackage IPackage; + +#endif /* __IPackage_FWD_DEFINED__ */ + + +#ifndef __ICurrentState_FWD_DEFINED__ +#define __ICurrentState_FWD_DEFINED__ +typedef interface ICurrentState ICurrentState; + +#endif /* __ICurrentState_FWD_DEFINED__ */ + + +#ifndef __IGoogleUpdate3Web_FWD_DEFINED__ +#define __IGoogleUpdate3Web_FWD_DEFINED__ +typedef interface IGoogleUpdate3Web IGoogleUpdate3Web; + +#endif /* __IGoogleUpdate3Web_FWD_DEFINED__ */ + + +#ifndef __IAppBundleWeb_FWD_DEFINED__ +#define __IAppBundleWeb_FWD_DEFINED__ +typedef interface IAppBundleWeb IAppBundleWeb; + +#endif /* __IAppBundleWeb_FWD_DEFINED__ */ + + +#ifndef __IAppWeb_FWD_DEFINED__ +#define __IAppWeb_FWD_DEFINED__ +typedef interface IAppWeb IAppWeb; + +#endif /* __IAppWeb_FWD_DEFINED__ */ + + +#ifndef __IAppCommandWeb_FWD_DEFINED__ +#define __IAppCommandWeb_FWD_DEFINED__ +typedef interface IAppCommandWeb IAppCommandWeb; + +#endif /* __IAppCommandWeb_FWD_DEFINED__ */ + + +#ifndef __IAppVersionWeb_FWD_DEFINED__ +#define __IAppVersionWeb_FWD_DEFINED__ +typedef interface IAppVersionWeb IAppVersionWeb; + +#endif /* __IAppVersionWeb_FWD_DEFINED__ */ + + +#ifndef __ICoCreateAsyncStatus_FWD_DEFINED__ +#define __ICoCreateAsyncStatus_FWD_DEFINED__ +typedef interface ICoCreateAsyncStatus ICoCreateAsyncStatus; + +#endif /* __ICoCreateAsyncStatus_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdate3UserClass_FWD_DEFINED__ +#define __GoogleUpdate3UserClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdate3UserClass GoogleUpdate3UserClass; +#else +typedef struct GoogleUpdate3UserClass GoogleUpdate3UserClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdate3UserClass_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdate3ServiceClass_FWD_DEFINED__ +#define __GoogleUpdate3ServiceClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdate3ServiceClass GoogleUpdate3ServiceClass; +#else +typedef struct GoogleUpdate3ServiceClass GoogleUpdate3ServiceClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdate3ServiceClass_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdate3WebUserClass_FWD_DEFINED__ +#define __GoogleUpdate3WebUserClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdate3WebUserClass GoogleUpdate3WebUserClass; +#else +typedef struct GoogleUpdate3WebUserClass GoogleUpdate3WebUserClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdate3WebUserClass_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdate3WebMachineClass_FWD_DEFINED__ +#define __GoogleUpdate3WebMachineClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdate3WebMachineClass GoogleUpdate3WebMachineClass; +#else +typedef struct GoogleUpdate3WebMachineClass GoogleUpdate3WebMachineClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdate3WebMachineClass_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdate3WebServiceClass_FWD_DEFINED__ +#define __GoogleUpdate3WebServiceClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdate3WebServiceClass GoogleUpdate3WebServiceClass; +#else +typedef struct GoogleUpdate3WebServiceClass GoogleUpdate3WebServiceClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdate3WebServiceClass_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdate3WebMachineFallbackClass_FWD_DEFINED__ +#define __GoogleUpdate3WebMachineFallbackClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdate3WebMachineFallbackClass GoogleUpdate3WebMachineFallbackClass; +#else +typedef struct GoogleUpdate3WebMachineFallbackClass GoogleUpdate3WebMachineFallbackClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdate3WebMachineFallbackClass_FWD_DEFINED__ */ + + +#ifndef __CurrentStateUserClass_FWD_DEFINED__ +#define __CurrentStateUserClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CurrentStateUserClass CurrentStateUserClass; +#else +typedef struct CurrentStateUserClass CurrentStateUserClass; +#endif /* __cplusplus */ + +#endif /* __CurrentStateUserClass_FWD_DEFINED__ */ + + +#ifndef __CurrentStateMachineClass_FWD_DEFINED__ +#define __CurrentStateMachineClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CurrentStateMachineClass CurrentStateMachineClass; +#else +typedef struct CurrentStateMachineClass CurrentStateMachineClass; +#endif /* __cplusplus */ + +#endif /* __CurrentStateMachineClass_FWD_DEFINED__ */ + + +#ifndef __CoCreateAsyncClass_FWD_DEFINED__ +#define __CoCreateAsyncClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CoCreateAsyncClass CoCreateAsyncClass; +#else +typedef struct CoCreateAsyncClass CoCreateAsyncClass; +#endif /* __cplusplus */ + +#endif /* __CoCreateAsyncClass_FWD_DEFINED__ */ + + +#ifndef __CredentialDialogUserClass_FWD_DEFINED__ +#define __CredentialDialogUserClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CredentialDialogUserClass CredentialDialogUserClass; +#else +typedef struct CredentialDialogUserClass CredentialDialogUserClass; +#endif /* __cplusplus */ + +#endif /* __CredentialDialogUserClass_FWD_DEFINED__ */ + + +#ifndef __CredentialDialogMachineClass_FWD_DEFINED__ +#define __CredentialDialogMachineClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CredentialDialogMachineClass CredentialDialogMachineClass; +#else +typedef struct CredentialDialogMachineClass CredentialDialogMachineClass; +#endif /* __cplusplus */ + +#endif /* __CredentialDialogMachineClass_FWD_DEFINED__ */ + + +#ifndef __ProcessLauncherClass_FWD_DEFINED__ +#define __ProcessLauncherClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class ProcessLauncherClass ProcessLauncherClass; +#else +typedef struct ProcessLauncherClass ProcessLauncherClass; +#endif /* __cplusplus */ + +#endif /* __ProcessLauncherClass_FWD_DEFINED__ */ + + +#ifndef __OneClickUserProcessLauncherClass_FWD_DEFINED__ +#define __OneClickUserProcessLauncherClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class OneClickUserProcessLauncherClass OneClickUserProcessLauncherClass; +#else +typedef struct OneClickUserProcessLauncherClass OneClickUserProcessLauncherClass; +#endif /* __cplusplus */ + +#endif /* __OneClickUserProcessLauncherClass_FWD_DEFINED__ */ + + +#ifndef __OneClickMachineProcessLauncherClass_FWD_DEFINED__ +#define __OneClickMachineProcessLauncherClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class OneClickMachineProcessLauncherClass OneClickMachineProcessLauncherClass; +#else +typedef struct OneClickMachineProcessLauncherClass OneClickMachineProcessLauncherClass; +#endif /* __cplusplus */ + +#endif /* __OneClickMachineProcessLauncherClass_FWD_DEFINED__ */ + + +#ifndef __OnDemandUserAppsClass_FWD_DEFINED__ +#define __OnDemandUserAppsClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class OnDemandUserAppsClass OnDemandUserAppsClass; +#else +typedef struct OnDemandUserAppsClass OnDemandUserAppsClass; +#endif /* __cplusplus */ + +#endif /* __OnDemandUserAppsClass_FWD_DEFINED__ */ + + +#ifndef __OnDemandMachineAppsClass_FWD_DEFINED__ +#define __OnDemandMachineAppsClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class OnDemandMachineAppsClass OnDemandMachineAppsClass; +#else +typedef struct OnDemandMachineAppsClass OnDemandMachineAppsClass; +#endif /* __cplusplus */ + +#endif /* __OnDemandMachineAppsClass_FWD_DEFINED__ */ + + +#ifndef __OnDemandMachineAppsServiceClass_FWD_DEFINED__ +#define __OnDemandMachineAppsServiceClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class OnDemandMachineAppsServiceClass OnDemandMachineAppsServiceClass; +#else +typedef struct OnDemandMachineAppsServiceClass OnDemandMachineAppsServiceClass; +#endif /* __cplusplus */ + +#endif /* __OnDemandMachineAppsServiceClass_FWD_DEFINED__ */ + + +#ifndef __OnDemandMachineAppsFallbackClass_FWD_DEFINED__ +#define __OnDemandMachineAppsFallbackClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class OnDemandMachineAppsFallbackClass OnDemandMachineAppsFallbackClass; +#else +typedef struct OnDemandMachineAppsFallbackClass OnDemandMachineAppsFallbackClass; +#endif /* __cplusplus */ + +#endif /* __OnDemandMachineAppsFallbackClass_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdateCoreClass_FWD_DEFINED__ +#define __GoogleUpdateCoreClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdateCoreClass GoogleUpdateCoreClass; +#else +typedef struct GoogleUpdateCoreClass GoogleUpdateCoreClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdateCoreClass_FWD_DEFINED__ */ + + +#ifndef __GoogleUpdateCoreMachineClass_FWD_DEFINED__ +#define __GoogleUpdateCoreMachineClass_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class GoogleUpdateCoreMachineClass GoogleUpdateCoreMachineClass; +#else +typedef struct GoogleUpdateCoreMachineClass GoogleUpdateCoreMachineClass; +#endif /* __cplusplus */ + +#endif /* __GoogleUpdateCoreMachineClass_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_google_update_idl_0000_0000 */ +/* [local] */ + +typedef +enum BrowserType + { + BROWSER_UNKNOWN = 0, + BROWSER_DEFAULT = 1, + BROWSER_INTERNET_EXPLORER = 2, + BROWSER_FIREFOX = 3, + BROWSER_CHROME = 4 + } BrowserType; + +typedef +enum CurrentState + { + STATE_INIT = 1, + STATE_WAITING_TO_CHECK_FOR_UPDATE = 2, + STATE_CHECKING_FOR_UPDATE = 3, + STATE_UPDATE_AVAILABLE = 4, + STATE_WAITING_TO_DOWNLOAD = 5, + STATE_RETRYING_DOWNLOAD = 6, + STATE_DOWNLOADING = 7, + STATE_DOWNLOAD_COMPLETE = 8, + STATE_EXTRACTING = 9, + STATE_APPLYING_DIFFERENTIAL_PATCH = 10, + STATE_READY_TO_INSTALL = 11, + STATE_WAITING_TO_INSTALL = 12, + STATE_INSTALLING = 13, + STATE_INSTALL_COMPLETE = 14, + STATE_PAUSED = 15, + STATE_NO_UPDATE = 16, + STATE_ERROR = 17 + } CurrentState; + +typedef +enum InstallPriority + { + INSTALL_PRIORITY_LOW = 0, + INSTALL_PRIORITY_HIGH = 10 + } InstallPriority; + +typedef +enum PostInstallAction + { + POST_INSTALL_ACTION_DEFAULT = 0, + POST_INSTALL_ACTION_EXIT_SILENTLY = 1, + POST_INSTALL_ACTION_LAUNCH_COMMAND = 2, + POST_INSTALL_ACTION_EXIT_SILENTLY_ON_LAUNCH_COMMAND = 3, + POST_INSTALL_ACTION_RESTART_BROWSER = 4, + POST_INSTALL_ACTION_RESTART_ALL_BROWSERS = 5, + POST_INSTALL_ACTION_REBOOT = 6 + } PostInstallAction; + + +enum AppCommandStatus + { + COMMAND_STATUS_INIT = 1, + COMMAND_STATUS_RUNNING = 2, + COMMAND_STATUS_ERROR = 3, + COMMAND_STATUS_COMPLETE = 4 + } ; + + +extern RPC_IF_HANDLE __MIDL_itf_google_update_idl_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_google_update_idl_0000_0000_v0_0_s_ifspec; + +#ifndef __IGoogleUpdate3_INTERFACE_DEFINED__ +#define __IGoogleUpdate3_INTERFACE_DEFINED__ + +/* interface IGoogleUpdate3 */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IGoogleUpdate3; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6DB17455-4E85-46e7-9D23-E555E4B005AF") + IGoogleUpdate3 : public IDispatch + { + public: + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ long *count) = 0; + + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Item( + /* [in] */ long index, + /* [retval][out] */ IDispatch **bundle) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE createAppBundle( + /* [retval][out] */ IDispatch **app_bundle) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IGoogleUpdate3Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IGoogleUpdate3 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IGoogleUpdate3 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IGoogleUpdate3 * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IGoogleUpdate3 * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IGoogleUpdate3 * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IGoogleUpdate3 * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IGoogleUpdate3 * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + IGoogleUpdate3 * This, + /* [retval][out] */ long *count); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )( + IGoogleUpdate3 * This, + /* [in] */ long index, + /* [retval][out] */ IDispatch **bundle); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *createAppBundle )( + IGoogleUpdate3 * This, + /* [retval][out] */ IDispatch **app_bundle); + + END_INTERFACE + } IGoogleUpdate3Vtbl; + + interface IGoogleUpdate3 + { + CONST_VTBL struct IGoogleUpdate3Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IGoogleUpdate3_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IGoogleUpdate3_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IGoogleUpdate3_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IGoogleUpdate3_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IGoogleUpdate3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IGoogleUpdate3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IGoogleUpdate3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IGoogleUpdate3_get_Count(This,count) \ + ( (This)->lpVtbl -> get_Count(This,count) ) + +#define IGoogleUpdate3_get_Item(This,index,bundle) \ + ( (This)->lpVtbl -> get_Item(This,index,bundle) ) + +#define IGoogleUpdate3_createAppBundle(This,app_bundle) \ + ( (This)->lpVtbl -> createAppBundle(This,app_bundle) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IGoogleUpdate3_INTERFACE_DEFINED__ */ + + +#ifndef __IAppBundle_INTERFACE_DEFINED__ +#define __IAppBundle_INTERFACE_DEFINED__ + +/* interface IAppBundle */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IAppBundle; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fe908cdd-22bb-472a-9870-1a0390e42f36") + IAppBundle : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_displayName( + /* [retval][out] */ BSTR *__MIDL__IAppBundle0000) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_displayName( + /* [in] */ BSTR __MIDL__IAppBundle0001) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_displayLanguage( + /* [retval][out] */ BSTR *__MIDL__IAppBundle0002) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_displayLanguage( + /* [in] */ BSTR __MIDL__IAppBundle0003) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_installSource( + /* [retval][out] */ BSTR *__MIDL__IAppBundle0004) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_installSource( + /* [in] */ BSTR __MIDL__IAppBundle0005) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_originURL( + /* [retval][out] */ BSTR *__MIDL__IAppBundle0006) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_originURL( + /* [in] */ BSTR __MIDL__IAppBundle0007) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_offlineDirectory( + /* [retval][out] */ BSTR *offline_dir) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_offlineDirectory( + /* [in] */ BSTR offline_dir) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_sessionId( + /* [retval][out] */ BSTR *session_id) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_sessionId( + /* [in] */ BSTR session_id) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_sendPings( + /* [retval][out] */ VARIANT_BOOL *send_pings) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_sendPings( + /* [in] */ VARIANT_BOOL send_pings) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_priority( + /* [retval][out] */ long *priority) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_priority( + /* [in] */ long priority) = 0; + + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Count( + /* [retval][out] */ long *count) = 0; + + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Item( + /* [in] */ long index, + /* [retval][out] */ IDispatch **app) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_altTokens( + /* [in] */ ULONG_PTR impersonation_token, + /* [in] */ ULONG_PTR primary_token, + /* [in] */ DWORD caller_proc_id) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_parentHWND( + /* [in] */ ULONG_PTR hwnd) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE initialize( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE createApp( + /* [in] */ BSTR app_id, + /* [retval][out] */ IDispatch **app) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE createInstalledApp( + /* [in] */ BSTR app_id, + /* [retval][out] */ IDispatch **app) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE createAllInstalledApps( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE checkForUpdate( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE download( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE install( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE updateAllApps( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE stop( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE pause( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE resume( void) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE isBusy( + /* [retval][out] */ VARIANT_BOOL *is_busy) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE downloadPackage( + /* [in] */ BSTR app_id, + /* [in] */ BSTR package_name) = 0; + + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_currentState( + /* [retval][out] */ VARIANT *current_state) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppBundleVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAppBundle * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAppBundle * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAppBundle * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAppBundle * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAppBundle * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAppBundle * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAppBundle * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_displayName )( + IAppBundle * This, + /* [retval][out] */ BSTR *__MIDL__IAppBundle0000); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_displayName )( + IAppBundle * This, + /* [in] */ BSTR __MIDL__IAppBundle0001); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_displayLanguage )( + IAppBundle * This, + /* [retval][out] */ BSTR *__MIDL__IAppBundle0002); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_displayLanguage )( + IAppBundle * This, + /* [in] */ BSTR __MIDL__IAppBundle0003); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_installSource )( + IAppBundle * This, + /* [retval][out] */ BSTR *__MIDL__IAppBundle0004); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_installSource )( + IAppBundle * This, + /* [in] */ BSTR __MIDL__IAppBundle0005); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_originURL )( + IAppBundle * This, + /* [retval][out] */ BSTR *__MIDL__IAppBundle0006); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_originURL )( + IAppBundle * This, + /* [in] */ BSTR __MIDL__IAppBundle0007); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offlineDirectory )( + IAppBundle * This, + /* [retval][out] */ BSTR *offline_dir); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_offlineDirectory )( + IAppBundle * This, + /* [in] */ BSTR offline_dir); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_sessionId )( + IAppBundle * This, + /* [retval][out] */ BSTR *session_id); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_sessionId )( + IAppBundle * This, + /* [in] */ BSTR session_id); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_sendPings )( + IAppBundle * This, + /* [retval][out] */ VARIANT_BOOL *send_pings); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_sendPings )( + IAppBundle * This, + /* [in] */ VARIANT_BOOL send_pings); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_priority )( + IAppBundle * This, + /* [retval][out] */ long *priority); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_priority )( + IAppBundle * This, + /* [in] */ long priority); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Count )( + IAppBundle * This, + /* [retval][out] */ long *count); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Item )( + IAppBundle * This, + /* [in] */ long index, + /* [retval][out] */ IDispatch **app); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_altTokens )( + IAppBundle * This, + /* [in] */ ULONG_PTR impersonation_token, + /* [in] */ ULONG_PTR primary_token, + /* [in] */ DWORD caller_proc_id); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_parentHWND )( + IAppBundle * This, + /* [in] */ ULONG_PTR hwnd); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *initialize )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *createApp )( + IAppBundle * This, + /* [in] */ BSTR app_id, + /* [retval][out] */ IDispatch **app); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *createInstalledApp )( + IAppBundle * This, + /* [in] */ BSTR app_id, + /* [retval][out] */ IDispatch **app); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *createAllInstalledApps )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *checkForUpdate )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *download )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *install )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *updateAllApps )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *stop )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *pause )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *resume )( + IAppBundle * This); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *isBusy )( + IAppBundle * This, + /* [retval][out] */ VARIANT_BOOL *is_busy); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *downloadPackage )( + IAppBundle * This, + /* [in] */ BSTR app_id, + /* [in] */ BSTR package_name); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentState )( + IAppBundle * This, + /* [retval][out] */ VARIANT *current_state); + + END_INTERFACE + } IAppBundleVtbl; + + interface IAppBundle + { + CONST_VTBL struct IAppBundleVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAppBundle_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAppBundle_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAppBundle_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAppBundle_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAppBundle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAppBundle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAppBundle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAppBundle_get_displayName(This,__MIDL__IAppBundle0000) \ + ( (This)->lpVtbl -> get_displayName(This,__MIDL__IAppBundle0000) ) + +#define IAppBundle_put_displayName(This,__MIDL__IAppBundle0001) \ + ( (This)->lpVtbl -> put_displayName(This,__MIDL__IAppBundle0001) ) + +#define IAppBundle_get_displayLanguage(This,__MIDL__IAppBundle0002) \ + ( (This)->lpVtbl -> get_displayLanguage(This,__MIDL__IAppBundle0002) ) + +#define IAppBundle_put_displayLanguage(This,__MIDL__IAppBundle0003) \ + ( (This)->lpVtbl -> put_displayLanguage(This,__MIDL__IAppBundle0003) ) + +#define IAppBundle_get_installSource(This,__MIDL__IAppBundle0004) \ + ( (This)->lpVtbl -> get_installSource(This,__MIDL__IAppBundle0004) ) + +#define IAppBundle_put_installSource(This,__MIDL__IAppBundle0005) \ + ( (This)->lpVtbl -> put_installSource(This,__MIDL__IAppBundle0005) ) + +#define IAppBundle_get_originURL(This,__MIDL__IAppBundle0006) \ + ( (This)->lpVtbl -> get_originURL(This,__MIDL__IAppBundle0006) ) + +#define IAppBundle_put_originURL(This,__MIDL__IAppBundle0007) \ + ( (This)->lpVtbl -> put_originURL(This,__MIDL__IAppBundle0007) ) + +#define IAppBundle_get_offlineDirectory(This,offline_dir) \ + ( (This)->lpVtbl -> get_offlineDirectory(This,offline_dir) ) + +#define IAppBundle_put_offlineDirectory(This,offline_dir) \ + ( (This)->lpVtbl -> put_offlineDirectory(This,offline_dir) ) + +#define IAppBundle_get_sessionId(This,session_id) \ + ( (This)->lpVtbl -> get_sessionId(This,session_id) ) + +#define IAppBundle_put_sessionId(This,session_id) \ + ( (This)->lpVtbl -> put_sessionId(This,session_id) ) + +#define IAppBundle_get_sendPings(This,send_pings) \ + ( (This)->lpVtbl -> get_sendPings(This,send_pings) ) + +#define IAppBundle_put_sendPings(This,send_pings) \ + ( (This)->lpVtbl -> put_sendPings(This,send_pings) ) + +#define IAppBundle_get_priority(This,priority) \ + ( (This)->lpVtbl -> get_priority(This,priority) ) + +#define IAppBundle_put_priority(This,priority) \ + ( (This)->lpVtbl -> put_priority(This,priority) ) + +#define IAppBundle_get_Count(This,count) \ + ( (This)->lpVtbl -> get_Count(This,count) ) + +#define IAppBundle_get_Item(This,index,app) \ + ( (This)->lpVtbl -> get_Item(This,index,app) ) + +#define IAppBundle_put_altTokens(This,impersonation_token,primary_token,caller_proc_id) \ + ( (This)->lpVtbl -> put_altTokens(This,impersonation_token,primary_token,caller_proc_id) ) + +#define IAppBundle_put_parentHWND(This,hwnd) \ + ( (This)->lpVtbl -> put_parentHWND(This,hwnd) ) + +#define IAppBundle_initialize(This) \ + ( (This)->lpVtbl -> initialize(This) ) + +#define IAppBundle_createApp(This,app_id,app) \ + ( (This)->lpVtbl -> createApp(This,app_id,app) ) + +#define IAppBundle_createInstalledApp(This,app_id,app) \ + ( (This)->lpVtbl -> createInstalledApp(This,app_id,app) ) + +#define IAppBundle_createAllInstalledApps(This) \ + ( (This)->lpVtbl -> createAllInstalledApps(This) ) + +#define IAppBundle_checkForUpdate(This) \ + ( (This)->lpVtbl -> checkForUpdate(This) ) + +#define IAppBundle_download(This) \ + ( (This)->lpVtbl -> download(This) ) + +#define IAppBundle_install(This) \ + ( (This)->lpVtbl -> install(This) ) + +#define IAppBundle_updateAllApps(This) \ + ( (This)->lpVtbl -> updateAllApps(This) ) + +#define IAppBundle_stop(This) \ + ( (This)->lpVtbl -> stop(This) ) + +#define IAppBundle_pause(This) \ + ( (This)->lpVtbl -> pause(This) ) + +#define IAppBundle_resume(This) \ + ( (This)->lpVtbl -> resume(This) ) + +#define IAppBundle_isBusy(This,is_busy) \ + ( (This)->lpVtbl -> isBusy(This,is_busy) ) + +#define IAppBundle_downloadPackage(This,app_id,package_name) \ + ( (This)->lpVtbl -> downloadPackage(This,app_id,package_name) ) + +#define IAppBundle_get_currentState(This,current_state) \ + ( (This)->lpVtbl -> get_currentState(This,current_state) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAppBundle_INTERFACE_DEFINED__ */ + + +#ifndef __IApp_INTERFACE_DEFINED__ +#define __IApp_INTERFACE_DEFINED__ + +/* interface IApp */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IApp; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("76F7B787-A67C-4c73-82C7-31F5E3AABC5C") + IApp : public IDispatch + { + public: + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_currentVersion( + /* [retval][out] */ IDispatch **current) = 0; + + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_nextVersion( + /* [retval][out] */ IDispatch **next) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appId( + /* [retval][out] */ BSTR *__MIDL__IApp0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_displayName( + /* [retval][out] */ BSTR *__MIDL__IApp0001) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_displayName( + /* [in] */ BSTR __MIDL__IApp0002) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_language( + /* [retval][out] */ BSTR *__MIDL__IApp0003) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_language( + /* [in] */ BSTR __MIDL__IApp0004) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ap( + /* [retval][out] */ BSTR *__MIDL__IApp0005) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ap( + /* [in] */ BSTR __MIDL__IApp0006) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ttToken( + /* [retval][out] */ BSTR *__MIDL__IApp0007) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ttToken( + /* [in] */ BSTR __MIDL__IApp0008) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_iid( + /* [retval][out] */ BSTR *__MIDL__IApp0009) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_iid( + /* [in] */ BSTR __MIDL__IApp0010) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_brandCode( + /* [retval][out] */ BSTR *__MIDL__IApp0011) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_brandCode( + /* [in] */ BSTR __MIDL__IApp0012) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_clientId( + /* [retval][out] */ BSTR *__MIDL__IApp0013) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_clientId( + /* [in] */ BSTR __MIDL__IApp0014) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_labels( + /* [retval][out] */ BSTR *__MIDL__IApp0015) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_labels( + /* [in] */ BSTR __MIDL__IApp0016) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_referralId( + /* [retval][out] */ BSTR *__MIDL__IApp0017) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_referralId( + /* [in] */ BSTR __MIDL__IApp0018) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_command( + /* [in] */ BSTR command_id, + /* [retval][out] */ IDispatch **command) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_browserType( + /* [retval][out] */ UINT *__MIDL__IApp0019) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_browserType( + /* [in] */ UINT __MIDL__IApp0020) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_clientInstallData( + /* [retval][out] */ BSTR *__MIDL__IApp0021) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_clientInstallData( + /* [in] */ BSTR __MIDL__IApp0022) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_serverInstallDataIndex( + /* [retval][out] */ BSTR *__MIDL__IApp0023) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_serverInstallDataIndex( + /* [in] */ BSTR __MIDL__IApp0024) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isEulaAccepted( + /* [retval][out] */ VARIANT_BOOL *__MIDL__IApp0025) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_isEulaAccepted( + /* [in] */ VARIANT_BOOL __MIDL__IApp0026) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_usageStatsEnable( + /* [retval][out] */ UINT *__MIDL__IApp0027) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_usageStatsEnable( + /* [in] */ UINT __MIDL__IApp0028) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_installTimeDiffSec( + /* [retval][out] */ UINT *__MIDL__IApp0029) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentState( + /* [retval][out] */ IDispatch **__MIDL__IApp0030) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IApp * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IApp * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IApp * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IApp * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IApp * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IApp * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IApp * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentVersion )( + IApp * This, + /* [retval][out] */ IDispatch **current); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_nextVersion )( + IApp * This, + /* [retval][out] */ IDispatch **next); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appId )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_displayName )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0001); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_displayName )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0002); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_language )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0003); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_language )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0004); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ap )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0005); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ap )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0006); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ttToken )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0007); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ttToken )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0008); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_iid )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0009); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_iid )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0010); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_brandCode )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0011); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_brandCode )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0012); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_clientId )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0013); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_clientId )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0014); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_labels )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0015); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_labels )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0016); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_referralId )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0017); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_referralId )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0018); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_command )( + IApp * This, + /* [in] */ BSTR command_id, + /* [retval][out] */ IDispatch **command); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_browserType )( + IApp * This, + /* [retval][out] */ UINT *__MIDL__IApp0019); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_browserType )( + IApp * This, + /* [in] */ UINT __MIDL__IApp0020); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_clientInstallData )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0021); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_clientInstallData )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0022); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_serverInstallDataIndex )( + IApp * This, + /* [retval][out] */ BSTR *__MIDL__IApp0023); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_serverInstallDataIndex )( + IApp * This, + /* [in] */ BSTR __MIDL__IApp0024); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isEulaAccepted )( + IApp * This, + /* [retval][out] */ VARIANT_BOOL *__MIDL__IApp0025); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_isEulaAccepted )( + IApp * This, + /* [in] */ VARIANT_BOOL __MIDL__IApp0026); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_usageStatsEnable )( + IApp * This, + /* [retval][out] */ UINT *__MIDL__IApp0027); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_usageStatsEnable )( + IApp * This, + /* [in] */ UINT __MIDL__IApp0028); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_installTimeDiffSec )( + IApp * This, + /* [retval][out] */ UINT *__MIDL__IApp0029); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentState )( + IApp * This, + /* [retval][out] */ IDispatch **__MIDL__IApp0030); + + END_INTERFACE + } IAppVtbl; + + interface IApp + { + CONST_VTBL struct IAppVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IApp_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IApp_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IApp_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IApp_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IApp_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IApp_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IApp_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IApp_get_currentVersion(This,current) \ + ( (This)->lpVtbl -> get_currentVersion(This,current) ) + +#define IApp_get_nextVersion(This,next) \ + ( (This)->lpVtbl -> get_nextVersion(This,next) ) + +#define IApp_get_appId(This,__MIDL__IApp0000) \ + ( (This)->lpVtbl -> get_appId(This,__MIDL__IApp0000) ) + +#define IApp_get_displayName(This,__MIDL__IApp0001) \ + ( (This)->lpVtbl -> get_displayName(This,__MIDL__IApp0001) ) + +#define IApp_put_displayName(This,__MIDL__IApp0002) \ + ( (This)->lpVtbl -> put_displayName(This,__MIDL__IApp0002) ) + +#define IApp_get_language(This,__MIDL__IApp0003) \ + ( (This)->lpVtbl -> get_language(This,__MIDL__IApp0003) ) + +#define IApp_put_language(This,__MIDL__IApp0004) \ + ( (This)->lpVtbl -> put_language(This,__MIDL__IApp0004) ) + +#define IApp_get_ap(This,__MIDL__IApp0005) \ + ( (This)->lpVtbl -> get_ap(This,__MIDL__IApp0005) ) + +#define IApp_put_ap(This,__MIDL__IApp0006) \ + ( (This)->lpVtbl -> put_ap(This,__MIDL__IApp0006) ) + +#define IApp_get_ttToken(This,__MIDL__IApp0007) \ + ( (This)->lpVtbl -> get_ttToken(This,__MIDL__IApp0007) ) + +#define IApp_put_ttToken(This,__MIDL__IApp0008) \ + ( (This)->lpVtbl -> put_ttToken(This,__MIDL__IApp0008) ) + +#define IApp_get_iid(This,__MIDL__IApp0009) \ + ( (This)->lpVtbl -> get_iid(This,__MIDL__IApp0009) ) + +#define IApp_put_iid(This,__MIDL__IApp0010) \ + ( (This)->lpVtbl -> put_iid(This,__MIDL__IApp0010) ) + +#define IApp_get_brandCode(This,__MIDL__IApp0011) \ + ( (This)->lpVtbl -> get_brandCode(This,__MIDL__IApp0011) ) + +#define IApp_put_brandCode(This,__MIDL__IApp0012) \ + ( (This)->lpVtbl -> put_brandCode(This,__MIDL__IApp0012) ) + +#define IApp_get_clientId(This,__MIDL__IApp0013) \ + ( (This)->lpVtbl -> get_clientId(This,__MIDL__IApp0013) ) + +#define IApp_put_clientId(This,__MIDL__IApp0014) \ + ( (This)->lpVtbl -> put_clientId(This,__MIDL__IApp0014) ) + +#define IApp_get_labels(This,__MIDL__IApp0015) \ + ( (This)->lpVtbl -> get_labels(This,__MIDL__IApp0015) ) + +#define IApp_put_labels(This,__MIDL__IApp0016) \ + ( (This)->lpVtbl -> put_labels(This,__MIDL__IApp0016) ) + +#define IApp_get_referralId(This,__MIDL__IApp0017) \ + ( (This)->lpVtbl -> get_referralId(This,__MIDL__IApp0017) ) + +#define IApp_put_referralId(This,__MIDL__IApp0018) \ + ( (This)->lpVtbl -> put_referralId(This,__MIDL__IApp0018) ) + +#define IApp_get_command(This,command_id,command) \ + ( (This)->lpVtbl -> get_command(This,command_id,command) ) + +#define IApp_get_browserType(This,__MIDL__IApp0019) \ + ( (This)->lpVtbl -> get_browserType(This,__MIDL__IApp0019) ) + +#define IApp_put_browserType(This,__MIDL__IApp0020) \ + ( (This)->lpVtbl -> put_browserType(This,__MIDL__IApp0020) ) + +#define IApp_get_clientInstallData(This,__MIDL__IApp0021) \ + ( (This)->lpVtbl -> get_clientInstallData(This,__MIDL__IApp0021) ) + +#define IApp_put_clientInstallData(This,__MIDL__IApp0022) \ + ( (This)->lpVtbl -> put_clientInstallData(This,__MIDL__IApp0022) ) + +#define IApp_get_serverInstallDataIndex(This,__MIDL__IApp0023) \ + ( (This)->lpVtbl -> get_serverInstallDataIndex(This,__MIDL__IApp0023) ) + +#define IApp_put_serverInstallDataIndex(This,__MIDL__IApp0024) \ + ( (This)->lpVtbl -> put_serverInstallDataIndex(This,__MIDL__IApp0024) ) + +#define IApp_get_isEulaAccepted(This,__MIDL__IApp0025) \ + ( (This)->lpVtbl -> get_isEulaAccepted(This,__MIDL__IApp0025) ) + +#define IApp_put_isEulaAccepted(This,__MIDL__IApp0026) \ + ( (This)->lpVtbl -> put_isEulaAccepted(This,__MIDL__IApp0026) ) + +#define IApp_get_usageStatsEnable(This,__MIDL__IApp0027) \ + ( (This)->lpVtbl -> get_usageStatsEnable(This,__MIDL__IApp0027) ) + +#define IApp_put_usageStatsEnable(This,__MIDL__IApp0028) \ + ( (This)->lpVtbl -> put_usageStatsEnable(This,__MIDL__IApp0028) ) + +#define IApp_get_installTimeDiffSec(This,__MIDL__IApp0029) \ + ( (This)->lpVtbl -> get_installTimeDiffSec(This,__MIDL__IApp0029) ) + +#define IApp_get_currentState(This,__MIDL__IApp0030) \ + ( (This)->lpVtbl -> get_currentState(This,__MIDL__IApp0030) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IApp_INTERFACE_DEFINED__ */ + + +#ifndef __IAppCommand_INTERFACE_DEFINED__ +#define __IAppCommand_INTERFACE_DEFINED__ + +/* interface IAppCommand */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IAppCommand; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4DE778FE-F195-4ee3-9DAB-FE446C239221") + IAppCommand : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isWebAccessible( + /* [retval][out] */ VARIANT_BOOL *__MIDL__IAppCommand0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_status( + /* [retval][out] */ UINT *__MIDL__IAppCommand0001) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_exitCode( + /* [retval][out] */ DWORD *__MIDL__IAppCommand0002) = 0; + + virtual HRESULT STDMETHODCALLTYPE execute( + /* [optional][in] */ VARIANT arg1, + /* [optional][in] */ VARIANT arg2, + /* [optional][in] */ VARIANT arg3, + /* [optional][in] */ VARIANT arg4, + /* [optional][in] */ VARIANT arg5, + /* [optional][in] */ VARIANT arg6, + /* [optional][in] */ VARIANT arg7, + /* [optional][in] */ VARIANT arg8, + /* [optional][in] */ VARIANT arg9) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppCommandVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAppCommand * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAppCommand * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAppCommand * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAppCommand * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAppCommand * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAppCommand * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAppCommand * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isWebAccessible )( + IAppCommand * This, + /* [retval][out] */ VARIANT_BOOL *__MIDL__IAppCommand0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_status )( + IAppCommand * This, + /* [retval][out] */ UINT *__MIDL__IAppCommand0001); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_exitCode )( + IAppCommand * This, + /* [retval][out] */ DWORD *__MIDL__IAppCommand0002); + + HRESULT ( STDMETHODCALLTYPE *execute )( + IAppCommand * This, + /* [optional][in] */ VARIANT arg1, + /* [optional][in] */ VARIANT arg2, + /* [optional][in] */ VARIANT arg3, + /* [optional][in] */ VARIANT arg4, + /* [optional][in] */ VARIANT arg5, + /* [optional][in] */ VARIANT arg6, + /* [optional][in] */ VARIANT arg7, + /* [optional][in] */ VARIANT arg8, + /* [optional][in] */ VARIANT arg9); + + END_INTERFACE + } IAppCommandVtbl; + + interface IAppCommand + { + CONST_VTBL struct IAppCommandVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAppCommand_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAppCommand_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAppCommand_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAppCommand_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAppCommand_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAppCommand_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAppCommand_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAppCommand_get_isWebAccessible(This,__MIDL__IAppCommand0000) \ + ( (This)->lpVtbl -> get_isWebAccessible(This,__MIDL__IAppCommand0000) ) + +#define IAppCommand_get_status(This,__MIDL__IAppCommand0001) \ + ( (This)->lpVtbl -> get_status(This,__MIDL__IAppCommand0001) ) + +#define IAppCommand_get_exitCode(This,__MIDL__IAppCommand0002) \ + ( (This)->lpVtbl -> get_exitCode(This,__MIDL__IAppCommand0002) ) + +#define IAppCommand_execute(This,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) \ + ( (This)->lpVtbl -> execute(This,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAppCommand_INTERFACE_DEFINED__ */ + + +#ifndef __IAppVersion_INTERFACE_DEFINED__ +#define __IAppVersion_INTERFACE_DEFINED__ + +/* interface IAppVersion */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IAppVersion; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("BCDCB538-01C0-46d1-A6A7-52F4D021C272") + IAppVersion : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_version( + /* [retval][out] */ BSTR *__MIDL__IAppVersion0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageCount( + /* [retval][out] */ long *count) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_package( + /* [in] */ long index, + /* [retval][out] */ IDispatch **package) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppVersionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAppVersion * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAppVersion * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAppVersion * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAppVersion * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAppVersion * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAppVersion * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAppVersion * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_version )( + IAppVersion * This, + /* [retval][out] */ BSTR *__MIDL__IAppVersion0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageCount )( + IAppVersion * This, + /* [retval][out] */ long *count); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_package )( + IAppVersion * This, + /* [in] */ long index, + /* [retval][out] */ IDispatch **package); + + END_INTERFACE + } IAppVersionVtbl; + + interface IAppVersion + { + CONST_VTBL struct IAppVersionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAppVersion_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAppVersion_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAppVersion_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAppVersion_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAppVersion_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAppVersion_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAppVersion_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAppVersion_get_version(This,__MIDL__IAppVersion0000) \ + ( (This)->lpVtbl -> get_version(This,__MIDL__IAppVersion0000) ) + +#define IAppVersion_get_packageCount(This,count) \ + ( (This)->lpVtbl -> get_packageCount(This,count) ) + +#define IAppVersion_get_package(This,index,package) \ + ( (This)->lpVtbl -> get_package(This,index,package) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAppVersion_INTERFACE_DEFINED__ */ + + +#ifndef __IPackage_INTERFACE_DEFINED__ +#define __IPackage_INTERFACE_DEFINED__ + +/* interface IPackage */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IPackage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("DCAB8386-4F03-4dbd-A366-D90BC9F68DE6") + IPackage : public IDispatch + { + public: + virtual /* [id] */ HRESULT STDMETHODCALLTYPE get( + /* [in] */ BSTR dir) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isAvailable( + /* [retval][out] */ VARIANT_BOOL *__MIDL__IPackage0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_filename( + /* [retval][out] */ BSTR *__MIDL__IPackage0001) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IPackageVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IPackage * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IPackage * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IPackage * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IPackage * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IPackage * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IPackage * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IPackage * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *get )( + IPackage * This, + /* [in] */ BSTR dir); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isAvailable )( + IPackage * This, + /* [retval][out] */ VARIANT_BOOL *__MIDL__IPackage0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_filename )( + IPackage * This, + /* [retval][out] */ BSTR *__MIDL__IPackage0001); + + END_INTERFACE + } IPackageVtbl; + + interface IPackage + { + CONST_VTBL struct IPackageVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IPackage_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IPackage_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IPackage_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IPackage_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IPackage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IPackage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IPackage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IPackage_get(This,dir) \ + ( (This)->lpVtbl -> get(This,dir) ) + +#define IPackage_get_isAvailable(This,__MIDL__IPackage0000) \ + ( (This)->lpVtbl -> get_isAvailable(This,__MIDL__IPackage0000) ) + +#define IPackage_get_filename(This,__MIDL__IPackage0001) \ + ( (This)->lpVtbl -> get_filename(This,__MIDL__IPackage0001) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IPackage_INTERFACE_DEFINED__ */ + + +#ifndef __ICurrentState_INTERFACE_DEFINED__ +#define __ICurrentState_INTERFACE_DEFINED__ + +/* interface ICurrentState */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_ICurrentState; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("247954F9-9EDC-4E68-8CC3-150C2B89EADF") + ICurrentState : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_stateValue( + /* [retval][out] */ LONG *__MIDL__ICurrentState0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_availableVersion( + /* [retval][out] */ BSTR *__MIDL__ICurrentState0001) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_bytesDownloaded( + /* [retval][out] */ ULONG *__MIDL__ICurrentState0002) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_totalBytesToDownload( + /* [retval][out] */ ULONG *__MIDL__ICurrentState0003) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_downloadTimeRemainingMs( + /* [retval][out] */ LONG *__MIDL__ICurrentState0004) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nextRetryTime( + /* [retval][out] */ ULONGLONG *__MIDL__ICurrentState0005) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_installProgress( + /* [retval][out] */ LONG *__MIDL__ICurrentState0006) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_installTimeRemainingMs( + /* [retval][out] */ LONG *__MIDL__ICurrentState0007) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isCanceled( + /* [retval][out] */ VARIANT_BOOL *is_canceled) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_errorCode( + /* [retval][out] */ LONG *__MIDL__ICurrentState0008) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extraCode1( + /* [retval][out] */ LONG *__MIDL__ICurrentState0009) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_completionMessage( + /* [retval][out] */ BSTR *__MIDL__ICurrentState0010) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_installerResultCode( + /* [retval][out] */ LONG *__MIDL__ICurrentState0011) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_installerResultExtraCode1( + /* [retval][out] */ LONG *__MIDL__ICurrentState0012) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_postInstallLaunchCommandLine( + /* [retval][out] */ BSTR *__MIDL__ICurrentState0013) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_postInstallUrl( + /* [retval][out] */ BSTR *__MIDL__ICurrentState0014) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_postInstallAction( + /* [retval][out] */ LONG *__MIDL__ICurrentState0015) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICurrentStateVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICurrentState * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICurrentState * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICurrentState * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + ICurrentState * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + ICurrentState * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + ICurrentState * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICurrentState * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_stateValue )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_availableVersion )( + ICurrentState * This, + /* [retval][out] */ BSTR *__MIDL__ICurrentState0001); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_bytesDownloaded )( + ICurrentState * This, + /* [retval][out] */ ULONG *__MIDL__ICurrentState0002); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_totalBytesToDownload )( + ICurrentState * This, + /* [retval][out] */ ULONG *__MIDL__ICurrentState0003); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_downloadTimeRemainingMs )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0004); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nextRetryTime )( + ICurrentState * This, + /* [retval][out] */ ULONGLONG *__MIDL__ICurrentState0005); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_installProgress )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0006); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_installTimeRemainingMs )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0007); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isCanceled )( + ICurrentState * This, + /* [retval][out] */ VARIANT_BOOL *is_canceled); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_errorCode )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0008); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extraCode1 )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0009); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_completionMessage )( + ICurrentState * This, + /* [retval][out] */ BSTR *__MIDL__ICurrentState0010); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_installerResultCode )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0011); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_installerResultExtraCode1 )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0012); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_postInstallLaunchCommandLine )( + ICurrentState * This, + /* [retval][out] */ BSTR *__MIDL__ICurrentState0013); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_postInstallUrl )( + ICurrentState * This, + /* [retval][out] */ BSTR *__MIDL__ICurrentState0014); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_postInstallAction )( + ICurrentState * This, + /* [retval][out] */ LONG *__MIDL__ICurrentState0015); + + END_INTERFACE + } ICurrentStateVtbl; + + interface ICurrentState + { + CONST_VTBL struct ICurrentStateVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICurrentState_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICurrentState_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICurrentState_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICurrentState_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define ICurrentState_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define ICurrentState_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define ICurrentState_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define ICurrentState_get_stateValue(This,__MIDL__ICurrentState0000) \ + ( (This)->lpVtbl -> get_stateValue(This,__MIDL__ICurrentState0000) ) + +#define ICurrentState_get_availableVersion(This,__MIDL__ICurrentState0001) \ + ( (This)->lpVtbl -> get_availableVersion(This,__MIDL__ICurrentState0001) ) + +#define ICurrentState_get_bytesDownloaded(This,__MIDL__ICurrentState0002) \ + ( (This)->lpVtbl -> get_bytesDownloaded(This,__MIDL__ICurrentState0002) ) + +#define ICurrentState_get_totalBytesToDownload(This,__MIDL__ICurrentState0003) \ + ( (This)->lpVtbl -> get_totalBytesToDownload(This,__MIDL__ICurrentState0003) ) + +#define ICurrentState_get_downloadTimeRemainingMs(This,__MIDL__ICurrentState0004) \ + ( (This)->lpVtbl -> get_downloadTimeRemainingMs(This,__MIDL__ICurrentState0004) ) + +#define ICurrentState_get_nextRetryTime(This,__MIDL__ICurrentState0005) \ + ( (This)->lpVtbl -> get_nextRetryTime(This,__MIDL__ICurrentState0005) ) + +#define ICurrentState_get_installProgress(This,__MIDL__ICurrentState0006) \ + ( (This)->lpVtbl -> get_installProgress(This,__MIDL__ICurrentState0006) ) + +#define ICurrentState_get_installTimeRemainingMs(This,__MIDL__ICurrentState0007) \ + ( (This)->lpVtbl -> get_installTimeRemainingMs(This,__MIDL__ICurrentState0007) ) + +#define ICurrentState_get_isCanceled(This,is_canceled) \ + ( (This)->lpVtbl -> get_isCanceled(This,is_canceled) ) + +#define ICurrentState_get_errorCode(This,__MIDL__ICurrentState0008) \ + ( (This)->lpVtbl -> get_errorCode(This,__MIDL__ICurrentState0008) ) + +#define ICurrentState_get_extraCode1(This,__MIDL__ICurrentState0009) \ + ( (This)->lpVtbl -> get_extraCode1(This,__MIDL__ICurrentState0009) ) + +#define ICurrentState_get_completionMessage(This,__MIDL__ICurrentState0010) \ + ( (This)->lpVtbl -> get_completionMessage(This,__MIDL__ICurrentState0010) ) + +#define ICurrentState_get_installerResultCode(This,__MIDL__ICurrentState0011) \ + ( (This)->lpVtbl -> get_installerResultCode(This,__MIDL__ICurrentState0011) ) + +#define ICurrentState_get_installerResultExtraCode1(This,__MIDL__ICurrentState0012) \ + ( (This)->lpVtbl -> get_installerResultExtraCode1(This,__MIDL__ICurrentState0012) ) + +#define ICurrentState_get_postInstallLaunchCommandLine(This,__MIDL__ICurrentState0013) \ + ( (This)->lpVtbl -> get_postInstallLaunchCommandLine(This,__MIDL__ICurrentState0013) ) + +#define ICurrentState_get_postInstallUrl(This,__MIDL__ICurrentState0014) \ + ( (This)->lpVtbl -> get_postInstallUrl(This,__MIDL__ICurrentState0014) ) + +#define ICurrentState_get_postInstallAction(This,__MIDL__ICurrentState0015) \ + ( (This)->lpVtbl -> get_postInstallAction(This,__MIDL__ICurrentState0015) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICurrentState_INTERFACE_DEFINED__ */ + + +#ifndef __IRegistrationUpdateHook_INTERFACE_DEFINED__ +#define __IRegistrationUpdateHook_INTERFACE_DEFINED__ + +/* interface IRegistrationUpdateHook */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IRegistrationUpdateHook; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("4E223325-C16B-4eeb-AEDC-19AA99A237FA") + IRegistrationUpdateHook : public IDispatch + { + public: + virtual HRESULT STDMETHODCALLTYPE UpdateRegistry( + /* [in] */ BSTR app_id, + /* [in] */ VARIANT_BOOL is_machine) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IRegistrationUpdateHookVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IRegistrationUpdateHook * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IRegistrationUpdateHook * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IRegistrationUpdateHook * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IRegistrationUpdateHook * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IRegistrationUpdateHook * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IRegistrationUpdateHook * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IRegistrationUpdateHook * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + HRESULT ( STDMETHODCALLTYPE *UpdateRegistry )( + IRegistrationUpdateHook * This, + /* [in] */ BSTR app_id, + /* [in] */ VARIANT_BOOL is_machine); + + END_INTERFACE + } IRegistrationUpdateHookVtbl; + + interface IRegistrationUpdateHook + { + CONST_VTBL struct IRegistrationUpdateHookVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IRegistrationUpdateHook_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IRegistrationUpdateHook_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IRegistrationUpdateHook_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IRegistrationUpdateHook_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IRegistrationUpdateHook_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IRegistrationUpdateHook_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IRegistrationUpdateHook_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IRegistrationUpdateHook_UpdateRegistry(This,app_id,is_machine) \ + ( (This)->lpVtbl -> UpdateRegistry(This,app_id,is_machine) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IRegistrationUpdateHook_INTERFACE_DEFINED__ */ + + +#ifndef __ICredentialDialog_INTERFACE_DEFINED__ +#define __ICredentialDialog_INTERFACE_DEFINED__ + +/* interface ICredentialDialog */ +/* [unique][helpstring][uuid][object] */ + + +EXTERN_C const IID IID_ICredentialDialog; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b3a47570-0a85-4aea-8270-529d47899603") + ICredentialDialog : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE QueryUserForCredentials( + /* [in] */ ULONG_PTR owner_hwnd, + /* [in] */ BSTR server, + /* [in] */ BSTR message, + /* [out] */ BSTR *username, + /* [out] */ BSTR *password) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICredentialDialogVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICredentialDialog * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICredentialDialog * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICredentialDialog * This); + + HRESULT ( STDMETHODCALLTYPE *QueryUserForCredentials )( + ICredentialDialog * This, + /* [in] */ ULONG_PTR owner_hwnd, + /* [in] */ BSTR server, + /* [in] */ BSTR message, + /* [out] */ BSTR *username, + /* [out] */ BSTR *password); + + END_INTERFACE + } ICredentialDialogVtbl; + + interface ICredentialDialog + { + CONST_VTBL struct ICredentialDialogVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICredentialDialog_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICredentialDialog_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICredentialDialog_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICredentialDialog_QueryUserForCredentials(This,owner_hwnd,server,message,username,password) \ + ( (This)->lpVtbl -> QueryUserForCredentials(This,owner_hwnd,server,message,username,password) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICredentialDialog_INTERFACE_DEFINED__ */ + + +#ifndef __IGoogleUpdate3Web_INTERFACE_DEFINED__ +#define __IGoogleUpdate3Web_INTERFACE_DEFINED__ + +/* interface IGoogleUpdate3Web */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IGoogleUpdate3Web; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("494B20CF-282E-4BDD-9F5D-B70CB09D351E") + IGoogleUpdate3Web : public IDispatch + { + public: + virtual HRESULT STDMETHODCALLTYPE createAppBundleWeb( + /* [retval][out] */ IDispatch **app_bundle_web) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IGoogleUpdate3WebVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IGoogleUpdate3Web * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IGoogleUpdate3Web * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IGoogleUpdate3Web * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IGoogleUpdate3Web * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IGoogleUpdate3Web * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IGoogleUpdate3Web * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IGoogleUpdate3Web * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + HRESULT ( STDMETHODCALLTYPE *createAppBundleWeb )( + IGoogleUpdate3Web * This, + /* [retval][out] */ IDispatch **app_bundle_web); + + END_INTERFACE + } IGoogleUpdate3WebVtbl; + + interface IGoogleUpdate3Web + { + CONST_VTBL struct IGoogleUpdate3WebVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IGoogleUpdate3Web_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IGoogleUpdate3Web_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IGoogleUpdate3Web_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IGoogleUpdate3Web_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IGoogleUpdate3Web_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IGoogleUpdate3Web_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IGoogleUpdate3Web_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IGoogleUpdate3Web_createAppBundleWeb(This,app_bundle_web) \ + ( (This)->lpVtbl -> createAppBundleWeb(This,app_bundle_web) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IGoogleUpdate3Web_INTERFACE_DEFINED__ */ + + +#ifndef __IGoogleUpdate3WebSecurity_INTERFACE_DEFINED__ +#define __IGoogleUpdate3WebSecurity_INTERFACE_DEFINED__ + +/* interface IGoogleUpdate3WebSecurity */ +/* [unique][helpstring][uuid][object] */ + + +EXTERN_C const IID IID_IGoogleUpdate3WebSecurity; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2D363682-561D-4c3a-81C6-F2F82107562A") + IGoogleUpdate3WebSecurity : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE setOriginURL( + /* [in] */ BSTR origin_url) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IGoogleUpdate3WebSecurityVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IGoogleUpdate3WebSecurity * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IGoogleUpdate3WebSecurity * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IGoogleUpdate3WebSecurity * This); + + HRESULT ( STDMETHODCALLTYPE *setOriginURL )( + IGoogleUpdate3WebSecurity * This, + /* [in] */ BSTR origin_url); + + END_INTERFACE + } IGoogleUpdate3WebSecurityVtbl; + + interface IGoogleUpdate3WebSecurity + { + CONST_VTBL struct IGoogleUpdate3WebSecurityVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IGoogleUpdate3WebSecurity_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IGoogleUpdate3WebSecurity_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IGoogleUpdate3WebSecurity_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IGoogleUpdate3WebSecurity_setOriginURL(This,origin_url) \ + ( (This)->lpVtbl -> setOriginURL(This,origin_url) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IGoogleUpdate3WebSecurity_INTERFACE_DEFINED__ */ + + +#ifndef __IAppBundleWeb_INTERFACE_DEFINED__ +#define __IAppBundleWeb_INTERFACE_DEFINED__ + +/* interface IAppBundleWeb */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IAppBundleWeb; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("DD42475D-6D46-496a-924E-BD5630B4CBBA") + IAppBundleWeb : public IDispatch + { + public: + virtual /* [id] */ HRESULT STDMETHODCALLTYPE createApp( + /* [in] */ BSTR app_guid, + /* [in] */ BSTR brand_code, + /* [in] */ BSTR language, + /* [in] */ BSTR ap) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE createInstalledApp( + /* [in] */ BSTR app_id) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE createAllInstalledApps( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_displayLanguage( + /* [retval][out] */ BSTR *__MIDL__IAppBundleWeb0000) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_displayLanguage( + /* [in] */ BSTR __MIDL__IAppBundleWeb0001) = 0; + + virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_parentHWND( + /* [in] */ ULONG_PTR hwnd) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_length( + /* [retval][out] */ int *index) = 0; + + virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_appWeb( + /* [in] */ int index, + /* [retval][out] */ IDispatch **app_web) = 0; + + virtual HRESULT STDMETHODCALLTYPE initialize( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE checkForUpdate( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE download( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE install( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE pause( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE resume( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE cancel( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE downloadPackage( + /* [in] */ BSTR app_id, + /* [in] */ BSTR package_name) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentState( + /* [retval][out] */ VARIANT *current_state) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppBundleWebVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAppBundleWeb * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAppBundleWeb * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAppBundleWeb * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAppBundleWeb * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAppBundleWeb * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAppBundleWeb * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *createApp )( + IAppBundleWeb * This, + /* [in] */ BSTR app_guid, + /* [in] */ BSTR brand_code, + /* [in] */ BSTR language, + /* [in] */ BSTR ap); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *createInstalledApp )( + IAppBundleWeb * This, + /* [in] */ BSTR app_id); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *createAllInstalledApps )( + IAppBundleWeb * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_displayLanguage )( + IAppBundleWeb * This, + /* [retval][out] */ BSTR *__MIDL__IAppBundleWeb0000); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_displayLanguage )( + IAppBundleWeb * This, + /* [in] */ BSTR __MIDL__IAppBundleWeb0001); + + /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_parentHWND )( + IAppBundleWeb * This, + /* [in] */ ULONG_PTR hwnd); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_length )( + IAppBundleWeb * This, + /* [retval][out] */ int *index); + + /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_appWeb )( + IAppBundleWeb * This, + /* [in] */ int index, + /* [retval][out] */ IDispatch **app_web); + + HRESULT ( STDMETHODCALLTYPE *initialize )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *checkForUpdate )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *download )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *install )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *pause )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *resume )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *cancel )( + IAppBundleWeb * This); + + HRESULT ( STDMETHODCALLTYPE *downloadPackage )( + IAppBundleWeb * This, + /* [in] */ BSTR app_id, + /* [in] */ BSTR package_name); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentState )( + IAppBundleWeb * This, + /* [retval][out] */ VARIANT *current_state); + + END_INTERFACE + } IAppBundleWebVtbl; + + interface IAppBundleWeb + { + CONST_VTBL struct IAppBundleWebVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAppBundleWeb_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAppBundleWeb_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAppBundleWeb_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAppBundleWeb_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAppBundleWeb_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAppBundleWeb_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAppBundleWeb_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAppBundleWeb_createApp(This,app_guid,brand_code,language,ap) \ + ( (This)->lpVtbl -> createApp(This,app_guid,brand_code,language,ap) ) + +#define IAppBundleWeb_createInstalledApp(This,app_id) \ + ( (This)->lpVtbl -> createInstalledApp(This,app_id) ) + +#define IAppBundleWeb_createAllInstalledApps(This) \ + ( (This)->lpVtbl -> createAllInstalledApps(This) ) + +#define IAppBundleWeb_get_displayLanguage(This,__MIDL__IAppBundleWeb0000) \ + ( (This)->lpVtbl -> get_displayLanguage(This,__MIDL__IAppBundleWeb0000) ) + +#define IAppBundleWeb_put_displayLanguage(This,__MIDL__IAppBundleWeb0001) \ + ( (This)->lpVtbl -> put_displayLanguage(This,__MIDL__IAppBundleWeb0001) ) + +#define IAppBundleWeb_put_parentHWND(This,hwnd) \ + ( (This)->lpVtbl -> put_parentHWND(This,hwnd) ) + +#define IAppBundleWeb_get_length(This,index) \ + ( (This)->lpVtbl -> get_length(This,index) ) + +#define IAppBundleWeb_get_appWeb(This,index,app_web) \ + ( (This)->lpVtbl -> get_appWeb(This,index,app_web) ) + +#define IAppBundleWeb_initialize(This) \ + ( (This)->lpVtbl -> initialize(This) ) + +#define IAppBundleWeb_checkForUpdate(This) \ + ( (This)->lpVtbl -> checkForUpdate(This) ) + +#define IAppBundleWeb_download(This) \ + ( (This)->lpVtbl -> download(This) ) + +#define IAppBundleWeb_install(This) \ + ( (This)->lpVtbl -> install(This) ) + +#define IAppBundleWeb_pause(This) \ + ( (This)->lpVtbl -> pause(This) ) + +#define IAppBundleWeb_resume(This) \ + ( (This)->lpVtbl -> resume(This) ) + +#define IAppBundleWeb_cancel(This) \ + ( (This)->lpVtbl -> cancel(This) ) + +#define IAppBundleWeb_downloadPackage(This,app_id,package_name) \ + ( (This)->lpVtbl -> downloadPackage(This,app_id,package_name) ) + +#define IAppBundleWeb_get_currentState(This,current_state) \ + ( (This)->lpVtbl -> get_currentState(This,current_state) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAppBundleWeb_INTERFACE_DEFINED__ */ + + +#ifndef __IAppWeb_INTERFACE_DEFINED__ +#define __IAppWeb_INTERFACE_DEFINED__ + +/* interface IAppWeb */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IAppWeb; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("18D0F672-18B4-48e6-AD36-6E6BF01DBBC4") + IAppWeb : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appId( + /* [retval][out] */ BSTR *__MIDL__IAppWeb0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentVersionWeb( + /* [retval][out] */ IDispatch **current) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nextVersionWeb( + /* [retval][out] */ IDispatch **next) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_command( + /* [in] */ BSTR command_id, + /* [retval][out] */ IDispatch **command) = 0; + + virtual HRESULT STDMETHODCALLTYPE cancel( void) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentState( + /* [retval][out] */ IDispatch **current_state) = 0; + + virtual HRESULT STDMETHODCALLTYPE launch( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE uninstall( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppWebVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAppWeb * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAppWeb * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAppWeb * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAppWeb * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAppWeb * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAppWeb * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAppWeb * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appId )( + IAppWeb * This, + /* [retval][out] */ BSTR *__MIDL__IAppWeb0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentVersionWeb )( + IAppWeb * This, + /* [retval][out] */ IDispatch **current); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nextVersionWeb )( + IAppWeb * This, + /* [retval][out] */ IDispatch **next); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_command )( + IAppWeb * This, + /* [in] */ BSTR command_id, + /* [retval][out] */ IDispatch **command); + + HRESULT ( STDMETHODCALLTYPE *cancel )( + IAppWeb * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentState )( + IAppWeb * This, + /* [retval][out] */ IDispatch **current_state); + + HRESULT ( STDMETHODCALLTYPE *launch )( + IAppWeb * This); + + HRESULT ( STDMETHODCALLTYPE *uninstall )( + IAppWeb * This); + + END_INTERFACE + } IAppWebVtbl; + + interface IAppWeb + { + CONST_VTBL struct IAppWebVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAppWeb_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAppWeb_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAppWeb_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAppWeb_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAppWeb_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAppWeb_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAppWeb_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAppWeb_get_appId(This,__MIDL__IAppWeb0000) \ + ( (This)->lpVtbl -> get_appId(This,__MIDL__IAppWeb0000) ) + +#define IAppWeb_get_currentVersionWeb(This,current) \ + ( (This)->lpVtbl -> get_currentVersionWeb(This,current) ) + +#define IAppWeb_get_nextVersionWeb(This,next) \ + ( (This)->lpVtbl -> get_nextVersionWeb(This,next) ) + +#define IAppWeb_get_command(This,command_id,command) \ + ( (This)->lpVtbl -> get_command(This,command_id,command) ) + +#define IAppWeb_cancel(This) \ + ( (This)->lpVtbl -> cancel(This) ) + +#define IAppWeb_get_currentState(This,current_state) \ + ( (This)->lpVtbl -> get_currentState(This,current_state) ) + +#define IAppWeb_launch(This) \ + ( (This)->lpVtbl -> launch(This) ) + +#define IAppWeb_uninstall(This) \ + ( (This)->lpVtbl -> uninstall(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAppWeb_INTERFACE_DEFINED__ */ + + +#ifndef __IAppCommandWeb_INTERFACE_DEFINED__ +#define __IAppCommandWeb_INTERFACE_DEFINED__ + +/* interface IAppCommandWeb */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IAppCommandWeb; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("68D6C2BD-712E-4c96-93E8-49CB8A9AAEED") + IAppCommandWeb : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_status( + /* [retval][out] */ UINT *__MIDL__IAppCommandWeb0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_exitCode( + /* [retval][out] */ DWORD *__MIDL__IAppCommandWeb0001) = 0; + + virtual HRESULT STDMETHODCALLTYPE execute( + /* [optional][in] */ VARIANT arg1, + /* [optional][in] */ VARIANT arg2, + /* [optional][in] */ VARIANT arg3, + /* [optional][in] */ VARIANT arg4, + /* [optional][in] */ VARIANT arg5, + /* [optional][in] */ VARIANT arg6, + /* [optional][in] */ VARIANT arg7, + /* [optional][in] */ VARIANT arg8, + /* [optional][in] */ VARIANT arg9) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppCommandWebVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAppCommandWeb * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAppCommandWeb * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAppCommandWeb * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAppCommandWeb * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAppCommandWeb * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAppCommandWeb * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAppCommandWeb * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_status )( + IAppCommandWeb * This, + /* [retval][out] */ UINT *__MIDL__IAppCommandWeb0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_exitCode )( + IAppCommandWeb * This, + /* [retval][out] */ DWORD *__MIDL__IAppCommandWeb0001); + + HRESULT ( STDMETHODCALLTYPE *execute )( + IAppCommandWeb * This, + /* [optional][in] */ VARIANT arg1, + /* [optional][in] */ VARIANT arg2, + /* [optional][in] */ VARIANT arg3, + /* [optional][in] */ VARIANT arg4, + /* [optional][in] */ VARIANT arg5, + /* [optional][in] */ VARIANT arg6, + /* [optional][in] */ VARIANT arg7, + /* [optional][in] */ VARIANT arg8, + /* [optional][in] */ VARIANT arg9); + + END_INTERFACE + } IAppCommandWebVtbl; + + interface IAppCommandWeb + { + CONST_VTBL struct IAppCommandWebVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAppCommandWeb_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAppCommandWeb_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAppCommandWeb_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAppCommandWeb_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAppCommandWeb_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAppCommandWeb_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAppCommandWeb_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAppCommandWeb_get_status(This,__MIDL__IAppCommandWeb0000) \ + ( (This)->lpVtbl -> get_status(This,__MIDL__IAppCommandWeb0000) ) + +#define IAppCommandWeb_get_exitCode(This,__MIDL__IAppCommandWeb0001) \ + ( (This)->lpVtbl -> get_exitCode(This,__MIDL__IAppCommandWeb0001) ) + +#define IAppCommandWeb_execute(This,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) \ + ( (This)->lpVtbl -> execute(This,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAppCommandWeb_INTERFACE_DEFINED__ */ + + +#ifndef __IAppVersionWeb_INTERFACE_DEFINED__ +#define __IAppVersionWeb_INTERFACE_DEFINED__ + +/* interface IAppVersionWeb */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_IAppVersionWeb; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0CD01D1E-4A1C-489d-93B9-9B6672877C57") + IAppVersionWeb : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_version( + /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageCount( + /* [retval][out] */ long *count) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_packageWeb( + /* [in] */ long index, + /* [retval][out] */ IDispatch **package) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAppVersionWebVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAppVersionWeb * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAppVersionWeb * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAppVersionWeb * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAppVersionWeb * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAppVersionWeb * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAppVersionWeb * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAppVersionWeb * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_version )( + IAppVersionWeb * This, + /* [retval][out] */ BSTR *__MIDL__IAppVersionWeb0000); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageCount )( + IAppVersionWeb * This, + /* [retval][out] */ long *count); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_packageWeb )( + IAppVersionWeb * This, + /* [in] */ long index, + /* [retval][out] */ IDispatch **package); + + END_INTERFACE + } IAppVersionWebVtbl; + + interface IAppVersionWeb + { + CONST_VTBL struct IAppVersionWebVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAppVersionWeb_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAppVersionWeb_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAppVersionWeb_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAppVersionWeb_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAppVersionWeb_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAppVersionWeb_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAppVersionWeb_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAppVersionWeb_get_version(This,__MIDL__IAppVersionWeb0000) \ + ( (This)->lpVtbl -> get_version(This,__MIDL__IAppVersionWeb0000) ) + +#define IAppVersionWeb_get_packageCount(This,count) \ + ( (This)->lpVtbl -> get_packageCount(This,count) ) + +#define IAppVersionWeb_get_packageWeb(This,index,package) \ + ( (This)->lpVtbl -> get_packageWeb(This,index,package) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAppVersionWeb_INTERFACE_DEFINED__ */ + + +#ifndef __ICoCreateAsyncStatus_INTERFACE_DEFINED__ +#define __ICoCreateAsyncStatus_INTERFACE_DEFINED__ + +/* interface ICoCreateAsyncStatus */ +/* [unique][helpstring][uuid][dual][object] */ + + +EXTERN_C const IID IID_ICoCreateAsyncStatus; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2E629606-312A-482f-9B12-2C4ABF6F0B6D") + ICoCreateAsyncStatus : public IDispatch + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isDone( + /* [retval][out] */ VARIANT_BOOL *is_done) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_completionHResult( + /* [retval][out] */ LONG *hr) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_createdInstance( + /* [retval][out] */ IDispatch **instance) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoCreateAsyncStatusVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoCreateAsyncStatus * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoCreateAsyncStatus * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoCreateAsyncStatus * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + ICoCreateAsyncStatus * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + ICoCreateAsyncStatus * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + ICoCreateAsyncStatus * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + ICoCreateAsyncStatus * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isDone )( + ICoCreateAsyncStatus * This, + /* [retval][out] */ VARIANT_BOOL *is_done); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_completionHResult )( + ICoCreateAsyncStatus * This, + /* [retval][out] */ LONG *hr); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_createdInstance )( + ICoCreateAsyncStatus * This, + /* [retval][out] */ IDispatch **instance); + + END_INTERFACE + } ICoCreateAsyncStatusVtbl; + + interface ICoCreateAsyncStatus + { + CONST_VTBL struct ICoCreateAsyncStatusVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoCreateAsyncStatus_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoCreateAsyncStatus_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoCreateAsyncStatus_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoCreateAsyncStatus_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define ICoCreateAsyncStatus_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define ICoCreateAsyncStatus_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define ICoCreateAsyncStatus_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define ICoCreateAsyncStatus_get_isDone(This,is_done) \ + ( (This)->lpVtbl -> get_isDone(This,is_done) ) + +#define ICoCreateAsyncStatus_get_completionHResult(This,hr) \ + ( (This)->lpVtbl -> get_completionHResult(This,hr) ) + +#define ICoCreateAsyncStatus_get_createdInstance(This,instance) \ + ( (This)->lpVtbl -> get_createdInstance(This,instance) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoCreateAsyncStatus_INTERFACE_DEFINED__ */ + + +#ifndef __ICoCreateAsync_INTERFACE_DEFINED__ +#define __ICoCreateAsync_INTERFACE_DEFINED__ + +/* interface ICoCreateAsync */ +/* [unique][helpstring][uuid][object] */ + + +EXTERN_C const IID IID_ICoCreateAsync; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("DAB1D343-1B2A-47f9-B445-93DC50704BFE") + ICoCreateAsync : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE createOmahaMachineServerAsync( + /* [in] */ BSTR origin_url, + /* [in] */ BOOL create_elevated, + /* [retval][out] */ ICoCreateAsyncStatus **status) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ICoCreateAsyncVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ICoCreateAsync * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ICoCreateAsync * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ICoCreateAsync * This); + + HRESULT ( STDMETHODCALLTYPE *createOmahaMachineServerAsync )( + ICoCreateAsync * This, + /* [in] */ BSTR origin_url, + /* [in] */ BOOL create_elevated, + /* [retval][out] */ ICoCreateAsyncStatus **status); + + END_INTERFACE + } ICoCreateAsyncVtbl; + + interface ICoCreateAsync + { + CONST_VTBL struct ICoCreateAsyncVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ICoCreateAsync_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ICoCreateAsync_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ICoCreateAsync_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ICoCreateAsync_createOmahaMachineServerAsync(This,origin_url,create_elevated,status) \ + ( (This)->lpVtbl -> createOmahaMachineServerAsync(This,origin_url,create_elevated,status) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ICoCreateAsync_INTERFACE_DEFINED__ */ + + +#ifndef __IBrowserHttpRequest2_INTERFACE_DEFINED__ +#define __IBrowserHttpRequest2_INTERFACE_DEFINED__ + +/* interface IBrowserHttpRequest2 */ +/* [unique][nonextensible][oleautomation][uuid][object] */ + + +EXTERN_C const IID IID_IBrowserHttpRequest2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5B25A8DC-1780-4178-A629-6BE8B8DEFAA2") + IBrowserHttpRequest2 : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Send( + /* [in] */ BSTR url, + /* [in] */ BSTR post_data, + /* [in] */ BSTR request_headers, + /* [in] */ VARIANT response_headers_needed, + /* [out] */ VARIANT *response_headers, + /* [out] */ DWORD *response_code, + /* [out] */ BSTR *cache_filename) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IBrowserHttpRequest2Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IBrowserHttpRequest2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IBrowserHttpRequest2 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IBrowserHttpRequest2 * This); + + HRESULT ( STDMETHODCALLTYPE *Send )( + IBrowserHttpRequest2 * This, + /* [in] */ BSTR url, + /* [in] */ BSTR post_data, + /* [in] */ BSTR request_headers, + /* [in] */ VARIANT response_headers_needed, + /* [out] */ VARIANT *response_headers, + /* [out] */ DWORD *response_code, + /* [out] */ BSTR *cache_filename); + + END_INTERFACE + } IBrowserHttpRequest2Vtbl; + + interface IBrowserHttpRequest2 + { + CONST_VTBL struct IBrowserHttpRequest2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IBrowserHttpRequest2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IBrowserHttpRequest2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IBrowserHttpRequest2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IBrowserHttpRequest2_Send(This,url,post_data,request_headers,response_headers_needed,response_headers,response_code,cache_filename) \ + ( (This)->lpVtbl -> Send(This,url,post_data,request_headers,response_headers_needed,response_headers,response_code,cache_filename) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IBrowserHttpRequest2_INTERFACE_DEFINED__ */ + + +#ifndef __IProcessLauncher_INTERFACE_DEFINED__ +#define __IProcessLauncher_INTERFACE_DEFINED__ + +/* interface IProcessLauncher */ +/* [unique][helpstring][uuid][oleautomation][object] */ + + +EXTERN_C const IID IID_IProcessLauncher; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("128C2DA6-2BC0-44c0-B3F6-4EC22E647964") + IProcessLauncher : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE LaunchCmdLine( + /* [string][in] */ const WCHAR *cmd_line) = 0; + + virtual HRESULT STDMETHODCALLTYPE LaunchBrowser( + /* [in] */ DWORD browser_type, + /* [string][in] */ const WCHAR *url) = 0; + + virtual HRESULT STDMETHODCALLTYPE LaunchCmdElevated( + /* [string][in] */ const WCHAR *app_guid, + /* [string][in] */ const WCHAR *cmd_id, + /* [in] */ DWORD caller_proc_id, + /* [out] */ ULONG_PTR *proc_handle) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IProcessLauncherVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IProcessLauncher * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IProcessLauncher * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IProcessLauncher * This); + + HRESULT ( STDMETHODCALLTYPE *LaunchCmdLine )( + IProcessLauncher * This, + /* [string][in] */ const WCHAR *cmd_line); + + HRESULT ( STDMETHODCALLTYPE *LaunchBrowser )( + IProcessLauncher * This, + /* [in] */ DWORD browser_type, + /* [string][in] */ const WCHAR *url); + + HRESULT ( STDMETHODCALLTYPE *LaunchCmdElevated )( + IProcessLauncher * This, + /* [string][in] */ const WCHAR *app_guid, + /* [string][in] */ const WCHAR *cmd_id, + /* [in] */ DWORD caller_proc_id, + /* [out] */ ULONG_PTR *proc_handle); + + END_INTERFACE + } IProcessLauncherVtbl; + + interface IProcessLauncher + { + CONST_VTBL struct IProcessLauncherVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IProcessLauncher_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IProcessLauncher_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IProcessLauncher_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IProcessLauncher_LaunchCmdLine(This,cmd_line) \ + ( (This)->lpVtbl -> LaunchCmdLine(This,cmd_line) ) + +#define IProcessLauncher_LaunchBrowser(This,browser_type,url) \ + ( (This)->lpVtbl -> LaunchBrowser(This,browser_type,url) ) + +#define IProcessLauncher_LaunchCmdElevated(This,app_guid,cmd_id,caller_proc_id,proc_handle) \ + ( (This)->lpVtbl -> LaunchCmdElevated(This,app_guid,cmd_id,caller_proc_id,proc_handle) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IProcessLauncher_INTERFACE_DEFINED__ */ + + +#ifndef __IOneClickProcessLauncher_INTERFACE_DEFINED__ +#define __IOneClickProcessLauncher_INTERFACE_DEFINED__ + +/* interface IOneClickProcessLauncher */ +/* [unique][helpstring][uuid][oleautomation][object] */ + + +EXTERN_C const IID IID_IOneClickProcessLauncher; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5CCCB0EF-7073-4516-8028-4C628D0C8AAB") + IOneClickProcessLauncher : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE LaunchAppCommand( + /* [string][in] */ const WCHAR *app_guid, + /* [string][in] */ const WCHAR *cmd_id) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IOneClickProcessLauncherVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IOneClickProcessLauncher * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IOneClickProcessLauncher * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IOneClickProcessLauncher * This); + + HRESULT ( STDMETHODCALLTYPE *LaunchAppCommand )( + IOneClickProcessLauncher * This, + /* [string][in] */ const WCHAR *app_guid, + /* [string][in] */ const WCHAR *cmd_id); + + END_INTERFACE + } IOneClickProcessLauncherVtbl; + + interface IOneClickProcessLauncher + { + CONST_VTBL struct IOneClickProcessLauncherVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IOneClickProcessLauncher_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IOneClickProcessLauncher_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IOneClickProcessLauncher_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IOneClickProcessLauncher_LaunchAppCommand(This,app_guid,cmd_id) \ + ( (This)->lpVtbl -> LaunchAppCommand(This,app_guid,cmd_id) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IOneClickProcessLauncher_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_google_update_idl_0000_0020 */ +/* [local] */ + +typedef /* [public][public] */ +enum __MIDL___MIDL_itf_google_update_idl_0000_0020_0001 + { + COMPLETION_CODE_SUCCESS = 1, + COMPLETION_CODE_SUCCESS_CLOSE_UI = ( COMPLETION_CODE_SUCCESS + 1 ) , + COMPLETION_CODE_ERROR = ( COMPLETION_CODE_SUCCESS_CLOSE_UI + 1 ) , + COMPLETION_CODE_RESTART_ALL_BROWSERS = ( COMPLETION_CODE_ERROR + 1 ) , + COMPLETION_CODE_REBOOT = ( COMPLETION_CODE_RESTART_ALL_BROWSERS + 1 ) , + COMPLETION_CODE_RESTART_BROWSER = ( COMPLETION_CODE_REBOOT + 1 ) , + COMPLETION_CODE_RESTART_ALL_BROWSERS_NOTICE_ONLY = ( COMPLETION_CODE_RESTART_BROWSER + 1 ) , + COMPLETION_CODE_REBOOT_NOTICE_ONLY = ( COMPLETION_CODE_RESTART_ALL_BROWSERS_NOTICE_ONLY + 1 ) , + COMPLETION_CODE_RESTART_BROWSER_NOTICE_ONLY = ( COMPLETION_CODE_REBOOT_NOTICE_ONLY + 1 ) , + COMPLETION_CODE_RUN_COMMAND = ( COMPLETION_CODE_RESTART_BROWSER_NOTICE_ONLY + 1 ) + } LegacyCompletionCodes; + + + +extern RPC_IF_HANDLE __MIDL_itf_google_update_idl_0000_0020_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_google_update_idl_0000_0020_v0_0_s_ifspec; + +#ifndef __IProgressWndEvents_INTERFACE_DEFINED__ +#define __IProgressWndEvents_INTERFACE_DEFINED__ + +/* interface IProgressWndEvents */ +/* [unique][helpstring][uuid][oleautomation][object] */ + + +EXTERN_C const IID IID_IProgressWndEvents; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1C642CED-CA3B-4013-A9DF-CA6CE5FF6503") + IProgressWndEvents : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE DoClose( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE DoPause( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE DoResume( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE DoRestartBrowsers( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE DoReboot( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE DoLaunchBrowser( + /* [string][in] */ const WCHAR *url) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IProgressWndEventsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IProgressWndEvents * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IProgressWndEvents * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IProgressWndEvents * This); + + HRESULT ( STDMETHODCALLTYPE *DoClose )( + IProgressWndEvents * This); + + HRESULT ( STDMETHODCALLTYPE *DoPause )( + IProgressWndEvents * This); + + HRESULT ( STDMETHODCALLTYPE *DoResume )( + IProgressWndEvents * This); + + HRESULT ( STDMETHODCALLTYPE *DoRestartBrowsers )( + IProgressWndEvents * This); + + HRESULT ( STDMETHODCALLTYPE *DoReboot )( + IProgressWndEvents * This); + + HRESULT ( STDMETHODCALLTYPE *DoLaunchBrowser )( + IProgressWndEvents * This, + /* [string][in] */ const WCHAR *url); + + END_INTERFACE + } IProgressWndEventsVtbl; + + interface IProgressWndEvents + { + CONST_VTBL struct IProgressWndEventsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IProgressWndEvents_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IProgressWndEvents_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IProgressWndEvents_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IProgressWndEvents_DoClose(This) \ + ( (This)->lpVtbl -> DoClose(This) ) + +#define IProgressWndEvents_DoPause(This) \ + ( (This)->lpVtbl -> DoPause(This) ) + +#define IProgressWndEvents_DoResume(This) \ + ( (This)->lpVtbl -> DoResume(This) ) + +#define IProgressWndEvents_DoRestartBrowsers(This) \ + ( (This)->lpVtbl -> DoRestartBrowsers(This) ) + +#define IProgressWndEvents_DoReboot(This) \ + ( (This)->lpVtbl -> DoReboot(This) ) + +#define IProgressWndEvents_DoLaunchBrowser(This,url) \ + ( (This)->lpVtbl -> DoLaunchBrowser(This,url) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IProgressWndEvents_INTERFACE_DEFINED__ */ + + +#ifndef __IJobObserver_INTERFACE_DEFINED__ +#define __IJobObserver_INTERFACE_DEFINED__ + +/* interface IJobObserver */ +/* [unique][helpstring][uuid][oleautomation][object] */ + + +EXTERN_C const IID IID_IJobObserver; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("49D7563B-2DDB-4831-88C8-768A53833837") + IJobObserver : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE OnShow( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnCheckingForUpdate( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnUpdateAvailable( + /* [string][in] */ const WCHAR *version_string) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnWaitingToDownload( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnDownloading( + /* [in] */ int time_remaining_ms, + /* [in] */ int pos) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnWaitingToInstall( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnInstalling( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnPause( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE OnComplete( + /* [in] */ LegacyCompletionCodes code, + /* [string][in] */ const WCHAR *completion_text) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetEventSink( + /* [in] */ IProgressWndEvents *ui_sink) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IJobObserverVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IJobObserver * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IJobObserver * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IJobObserver * This); + + HRESULT ( STDMETHODCALLTYPE *OnShow )( + IJobObserver * This); + + HRESULT ( STDMETHODCALLTYPE *OnCheckingForUpdate )( + IJobObserver * This); + + HRESULT ( STDMETHODCALLTYPE *OnUpdateAvailable )( + IJobObserver * This, + /* [string][in] */ const WCHAR *version_string); + + HRESULT ( STDMETHODCALLTYPE *OnWaitingToDownload )( + IJobObserver * This); + + HRESULT ( STDMETHODCALLTYPE *OnDownloading )( + IJobObserver * This, + /* [in] */ int time_remaining_ms, + /* [in] */ int pos); + + HRESULT ( STDMETHODCALLTYPE *OnWaitingToInstall )( + IJobObserver * This); + + HRESULT ( STDMETHODCALLTYPE *OnInstalling )( + IJobObserver * This); + + HRESULT ( STDMETHODCALLTYPE *OnPause )( + IJobObserver * This); + + HRESULT ( STDMETHODCALLTYPE *OnComplete )( + IJobObserver * This, + /* [in] */ LegacyCompletionCodes code, + /* [string][in] */ const WCHAR *completion_text); + + HRESULT ( STDMETHODCALLTYPE *SetEventSink )( + IJobObserver * This, + /* [in] */ IProgressWndEvents *ui_sink); + + END_INTERFACE + } IJobObserverVtbl; + + interface IJobObserver + { + CONST_VTBL struct IJobObserverVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IJobObserver_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IJobObserver_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IJobObserver_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IJobObserver_OnShow(This) \ + ( (This)->lpVtbl -> OnShow(This) ) + +#define IJobObserver_OnCheckingForUpdate(This) \ + ( (This)->lpVtbl -> OnCheckingForUpdate(This) ) + +#define IJobObserver_OnUpdateAvailable(This,version_string) \ + ( (This)->lpVtbl -> OnUpdateAvailable(This,version_string) ) + +#define IJobObserver_OnWaitingToDownload(This) \ + ( (This)->lpVtbl -> OnWaitingToDownload(This) ) + +#define IJobObserver_OnDownloading(This,time_remaining_ms,pos) \ + ( (This)->lpVtbl -> OnDownloading(This,time_remaining_ms,pos) ) + +#define IJobObserver_OnWaitingToInstall(This) \ + ( (This)->lpVtbl -> OnWaitingToInstall(This) ) + +#define IJobObserver_OnInstalling(This) \ + ( (This)->lpVtbl -> OnInstalling(This) ) + +#define IJobObserver_OnPause(This) \ + ( (This)->lpVtbl -> OnPause(This) ) + +#define IJobObserver_OnComplete(This,code,completion_text) \ + ( (This)->lpVtbl -> OnComplete(This,code,completion_text) ) + +#define IJobObserver_SetEventSink(This,ui_sink) \ + ( (This)->lpVtbl -> SetEventSink(This,ui_sink) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IJobObserver_INTERFACE_DEFINED__ */ + + +#ifndef __IGoogleUpdate_INTERFACE_DEFINED__ +#define __IGoogleUpdate_INTERFACE_DEFINED__ + +/* interface IGoogleUpdate */ +/* [unique][helpstring][uuid][oleautomation][object] */ + + +EXTERN_C const IID IID_IGoogleUpdate; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("31AC3F11-E5EA-4a85-8A3D-8E095A39C27B") + IGoogleUpdate : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CheckForUpdate( + /* [string][in] */ const WCHAR *guid, + /* [in] */ IJobObserver *observer) = 0; + + virtual HRESULT STDMETHODCALLTYPE Update( + /* [string][in] */ const WCHAR *guid, + /* [in] */ IJobObserver *observer) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IGoogleUpdateVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IGoogleUpdate * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IGoogleUpdate * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IGoogleUpdate * This); + + HRESULT ( STDMETHODCALLTYPE *CheckForUpdate )( + IGoogleUpdate * This, + /* [string][in] */ const WCHAR *guid, + /* [in] */ IJobObserver *observer); + + HRESULT ( STDMETHODCALLTYPE *Update )( + IGoogleUpdate * This, + /* [string][in] */ const WCHAR *guid, + /* [in] */ IJobObserver *observer); + + END_INTERFACE + } IGoogleUpdateVtbl; + + interface IGoogleUpdate + { + CONST_VTBL struct IGoogleUpdateVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IGoogleUpdate_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IGoogleUpdate_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IGoogleUpdate_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IGoogleUpdate_CheckForUpdate(This,guid,observer) \ + ( (This)->lpVtbl -> CheckForUpdate(This,guid,observer) ) + +#define IGoogleUpdate_Update(This,guid,observer) \ + ( (This)->lpVtbl -> Update(This,guid,observer) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IGoogleUpdate_INTERFACE_DEFINED__ */ + + +#ifndef __IGoogleUpdateCore_INTERFACE_DEFINED__ +#define __IGoogleUpdateCore_INTERFACE_DEFINED__ + +/* interface IGoogleUpdateCore */ +/* [unique][helpstring][uuid][oleautomation][object] */ + + +EXTERN_C const IID IID_IGoogleUpdateCore; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("909489C2-85A6-4322-AA56-D25278649D67") + IGoogleUpdateCore : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE LaunchCmdElevated( + /* [string][in] */ const WCHAR *app_guid, + /* [string][in] */ const WCHAR *cmd_id, + /* [in] */ DWORD caller_proc_id, + /* [out] */ ULONG_PTR *proc_handle) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IGoogleUpdateCoreVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IGoogleUpdateCore * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IGoogleUpdateCore * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IGoogleUpdateCore * This); + + HRESULT ( STDMETHODCALLTYPE *LaunchCmdElevated )( + IGoogleUpdateCore * This, + /* [string][in] */ const WCHAR *app_guid, + /* [string][in] */ const WCHAR *cmd_id, + /* [in] */ DWORD caller_proc_id, + /* [out] */ ULONG_PTR *proc_handle); + + END_INTERFACE + } IGoogleUpdateCoreVtbl; + + interface IGoogleUpdateCore + { + CONST_VTBL struct IGoogleUpdateCoreVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IGoogleUpdateCore_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IGoogleUpdateCore_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IGoogleUpdateCore_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IGoogleUpdateCore_LaunchCmdElevated(This,app_guid,cmd_id,caller_proc_id,proc_handle) \ + ( (This)->lpVtbl -> LaunchCmdElevated(This,app_guid,cmd_id,caller_proc_id,proc_handle) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IGoogleUpdateCore_INTERFACE_DEFINED__ */ + + + +#ifndef __GoogleUpdate3Lib_LIBRARY_DEFINED__ +#define __GoogleUpdate3Lib_LIBRARY_DEFINED__ + +/* library GoogleUpdate3Lib */ +/* [helpstring][version][uuid] */ + + + + + + + + + + + + + + + +EXTERN_C const IID LIBID_GoogleUpdate3Lib; + +EXTERN_C const CLSID CLSID_GoogleUpdate3UserClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("022105BD-948A-40c9-AB42-A3300DDF097F") +GoogleUpdate3UserClass; +#endif + +EXTERN_C const CLSID CLSID_GoogleUpdate3ServiceClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("4EB61BAC-A3B6-4760-9581-655041EF4D69") +GoogleUpdate3ServiceClass; +#endif + +EXTERN_C const CLSID CLSID_GoogleUpdate3WebUserClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("22181302-A8A6-4f84-A541-E5CBFC70CC43") +GoogleUpdate3WebUserClass; +#endif + +EXTERN_C const CLSID CLSID_GoogleUpdate3WebMachineClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("8A1D4361-2C08-4700-A351-3EAA9CBFF5E4") +GoogleUpdate3WebMachineClass; +#endif + +EXTERN_C const CLSID CLSID_GoogleUpdate3WebServiceClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("534F5323-3569-4f42-919D-1E1CF93E5BF6") +GoogleUpdate3WebServiceClass; +#endif + +EXTERN_C const CLSID CLSID_GoogleUpdate3WebMachineFallbackClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("598FE0E5-E02D-465d-9A9D-37974A28FD42") +GoogleUpdate3WebMachineFallbackClass; +#endif + +EXTERN_C const CLSID CLSID_CurrentStateUserClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("E8CF3E55-F919-49d9-ABC0-948E6CB34B9F") +CurrentStateUserClass; +#endif + +EXTERN_C const CLSID CLSID_CurrentStateMachineClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("9D6AA569-9F30-41ad-885A-346685C74928") +CurrentStateMachineClass; +#endif + +EXTERN_C const CLSID CLSID_CoCreateAsyncClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("7DE94008-8AFD-4c70-9728-C6FBFFF6A73E") +CoCreateAsyncClass; +#endif + +EXTERN_C const CLSID CLSID_CredentialDialogUserClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("e67be843-bbbe-4484-95fb-05271ae86750") +CredentialDialogUserClass; +#endif + +EXTERN_C const CLSID CLSID_CredentialDialogMachineClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("25461599-633d-42b1-84fb-7cd68d026e53") +CredentialDialogMachineClass; +#endif + +EXTERN_C const CLSID CLSID_ProcessLauncherClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("ABC01078-F197-4b0b-ADBC-CFE684B39C82") +ProcessLauncherClass; +#endif + +EXTERN_C const CLSID CLSID_OneClickUserProcessLauncherClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("51F9E8EF-59D7-475b-A106-C7EA6F30C119") +OneClickUserProcessLauncherClass; +#endif + +EXTERN_C const CLSID CLSID_OneClickMachineProcessLauncherClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("AAD4AE2E-D834-46d4-8B09-490FAC9C722B") +OneClickMachineProcessLauncherClass; +#endif + +EXTERN_C const CLSID CLSID_OnDemandUserAppsClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("2F0E2680-9FF5-43c0-B76E-114A56E93598") +OnDemandUserAppsClass; +#endif + +EXTERN_C const CLSID CLSID_OnDemandMachineAppsClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("6F8BD55B-E83D-4a47-85BE-81FFA8057A69") +OnDemandMachineAppsClass; +#endif + +EXTERN_C const CLSID CLSID_OnDemandMachineAppsServiceClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("9465B4B4-5216-4042-9A2C-754D3BCDC410") +OnDemandMachineAppsServiceClass; +#endif + +EXTERN_C const CLSID CLSID_OnDemandMachineAppsFallbackClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("B3D28DBD-0DFA-40e4-8071-520767BADC7E") +OnDemandMachineAppsFallbackClass; +#endif + +EXTERN_C const CLSID CLSID_GoogleUpdateCoreClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("E225E692-4B47-4777-9BED-4FD7FE257F0E") +GoogleUpdateCoreClass; +#endif + +EXTERN_C const CLSID CLSID_GoogleUpdateCoreMachineClass; + +#ifdef __cplusplus + +class DECLSPEC_UUID("9B2340A0-4068-43d6-B404-32E27217859D") +GoogleUpdateCoreMachineClass; +#endif +#endif /* __GoogleUpdate3Lib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); + +unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * ); +void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * ); + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + +
diff --git a/third_party/win_build_output/midl/google_update/google_update_idl.tlb b/third_party/win_build_output/midl/google_update/google_update_idl.tlb new file mode 100644 index 0000000..2ac4a0d --- /dev/null +++ b/third_party/win_build_output/midl/google_update/google_update_idl.tlb Binary files differ
diff --git a/third_party/win_build_output/midl/google_update/google_update_idl_i.c b/third_party/win_build_output/midl/google_update/google_update_idl_i.c new file mode 100644 index 0000000..995ff61 --- /dev/null +++ b/third_party/win_build_output/midl/google_update/google_update_idl_i.c
@@ -0,0 +1,211 @@ + + +/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../google_update/google_update_idl.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#ifdef __cplusplus +extern "C"{ +#endif + + +#include <rpc.h> +#include <rpcndr.h> + +#ifdef _MIDL_USE_GUIDDEF_ + +#ifndef INITGUID +#define INITGUID +#include <guiddef.h> +#undef INITGUID +#else +#include <guiddef.h> +#endif + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) + +#else // !_MIDL_USE_GUIDDEF_ + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + EXTERN_C __declspec(selectany) const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + +#endif // !_MIDL_USE_GUIDDEF_ + +MIDL_DEFINE_GUID(IID, IID_IGoogleUpdate3,0x6DB17455,0x4E85,0x46e7,0x9D,0x23,0xE5,0x55,0xE4,0xB0,0x05,0xAF); + + +MIDL_DEFINE_GUID(IID, IID_IAppBundle,0xfe908cdd,0x22bb,0x472a,0x98,0x70,0x1a,0x03,0x90,0xe4,0x2f,0x36); + + +MIDL_DEFINE_GUID(IID, IID_IApp,0x76F7B787,0xA67C,0x4c73,0x82,0xC7,0x31,0xF5,0xE3,0xAA,0xBC,0x5C); + + +MIDL_DEFINE_GUID(IID, IID_IAppCommand,0x4DE778FE,0xF195,0x4ee3,0x9D,0xAB,0xFE,0x44,0x6C,0x23,0x92,0x21); + + +MIDL_DEFINE_GUID(IID, IID_IAppVersion,0xBCDCB538,0x01C0,0x46d1,0xA6,0xA7,0x52,0xF4,0xD0,0x21,0xC2,0x72); + + +MIDL_DEFINE_GUID(IID, IID_IPackage,0xDCAB8386,0x4F03,0x4dbd,0xA3,0x66,0xD9,0x0B,0xC9,0xF6,0x8D,0xE6); + + +MIDL_DEFINE_GUID(IID, IID_ICurrentState,0x247954F9,0x9EDC,0x4E68,0x8C,0xC3,0x15,0x0C,0x2B,0x89,0xEA,0xDF); + + +MIDL_DEFINE_GUID(IID, IID_IRegistrationUpdateHook,0x4E223325,0xC16B,0x4eeb,0xAE,0xDC,0x19,0xAA,0x99,0xA2,0x37,0xFA); + + +MIDL_DEFINE_GUID(IID, IID_ICredentialDialog,0xb3a47570,0x0a85,0x4aea,0x82,0x70,0x52,0x9d,0x47,0x89,0x96,0x03); + + +MIDL_DEFINE_GUID(IID, IID_IGoogleUpdate3Web,0x494B20CF,0x282E,0x4BDD,0x9F,0x5D,0xB7,0x0C,0xB0,0x9D,0x35,0x1E); + + +MIDL_DEFINE_GUID(IID, IID_IGoogleUpdate3WebSecurity,0x2D363682,0x561D,0x4c3a,0x81,0xC6,0xF2,0xF8,0x21,0x07,0x56,0x2A); + + +MIDL_DEFINE_GUID(IID, IID_IAppBundleWeb,0xDD42475D,0x6D46,0x496a,0x92,0x4E,0xBD,0x56,0x30,0xB4,0xCB,0xBA); + + +MIDL_DEFINE_GUID(IID, IID_IAppWeb,0x18D0F672,0x18B4,0x48e6,0xAD,0x36,0x6E,0x6B,0xF0,0x1D,0xBB,0xC4); + + +MIDL_DEFINE_GUID(IID, IID_IAppCommandWeb,0x68D6C2BD,0x712E,0x4c96,0x93,0xE8,0x49,0xCB,0x8A,0x9A,0xAE,0xED); + + +MIDL_DEFINE_GUID(IID, IID_IAppVersionWeb,0x0CD01D1E,0x4A1C,0x489d,0x93,0xB9,0x9B,0x66,0x72,0x87,0x7C,0x57); + + +MIDL_DEFINE_GUID(IID, IID_ICoCreateAsyncStatus,0x2E629606,0x312A,0x482f,0x9B,0x12,0x2C,0x4A,0xBF,0x6F,0x0B,0x6D); + + +MIDL_DEFINE_GUID(IID, IID_ICoCreateAsync,0xDAB1D343,0x1B2A,0x47f9,0xB4,0x45,0x93,0xDC,0x50,0x70,0x4B,0xFE); + + +MIDL_DEFINE_GUID(IID, IID_IBrowserHttpRequest2,0x5B25A8DC,0x1780,0x4178,0xA6,0x29,0x6B,0xE8,0xB8,0xDE,0xFA,0xA2); + + +MIDL_DEFINE_GUID(IID, IID_IProcessLauncher,0x128C2DA6,0x2BC0,0x44c0,0xB3,0xF6,0x4E,0xC2,0x2E,0x64,0x79,0x64); + + +MIDL_DEFINE_GUID(IID, IID_IOneClickProcessLauncher,0x5CCCB0EF,0x7073,0x4516,0x80,0x28,0x4C,0x62,0x8D,0x0C,0x8A,0xAB); + + +MIDL_DEFINE_GUID(IID, IID_IProgressWndEvents,0x1C642CED,0xCA3B,0x4013,0xA9,0xDF,0xCA,0x6C,0xE5,0xFF,0x65,0x03); + + +MIDL_DEFINE_GUID(IID, IID_IJobObserver,0x49D7563B,0x2DDB,0x4831,0x88,0xC8,0x76,0x8A,0x53,0x83,0x38,0x37); + + +MIDL_DEFINE_GUID(IID, IID_IGoogleUpdate,0x31AC3F11,0xE5EA,0x4a85,0x8A,0x3D,0x8E,0x09,0x5A,0x39,0xC2,0x7B); + + +MIDL_DEFINE_GUID(IID, IID_IGoogleUpdateCore,0x909489C2,0x85A6,0x4322,0xAA,0x56,0xD2,0x52,0x78,0x64,0x9D,0x67); + + +MIDL_DEFINE_GUID(IID, LIBID_GoogleUpdate3Lib,0x655DD85A,0x3C0D,0x4674,0x9C,0x58,0xAF,0x71,0x68,0xC5,0x86,0x1E); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3UserClass,0x022105BD,0x948A,0x40c9,0xAB,0x42,0xA3,0x30,0x0D,0xDF,0x09,0x7F); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3ServiceClass,0x4EB61BAC,0xA3B6,0x4760,0x95,0x81,0x65,0x50,0x41,0xEF,0x4D,0x69); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3WebUserClass,0x22181302,0xA8A6,0x4f84,0xA5,0x41,0xE5,0xCB,0xFC,0x70,0xCC,0x43); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3WebMachineClass,0x8A1D4361,0x2C08,0x4700,0xA3,0x51,0x3E,0xAA,0x9C,0xBF,0xF5,0xE4); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3WebServiceClass,0x534F5323,0x3569,0x4f42,0x91,0x9D,0x1E,0x1C,0xF9,0x3E,0x5B,0xF6); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdate3WebMachineFallbackClass,0x598FE0E5,0xE02D,0x465d,0x9A,0x9D,0x37,0x97,0x4A,0x28,0xFD,0x42); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CurrentStateUserClass,0xE8CF3E55,0xF919,0x49d9,0xAB,0xC0,0x94,0x8E,0x6C,0xB3,0x4B,0x9F); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CurrentStateMachineClass,0x9D6AA569,0x9F30,0x41ad,0x88,0x5A,0x34,0x66,0x85,0xC7,0x49,0x28); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CoCreateAsyncClass,0x7DE94008,0x8AFD,0x4c70,0x97,0x28,0xC6,0xFB,0xFF,0xF6,0xA7,0x3E); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CredentialDialogUserClass,0xe67be843,0xbbbe,0x4484,0x95,0xfb,0x05,0x27,0x1a,0xe8,0x67,0x50); + + +MIDL_DEFINE_GUID(CLSID, CLSID_CredentialDialogMachineClass,0x25461599,0x633d,0x42b1,0x84,0xfb,0x7c,0xd6,0x8d,0x02,0x6e,0x53); + + +MIDL_DEFINE_GUID(CLSID, CLSID_ProcessLauncherClass,0xABC01078,0xF197,0x4b0b,0xAD,0xBC,0xCF,0xE6,0x84,0xB3,0x9C,0x82); + + +MIDL_DEFINE_GUID(CLSID, CLSID_OneClickUserProcessLauncherClass,0x51F9E8EF,0x59D7,0x475b,0xA1,0x06,0xC7,0xEA,0x6F,0x30,0xC1,0x19); + + +MIDL_DEFINE_GUID(CLSID, CLSID_OneClickMachineProcessLauncherClass,0xAAD4AE2E,0xD834,0x46d4,0x8B,0x09,0x49,0x0F,0xAC,0x9C,0x72,0x2B); + + +MIDL_DEFINE_GUID(CLSID, CLSID_OnDemandUserAppsClass,0x2F0E2680,0x9FF5,0x43c0,0xB7,0x6E,0x11,0x4A,0x56,0xE9,0x35,0x98); + + +MIDL_DEFINE_GUID(CLSID, CLSID_OnDemandMachineAppsClass,0x6F8BD55B,0xE83D,0x4a47,0x85,0xBE,0x81,0xFF,0xA8,0x05,0x7A,0x69); + + +MIDL_DEFINE_GUID(CLSID, CLSID_OnDemandMachineAppsServiceClass,0x9465B4B4,0x5216,0x4042,0x9A,0x2C,0x75,0x4D,0x3B,0xCD,0xC4,0x10); + + +MIDL_DEFINE_GUID(CLSID, CLSID_OnDemandMachineAppsFallbackClass,0xB3D28DBD,0x0DFA,0x40e4,0x80,0x71,0x52,0x07,0x67,0xBA,0xDC,0x7E); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdateCoreClass,0xE225E692,0x4B47,0x4777,0x9B,0xED,0x4F,0xD7,0xFE,0x25,0x7F,0x0E); + + +MIDL_DEFINE_GUID(CLSID, CLSID_GoogleUpdateCoreMachineClass,0x9B2340A0,0x4068,0x43d6,0xB4,0x04,0x32,0xE2,0x72,0x17,0x85,0x9D); + +#undef MIDL_DEFINE_GUID + +#ifdef __cplusplus +} +#endif + + +
diff --git a/third_party/win_build_output/midl/google_update/google_update_idl_p.c b/third_party/win_build_output/midl/google_update/google_update_idl_p.c new file mode 100644 index 0000000..c4980af --- /dev/null +++ b/third_party/win_build_output/midl/google_update/google_update_idl_p.c
@@ -0,0 +1,7602 @@ + + +/* this ALWAYS GENERATED file contains the proxy stub code */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../google_update/google_update_idl.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */ + +#define USE_STUBLESS_PROXY + + +/* verify that the <rpcproxy.h> version is high enough to compile this file*/ +#ifndef __REDQ_RPCPROXY_H_VERSION__ +#define __REQUIRED_RPCPROXY_H_VERSION__ 475 +#endif + + +#include "rpcproxy.h" +#ifndef __RPCPROXY_H_VERSION__ +#error this stub requires an updated version of <rpcproxy.h> +#endif /* __RPCPROXY_H_VERSION__ */ + + +#include "google_update_idl.h" + +#define TYPE_FORMAT_STRING_SIZE 1117 +#define PROC_FORMAT_STRING_SIZE 5147 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 2 + +typedef struct _google_update_idl_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } google_update_idl_MIDL_TYPE_FORMAT_STRING; + +typedef struct _google_update_idl_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } google_update_idl_MIDL_PROC_FORMAT_STRING; + +typedef struct _google_update_idl_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } google_update_idl_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + + +extern const google_update_idl_MIDL_TYPE_FORMAT_STRING google_update_idl__MIDL_TypeFormatString; +extern const google_update_idl_MIDL_PROC_FORMAT_STRING google_update_idl__MIDL_ProcFormatString; +extern const google_update_idl_MIDL_EXPR_FORMAT_STRING google_update_idl__MIDL_ExprFormatString; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IGoogleUpdate3_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAppBundle_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAppBundle_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IApp_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IApp_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAppCommand_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAppCommand_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAppVersion_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAppVersion_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IPackage_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IPackage_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO ICurrentState_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IRegistrationUpdateHook_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IRegistrationUpdateHook_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO ICredentialDialog_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO ICredentialDialog_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IGoogleUpdate3Web_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3Web_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IGoogleUpdate3WebSecurity_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3WebSecurity_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAppBundleWeb_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAppBundleWeb_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAppWeb_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAppWeb_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAppCommandWeb_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAppCommandWeb_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO ICoCreateAsyncStatus_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO ICoCreateAsyncStatus_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO ICoCreateAsync_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO ICoCreateAsync_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IBrowserHttpRequest2_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IBrowserHttpRequest2_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IProcessLauncher_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IProcessLauncher_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IOneClickProcessLauncher_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IOneClickProcessLauncher_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IProgressWndEvents_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IProgressWndEvents_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IJobObserver_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IJobObserver_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IGoogleUpdate_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IGoogleUpdateCore_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IGoogleUpdateCore_ProxyInfo; + + +extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ]; + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + +static const google_update_idl_MIDL_PROC_FORMAT_STRING google_update_idl__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure get_status */ + + + /* Procedure get_stateValue */ + + + /* Procedure get_Count */ + + 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x7 ), /* 7 */ +/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 10 */ NdrFcShort( 0x0 ), /* 0 */ +/* 12 */ NdrFcShort( 0x24 ), /* 36 */ +/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 16 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 18 */ NdrFcShort( 0x0 ), /* 0 */ +/* 20 */ NdrFcShort( 0x0 ), /* 0 */ +/* 22 */ NdrFcShort( 0x0 ), /* 0 */ +/* 24 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppCommandWeb0000 */ + + + /* Parameter __MIDL__ICurrentState0000 */ + + + /* Parameter count */ + +/* 26 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 30 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + +/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 36 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_Item */ + +/* 38 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 40 */ NdrFcLong( 0x0 ), /* 0 */ +/* 44 */ NdrFcShort( 0x8 ), /* 8 */ +/* 46 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 48 */ NdrFcShort( 0x8 ), /* 8 */ +/* 50 */ NdrFcShort( 0x8 ), /* 8 */ +/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 54 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 56 */ NdrFcShort( 0x0 ), /* 0 */ +/* 58 */ NdrFcShort( 0x0 ), /* 0 */ +/* 60 */ NdrFcShort( 0x0 ), /* 0 */ +/* 62 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 64 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 68 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter bundle */ + +/* 70 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 74 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + +/* 76 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 78 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 80 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_createdInstance */ + + + /* Procedure get_nextVersionWeb */ + + + /* Procedure createAppBundle */ + +/* 82 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 84 */ NdrFcLong( 0x0 ), /* 0 */ +/* 88 */ NdrFcShort( 0x9 ), /* 9 */ +/* 90 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 92 */ NdrFcShort( 0x0 ), /* 0 */ +/* 94 */ NdrFcShort( 0x8 ), /* 8 */ +/* 96 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 98 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 106 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter instance */ + + + /* Parameter next */ + + + /* Parameter app_bundle */ + +/* 108 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 112 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + +/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 116 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 118 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_version */ + + + /* Procedure get_appId */ + + + /* Procedure get_version */ + + + /* Procedure get_displayName */ + +/* 120 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 122 */ NdrFcLong( 0x0 ), /* 0 */ +/* 126 */ NdrFcShort( 0x7 ), /* 7 */ +/* 128 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 130 */ NdrFcShort( 0x0 ), /* 0 */ +/* 132 */ NdrFcShort( 0x8 ), /* 8 */ +/* 134 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 136 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 138 */ NdrFcShort( 0x1 ), /* 1 */ +/* 140 */ NdrFcShort( 0x0 ), /* 0 */ +/* 142 */ NdrFcShort( 0x0 ), /* 0 */ +/* 144 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppVersionWeb0000 */ + + + /* Parameter __MIDL__IAppWeb0000 */ + + + /* Parameter __MIDL__IAppVersion0000 */ + + + /* Parameter __MIDL__IAppBundle0000 */ + +/* 146 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 148 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 150 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + +/* 152 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 154 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 156 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure createInstalledApp */ + + + /* Procedure put_displayName */ + +/* 158 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 160 */ NdrFcLong( 0x0 ), /* 0 */ +/* 164 */ NdrFcShort( 0x8 ), /* 8 */ +/* 166 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 168 */ NdrFcShort( 0x0 ), /* 0 */ +/* 170 */ NdrFcShort( 0x8 ), /* 8 */ +/* 172 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 174 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 176 */ NdrFcShort( 0x0 ), /* 0 */ +/* 178 */ NdrFcShort( 0x1 ), /* 1 */ +/* 180 */ NdrFcShort( 0x0 ), /* 0 */ +/* 182 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_id */ + + + /* Parameter __MIDL__IAppBundle0001 */ + +/* 184 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 188 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + + + /* Return value */ + +/* 190 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 192 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 194 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_filename */ + + + /* Procedure get_appId */ + + + /* Procedure get_displayLanguage */ + +/* 196 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 198 */ NdrFcLong( 0x0 ), /* 0 */ +/* 202 */ NdrFcShort( 0x9 ), /* 9 */ +/* 204 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 208 */ NdrFcShort( 0x8 ), /* 8 */ +/* 210 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 212 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 214 */ NdrFcShort( 0x1 ), /* 1 */ +/* 216 */ NdrFcShort( 0x0 ), /* 0 */ +/* 218 */ NdrFcShort( 0x0 ), /* 0 */ +/* 220 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IPackage0001 */ + + + /* Parameter __MIDL__IApp0000 */ + + + /* Parameter __MIDL__IAppBundle0002 */ + +/* 222 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 224 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 226 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + +/* 228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 230 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 232 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_displayLanguage */ + +/* 234 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 236 */ NdrFcLong( 0x0 ), /* 0 */ +/* 240 */ NdrFcShort( 0xa ), /* 10 */ +/* 242 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 244 */ NdrFcShort( 0x0 ), /* 0 */ +/* 246 */ NdrFcShort( 0x8 ), /* 8 */ +/* 248 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 250 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 252 */ NdrFcShort( 0x0 ), /* 0 */ +/* 254 */ NdrFcShort( 0x1 ), /* 1 */ +/* 256 */ NdrFcShort( 0x0 ), /* 0 */ +/* 258 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppBundle0003 */ + +/* 260 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 262 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 264 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 266 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 268 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 270 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_installSource */ + +/* 272 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 274 */ NdrFcLong( 0x0 ), /* 0 */ +/* 278 */ NdrFcShort( 0xb ), /* 11 */ +/* 280 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 282 */ NdrFcShort( 0x0 ), /* 0 */ +/* 284 */ NdrFcShort( 0x8 ), /* 8 */ +/* 286 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 288 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 290 */ NdrFcShort( 0x1 ), /* 1 */ +/* 292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 294 */ NdrFcShort( 0x0 ), /* 0 */ +/* 296 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppBundle0004 */ + +/* 298 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 300 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 302 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 304 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 306 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 308 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_installSource */ + +/* 310 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 312 */ NdrFcLong( 0x0 ), /* 0 */ +/* 316 */ NdrFcShort( 0xc ), /* 12 */ +/* 318 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 320 */ NdrFcShort( 0x0 ), /* 0 */ +/* 322 */ NdrFcShort( 0x8 ), /* 8 */ +/* 324 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 326 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 328 */ NdrFcShort( 0x0 ), /* 0 */ +/* 330 */ NdrFcShort( 0x1 ), /* 1 */ +/* 332 */ NdrFcShort( 0x0 ), /* 0 */ +/* 334 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppBundle0005 */ + +/* 336 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 338 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 340 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 342 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 344 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 346 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_originURL */ + +/* 348 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 350 */ NdrFcLong( 0x0 ), /* 0 */ +/* 354 */ NdrFcShort( 0xd ), /* 13 */ +/* 356 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 358 */ NdrFcShort( 0x0 ), /* 0 */ +/* 360 */ NdrFcShort( 0x8 ), /* 8 */ +/* 362 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 364 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 366 */ NdrFcShort( 0x1 ), /* 1 */ +/* 368 */ NdrFcShort( 0x0 ), /* 0 */ +/* 370 */ NdrFcShort( 0x0 ), /* 0 */ +/* 372 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppBundle0006 */ + +/* 374 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 376 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 378 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 380 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 382 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 384 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_originURL */ + +/* 386 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 388 */ NdrFcLong( 0x0 ), /* 0 */ +/* 392 */ NdrFcShort( 0xe ), /* 14 */ +/* 394 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 396 */ NdrFcShort( 0x0 ), /* 0 */ +/* 398 */ NdrFcShort( 0x8 ), /* 8 */ +/* 400 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 402 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 406 */ NdrFcShort( 0x1 ), /* 1 */ +/* 408 */ NdrFcShort( 0x0 ), /* 0 */ +/* 410 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppBundle0007 */ + +/* 412 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 414 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 416 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 418 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 420 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 422 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_offlineDirectory */ + +/* 424 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 426 */ NdrFcLong( 0x0 ), /* 0 */ +/* 430 */ NdrFcShort( 0xf ), /* 15 */ +/* 432 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 434 */ NdrFcShort( 0x0 ), /* 0 */ +/* 436 */ NdrFcShort( 0x8 ), /* 8 */ +/* 438 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 440 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 442 */ NdrFcShort( 0x1 ), /* 1 */ +/* 444 */ NdrFcShort( 0x0 ), /* 0 */ +/* 446 */ NdrFcShort( 0x0 ), /* 0 */ +/* 448 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offline_dir */ + +/* 450 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 452 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 454 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 456 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 458 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 460 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_offlineDirectory */ + +/* 462 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 464 */ NdrFcLong( 0x0 ), /* 0 */ +/* 468 */ NdrFcShort( 0x10 ), /* 16 */ +/* 470 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 472 */ NdrFcShort( 0x0 ), /* 0 */ +/* 474 */ NdrFcShort( 0x8 ), /* 8 */ +/* 476 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 478 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 480 */ NdrFcShort( 0x0 ), /* 0 */ +/* 482 */ NdrFcShort( 0x1 ), /* 1 */ +/* 484 */ NdrFcShort( 0x0 ), /* 0 */ +/* 486 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offline_dir */ + +/* 488 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 490 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 492 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 494 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 496 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 498 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_sessionId */ + +/* 500 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 502 */ NdrFcLong( 0x0 ), /* 0 */ +/* 506 */ NdrFcShort( 0x11 ), /* 17 */ +/* 508 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 510 */ NdrFcShort( 0x0 ), /* 0 */ +/* 512 */ NdrFcShort( 0x8 ), /* 8 */ +/* 514 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 516 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 518 */ NdrFcShort( 0x1 ), /* 1 */ +/* 520 */ NdrFcShort( 0x0 ), /* 0 */ +/* 522 */ NdrFcShort( 0x0 ), /* 0 */ +/* 524 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter session_id */ + +/* 526 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 528 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 530 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 532 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 534 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 536 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_sessionId */ + +/* 538 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 540 */ NdrFcLong( 0x0 ), /* 0 */ +/* 544 */ NdrFcShort( 0x12 ), /* 18 */ +/* 546 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 548 */ NdrFcShort( 0x0 ), /* 0 */ +/* 550 */ NdrFcShort( 0x8 ), /* 8 */ +/* 552 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 554 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 556 */ NdrFcShort( 0x0 ), /* 0 */ +/* 558 */ NdrFcShort( 0x1 ), /* 1 */ +/* 560 */ NdrFcShort( 0x0 ), /* 0 */ +/* 562 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter session_id */ + +/* 564 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 566 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 568 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 570 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 572 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 574 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_sendPings */ + +/* 576 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 578 */ NdrFcLong( 0x0 ), /* 0 */ +/* 582 */ NdrFcShort( 0x13 ), /* 19 */ +/* 584 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 586 */ NdrFcShort( 0x0 ), /* 0 */ +/* 588 */ NdrFcShort( 0x22 ), /* 34 */ +/* 590 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 592 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 594 */ NdrFcShort( 0x0 ), /* 0 */ +/* 596 */ NdrFcShort( 0x0 ), /* 0 */ +/* 598 */ NdrFcShort( 0x0 ), /* 0 */ +/* 600 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter send_pings */ + +/* 602 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 604 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 606 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 608 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 610 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 612 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_sendPings */ + +/* 614 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 616 */ NdrFcLong( 0x0 ), /* 0 */ +/* 620 */ NdrFcShort( 0x14 ), /* 20 */ +/* 622 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 624 */ NdrFcShort( 0x6 ), /* 6 */ +/* 626 */ NdrFcShort( 0x8 ), /* 8 */ +/* 628 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 630 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 632 */ NdrFcShort( 0x0 ), /* 0 */ +/* 634 */ NdrFcShort( 0x0 ), /* 0 */ +/* 636 */ NdrFcShort( 0x0 ), /* 0 */ +/* 638 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter send_pings */ + +/* 640 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 642 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 644 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 646 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 648 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 650 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_priority */ + +/* 652 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 654 */ NdrFcLong( 0x0 ), /* 0 */ +/* 658 */ NdrFcShort( 0x15 ), /* 21 */ +/* 660 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 662 */ NdrFcShort( 0x0 ), /* 0 */ +/* 664 */ NdrFcShort( 0x24 ), /* 36 */ +/* 666 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 668 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 672 */ NdrFcShort( 0x0 ), /* 0 */ +/* 674 */ NdrFcShort( 0x0 ), /* 0 */ +/* 676 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter priority */ + +/* 678 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 680 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 682 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 684 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 686 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 688 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_priority */ + +/* 690 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 692 */ NdrFcLong( 0x0 ), /* 0 */ +/* 696 */ NdrFcShort( 0x16 ), /* 22 */ +/* 698 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 700 */ NdrFcShort( 0x8 ), /* 8 */ +/* 702 */ NdrFcShort( 0x8 ), /* 8 */ +/* 704 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 706 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 708 */ NdrFcShort( 0x0 ), /* 0 */ +/* 710 */ NdrFcShort( 0x0 ), /* 0 */ +/* 712 */ NdrFcShort( 0x0 ), /* 0 */ +/* 714 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter priority */ + +/* 716 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 718 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 720 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 722 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 724 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 726 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_postInstallAction */ + + + /* Procedure get_Count */ + +/* 728 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 730 */ NdrFcLong( 0x0 ), /* 0 */ +/* 734 */ NdrFcShort( 0x17 ), /* 23 */ +/* 736 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 738 */ NdrFcShort( 0x0 ), /* 0 */ +/* 740 */ NdrFcShort( 0x24 ), /* 36 */ +/* 742 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 744 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 746 */ NdrFcShort( 0x0 ), /* 0 */ +/* 748 */ NdrFcShort( 0x0 ), /* 0 */ +/* 750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 752 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0015 */ + + + /* Parameter count */ + +/* 754 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 756 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 758 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 760 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 762 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 764 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_Item */ + +/* 766 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 768 */ NdrFcLong( 0x0 ), /* 0 */ +/* 772 */ NdrFcShort( 0x18 ), /* 24 */ +/* 774 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 776 */ NdrFcShort( 0x8 ), /* 8 */ +/* 778 */ NdrFcShort( 0x8 ), /* 8 */ +/* 780 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 782 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 784 */ NdrFcShort( 0x0 ), /* 0 */ +/* 786 */ NdrFcShort( 0x0 ), /* 0 */ +/* 788 */ NdrFcShort( 0x0 ), /* 0 */ +/* 790 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 792 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 794 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 796 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter app */ + +/* 798 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 800 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 802 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + +/* 804 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 806 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 808 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_altTokens */ + +/* 810 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 812 */ NdrFcLong( 0x0 ), /* 0 */ +/* 816 */ NdrFcShort( 0x19 ), /* 25 */ +/* 818 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 820 */ NdrFcShort( 0x18 ), /* 24 */ +/* 822 */ NdrFcShort( 0x8 ), /* 8 */ +/* 824 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 826 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 828 */ NdrFcShort( 0x0 ), /* 0 */ +/* 830 */ NdrFcShort( 0x0 ), /* 0 */ +/* 832 */ NdrFcShort( 0x0 ), /* 0 */ +/* 834 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter impersonation_token */ + +/* 836 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 838 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 840 */ 0xb9, /* FC_UINT3264 */ + 0x0, /* 0 */ + + /* Parameter primary_token */ + +/* 842 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 844 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 846 */ 0xb9, /* FC_UINT3264 */ + 0x0, /* 0 */ + + /* Parameter caller_proc_id */ + +/* 848 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 850 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 852 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 854 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 856 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 858 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_parentHWND */ + +/* 860 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 862 */ NdrFcLong( 0x0 ), /* 0 */ +/* 866 */ NdrFcShort( 0x1a ), /* 26 */ +/* 868 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 870 */ NdrFcShort( 0x8 ), /* 8 */ +/* 872 */ NdrFcShort( 0x8 ), /* 8 */ +/* 874 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 876 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 878 */ NdrFcShort( 0x0 ), /* 0 */ +/* 880 */ NdrFcShort( 0x0 ), /* 0 */ +/* 882 */ NdrFcShort( 0x0 ), /* 0 */ +/* 884 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter hwnd */ + +/* 886 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 888 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 890 */ 0xb9, /* FC_UINT3264 */ + 0x0, /* 0 */ + + /* Return value */ + +/* 892 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 894 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 896 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure initialize */ + +/* 898 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 900 */ NdrFcLong( 0x0 ), /* 0 */ +/* 904 */ NdrFcShort( 0x1b ), /* 27 */ +/* 906 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 908 */ NdrFcShort( 0x0 ), /* 0 */ +/* 910 */ NdrFcShort( 0x8 ), /* 8 */ +/* 912 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 914 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 916 */ NdrFcShort( 0x0 ), /* 0 */ +/* 918 */ NdrFcShort( 0x0 ), /* 0 */ +/* 920 */ NdrFcShort( 0x0 ), /* 0 */ +/* 922 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 924 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 926 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 928 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_command */ + + + /* Procedure createApp */ + +/* 930 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 932 */ NdrFcLong( 0x0 ), /* 0 */ +/* 936 */ NdrFcShort( 0x1c ), /* 28 */ +/* 938 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 940 */ NdrFcShort( 0x0 ), /* 0 */ +/* 942 */ NdrFcShort( 0x8 ), /* 8 */ +/* 944 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 946 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 948 */ NdrFcShort( 0x0 ), /* 0 */ +/* 950 */ NdrFcShort( 0x1 ), /* 1 */ +/* 952 */ NdrFcShort( 0x0 ), /* 0 */ +/* 954 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter command_id */ + + + /* Parameter app_id */ + +/* 956 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 958 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 960 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter command */ + + + /* Parameter app */ + +/* 962 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 964 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 966 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + + + /* Return value */ + +/* 968 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 970 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 972 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure createInstalledApp */ + +/* 974 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 976 */ NdrFcLong( 0x0 ), /* 0 */ +/* 980 */ NdrFcShort( 0x1d ), /* 29 */ +/* 982 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 984 */ NdrFcShort( 0x0 ), /* 0 */ +/* 986 */ NdrFcShort( 0x8 ), /* 8 */ +/* 988 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 990 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 992 */ NdrFcShort( 0x0 ), /* 0 */ +/* 994 */ NdrFcShort( 0x1 ), /* 1 */ +/* 996 */ NdrFcShort( 0x0 ), /* 0 */ +/* 998 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_id */ + +/* 1000 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1002 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1004 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter app */ + +/* 1006 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 1008 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1010 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + +/* 1012 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1014 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1016 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure createAllInstalledApps */ + +/* 1018 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1020 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1024 */ NdrFcShort( 0x1e ), /* 30 */ +/* 1026 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1028 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1030 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1032 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1034 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1036 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1038 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1040 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1042 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1044 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1046 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1048 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure checkForUpdate */ + +/* 1050 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1052 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1056 */ NdrFcShort( 0x1f ), /* 31 */ +/* 1058 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1060 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1062 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1064 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1066 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1068 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1070 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1072 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1074 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1076 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1078 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1080 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure download */ + +/* 1082 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1084 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1088 */ NdrFcShort( 0x20 ), /* 32 */ +/* 1090 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1092 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1094 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1096 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1098 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1106 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure install */ + +/* 1114 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1116 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1120 */ NdrFcShort( 0x21 ), /* 33 */ +/* 1122 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1124 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1126 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1128 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1130 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1132 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1136 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1138 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1142 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1144 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure updateAllApps */ + +/* 1146 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1148 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1152 */ NdrFcShort( 0x22 ), /* 34 */ +/* 1154 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1156 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1158 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1160 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1162 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1164 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1166 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1168 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1170 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1172 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1174 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1176 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure stop */ + +/* 1178 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1180 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1184 */ NdrFcShort( 0x23 ), /* 35 */ +/* 1186 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1188 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1190 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1192 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1194 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1196 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1198 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1200 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1202 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1204 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1206 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1208 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure pause */ + +/* 1210 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1212 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1216 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1218 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1220 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1222 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1224 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1226 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1228 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1230 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1232 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1234 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1236 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1238 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1240 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure resume */ + +/* 1242 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1244 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1248 */ NdrFcShort( 0x25 ), /* 37 */ +/* 1250 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1252 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1254 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1256 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 1258 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1260 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1262 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1264 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1266 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 1268 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1270 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1272 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure isBusy */ + +/* 1274 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1276 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1280 */ NdrFcShort( 0x26 ), /* 38 */ +/* 1282 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1284 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1286 */ NdrFcShort( 0x22 ), /* 34 */ +/* 1288 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 1290 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1294 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1296 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1298 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter is_busy */ + +/* 1300 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1302 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1304 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1306 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1308 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1310 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure downloadPackage */ + +/* 1312 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1314 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1318 */ NdrFcShort( 0x27 ), /* 39 */ +/* 1320 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1322 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1324 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1326 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 1328 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1330 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1332 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1334 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1336 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_id */ + +/* 1338 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1340 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1342 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter package_name */ + +/* 1344 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1346 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1348 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 1350 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1352 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1354 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentState */ + +/* 1356 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1358 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1362 */ NdrFcShort( 0x28 ), /* 40 */ +/* 1364 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1366 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1368 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1370 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1372 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1374 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1376 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1378 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1380 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter current_state */ + +/* 1382 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1384 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1386 */ NdrFcShort( 0x3fa ), /* Type Offset=1018 */ + + /* Return value */ + +/* 1388 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1390 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1392 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure createAppBundleWeb */ + + + /* Procedure get_currentVersion */ + +/* 1394 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1396 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1400 */ NdrFcShort( 0x7 ), /* 7 */ +/* 1402 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1406 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1408 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1410 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1412 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1414 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1416 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1418 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_bundle_web */ + + + /* Parameter current */ + +/* 1420 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 1422 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1424 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + + + /* Return value */ + +/* 1426 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1428 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1430 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentVersionWeb */ + + + /* Procedure get_nextVersion */ + +/* 1432 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1434 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1438 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1440 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1442 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1444 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1446 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1448 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1450 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1452 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1454 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1456 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter current */ + + + /* Parameter next */ + +/* 1458 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 1460 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1462 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + + + /* Return value */ + +/* 1464 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1466 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1468 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_displayLanguage */ + + + /* Procedure get_displayName */ + +/* 1470 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1472 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1476 */ NdrFcShort( 0xa ), /* 10 */ +/* 1478 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1480 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1482 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1484 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1486 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1488 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1490 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1492 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1494 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppBundleWeb0000 */ + + + /* Parameter __MIDL__IApp0001 */ + +/* 1496 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1498 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1500 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + + + /* Return value */ + +/* 1502 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1504 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1506 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_displayLanguage */ + + + /* Procedure put_displayName */ + +/* 1508 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1510 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1514 */ NdrFcShort( 0xb ), /* 11 */ +/* 1516 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1518 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1520 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1522 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1524 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1526 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1528 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1530 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1532 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IAppBundleWeb0001 */ + + + /* Parameter __MIDL__IApp0002 */ + +/* 1534 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1536 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1538 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + + + /* Return value */ + +/* 1540 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1542 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1544 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_language */ + +/* 1546 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1548 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1552 */ NdrFcShort( 0xc ), /* 12 */ +/* 1554 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1556 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1558 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1560 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1562 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1564 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1566 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1568 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1570 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0003 */ + +/* 1572 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1574 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1576 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 1578 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1580 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1582 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_language */ + +/* 1584 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1586 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1590 */ NdrFcShort( 0xd ), /* 13 */ +/* 1592 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1594 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1596 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1598 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1600 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1602 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1604 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1606 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1608 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0004 */ + +/* 1610 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1612 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1614 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 1616 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1618 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1620 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_ap */ + +/* 1622 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1624 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1628 */ NdrFcShort( 0xe ), /* 14 */ +/* 1630 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1632 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1634 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1636 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1638 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1640 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1642 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1644 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1646 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0005 */ + +/* 1648 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1650 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1652 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 1654 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1656 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1658 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_ap */ + +/* 1660 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1662 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1666 */ NdrFcShort( 0xf ), /* 15 */ +/* 1668 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1672 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1674 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1676 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1678 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1680 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1682 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1684 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0006 */ + +/* 1686 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1688 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1690 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 1692 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1694 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1696 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_ttToken */ + +/* 1698 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1700 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1704 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1706 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1708 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1710 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1712 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1714 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1716 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1718 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1720 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1722 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0007 */ + +/* 1724 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1726 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1728 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 1730 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1732 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1734 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_ttToken */ + +/* 1736 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1738 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1742 */ NdrFcShort( 0x11 ), /* 17 */ +/* 1744 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1746 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1748 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1750 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1752 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1756 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1758 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1760 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0008 */ + +/* 1762 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1764 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1766 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 1768 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1770 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1772 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_completionMessage */ + + + /* Procedure get_iid */ + +/* 1774 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1776 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1780 */ NdrFcShort( 0x12 ), /* 18 */ +/* 1782 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1784 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1786 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1788 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1790 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1792 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1794 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1796 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1798 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0010 */ + + + /* Parameter __MIDL__IApp0009 */ + +/* 1800 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1802 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1804 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + + + /* Return value */ + +/* 1806 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1808 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1810 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_iid */ + +/* 1812 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1814 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1818 */ NdrFcShort( 0x13 ), /* 19 */ +/* 1820 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1822 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1824 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1826 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1828 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1830 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1832 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1834 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1836 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0010 */ + +/* 1838 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1840 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1842 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 1844 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1846 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1848 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_brandCode */ + +/* 1850 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1852 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1856 */ NdrFcShort( 0x14 ), /* 20 */ +/* 1858 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1860 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1862 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1864 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1866 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1868 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1870 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1872 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1874 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0011 */ + +/* 1876 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1878 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1880 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 1882 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1884 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1886 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_brandCode */ + +/* 1888 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1890 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1894 */ NdrFcShort( 0x15 ), /* 21 */ +/* 1896 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1898 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1900 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1902 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1904 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1906 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1908 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1910 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1912 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0012 */ + +/* 1914 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1916 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1918 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 1920 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1922 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1924 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_postInstallUrl */ + + + /* Procedure get_clientId */ + +/* 1926 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1928 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1932 */ NdrFcShort( 0x16 ), /* 22 */ +/* 1934 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1936 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1938 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1940 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1942 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1944 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1946 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1948 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1950 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0014 */ + + + /* Parameter __MIDL__IApp0013 */ + +/* 1952 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1954 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1956 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + + + /* Return value */ + +/* 1958 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1960 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1962 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_clientId */ + +/* 1964 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1966 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1970 */ NdrFcShort( 0x17 ), /* 23 */ +/* 1972 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1974 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1976 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1978 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1980 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 1982 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1984 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1986 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1988 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0014 */ + +/* 1990 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1992 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1994 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 1996 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1998 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2000 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_labels */ + +/* 2002 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2004 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2008 */ NdrFcShort( 0x18 ), /* 24 */ +/* 2010 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2012 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2014 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2016 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2018 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2020 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2022 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2024 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2026 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0015 */ + +/* 2028 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2030 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2032 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 2034 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2036 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2038 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_labels */ + +/* 2040 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2042 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2046 */ NdrFcShort( 0x19 ), /* 25 */ +/* 2048 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2050 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2052 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2054 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2056 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2058 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2060 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2062 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2064 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0016 */ + +/* 2066 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2068 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2070 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 2072 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2074 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2076 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_referralId */ + +/* 2078 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2080 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2084 */ NdrFcShort( 0x1a ), /* 26 */ +/* 2086 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2088 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2090 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2092 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2094 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2096 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2098 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2102 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0017 */ + +/* 2104 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2106 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2108 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 2110 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2112 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2114 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_referralId */ + +/* 2116 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2118 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2122 */ NdrFcShort( 0x1b ), /* 27 */ +/* 2124 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2126 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2128 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2130 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2132 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2136 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2138 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2140 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0018 */ + +/* 2142 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2144 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2146 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 2148 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2150 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2152 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_browserType */ + +/* 2154 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2156 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2160 */ NdrFcShort( 0x1d ), /* 29 */ +/* 2162 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2164 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2166 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2168 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2170 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2172 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2174 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2176 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2178 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0019 */ + +/* 2180 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2182 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2184 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2186 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2188 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2190 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_browserType */ + +/* 2192 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2194 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2198 */ NdrFcShort( 0x1e ), /* 30 */ +/* 2200 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2202 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2204 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2206 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2208 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2210 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2212 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2214 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2216 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0020 */ + +/* 2218 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2220 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2222 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2224 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2226 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2228 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_clientInstallData */ + +/* 2230 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2232 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2236 */ NdrFcShort( 0x1f ), /* 31 */ +/* 2238 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2240 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2242 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2244 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2246 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2248 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2250 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2252 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2254 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0021 */ + +/* 2256 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2258 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2260 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 2262 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2264 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2266 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_clientInstallData */ + +/* 2268 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2270 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2274 */ NdrFcShort( 0x20 ), /* 32 */ +/* 2276 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2278 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2280 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2282 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2284 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2286 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2288 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2290 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2292 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0022 */ + +/* 2294 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2296 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2298 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 2300 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2302 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2304 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_serverInstallDataIndex */ + +/* 2306 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2308 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2312 */ NdrFcShort( 0x21 ), /* 33 */ +/* 2314 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2316 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2318 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2320 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2322 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2324 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2326 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2328 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2330 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0023 */ + +/* 2332 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2334 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2336 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 2338 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2340 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2342 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_serverInstallDataIndex */ + +/* 2344 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2346 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2350 */ NdrFcShort( 0x22 ), /* 34 */ +/* 2352 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2354 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2356 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2358 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2360 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2362 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2364 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2366 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2368 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0024 */ + +/* 2370 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2372 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2374 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 2376 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2378 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2380 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isEulaAccepted */ + +/* 2382 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2384 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2388 */ NdrFcShort( 0x23 ), /* 35 */ +/* 2390 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2392 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2394 */ NdrFcShort( 0x22 ), /* 34 */ +/* 2396 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2398 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2400 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2402 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2406 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0025 */ + +/* 2408 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2410 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2412 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2414 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2416 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2418 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_isEulaAccepted */ + +/* 2420 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2422 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2426 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2428 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2430 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2432 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2434 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2436 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2438 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2440 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2442 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2444 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0026 */ + +/* 2446 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2448 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2450 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2452 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2454 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2456 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_usageStatsEnable */ + +/* 2458 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2460 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2464 */ NdrFcShort( 0x25 ), /* 37 */ +/* 2466 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2468 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2470 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2472 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2474 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2476 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2478 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2480 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2482 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0027 */ + +/* 2484 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2486 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2488 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2490 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2492 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2494 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_usageStatsEnable */ + +/* 2496 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2498 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2502 */ NdrFcShort( 0x26 ), /* 38 */ +/* 2504 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2506 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2508 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2510 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2512 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2514 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2516 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2518 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2520 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0028 */ + +/* 2522 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2524 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2526 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2528 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2530 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2532 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_installTimeDiffSec */ + +/* 2534 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2536 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2540 */ NdrFcShort( 0x27 ), /* 39 */ +/* 2542 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2544 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2546 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2548 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2550 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2552 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2554 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2556 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2558 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0029 */ + +/* 2560 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2562 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2564 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2566 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2568 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2570 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentState */ + +/* 2572 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2574 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2578 */ NdrFcShort( 0x28 ), /* 40 */ +/* 2580 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2584 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2586 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2588 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2590 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2592 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2594 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2596 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IApp0030 */ + +/* 2598 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 2600 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2602 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + +/* 2604 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2606 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2608 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isDone */ + + + /* Procedure get_isWebAccessible */ + +/* 2610 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2612 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2616 */ NdrFcShort( 0x7 ), /* 7 */ +/* 2618 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2620 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2622 */ NdrFcShort( 0x22 ), /* 34 */ +/* 2624 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2626 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2628 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2630 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2632 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2634 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter is_done */ + + + /* Parameter __MIDL__IAppCommand0000 */ + +/* 2636 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2638 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2640 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 2642 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2644 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2646 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_completionHResult */ + + + /* Procedure get_packageCount */ + + + /* Procedure get_exitCode */ + + + /* Procedure get_packageCount */ + + + /* Procedure get_status */ + +/* 2648 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2650 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2654 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2656 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2658 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2660 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2662 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2664 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2666 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2668 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2672 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter hr */ + + + /* Parameter count */ + + + /* Parameter __MIDL__IAppCommandWeb0001 */ + + + /* Parameter count */ + + + /* Parameter __MIDL__IAppCommand0001 */ + +/* 2674 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2676 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2678 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + +/* 2680 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2682 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2684 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_bytesDownloaded */ + + + /* Procedure get_exitCode */ + +/* 2686 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2688 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2692 */ NdrFcShort( 0x9 ), /* 9 */ +/* 2694 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2696 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2698 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2700 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2702 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2704 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2706 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2708 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2710 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0002 */ + + + /* Parameter __MIDL__IAppCommand0002 */ + +/* 2712 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2714 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2716 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 2718 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2720 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2722 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure execute */ + +/* 2724 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2726 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2730 */ NdrFcShort( 0xa ), /* 10 */ +/* 2732 */ NdrFcShort( 0x58 ), /* X64 Stack size/offset = 88 */ +/* 2734 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2736 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2738 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0xa, /* 10 */ +/* 2740 */ 0xa, /* 10 */ + 0x85, /* Ext Flags: new corr desc, srv corr check, has big byval param */ +/* 2742 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2744 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2746 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2748 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter arg1 */ + +/* 2750 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2752 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2754 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg2 */ + +/* 2756 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2758 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2760 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg3 */ + +/* 2762 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2764 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2766 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg4 */ + +/* 2768 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2770 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2772 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg5 */ + +/* 2774 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2776 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2778 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg6 */ + +/* 2780 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2782 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2784 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg7 */ + +/* 2786 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2788 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2790 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg8 */ + +/* 2792 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2794 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 2796 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg9 */ + +/* 2798 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2800 */ NdrFcShort( 0x48 ), /* X64 Stack size/offset = 72 */ +/* 2802 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Return value */ + +/* 2804 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2806 */ NdrFcShort( 0x50 ), /* X64 Stack size/offset = 80 */ +/* 2808 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_packageWeb */ + + + /* Procedure get_package */ + +/* 2810 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2812 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2816 */ NdrFcShort( 0x9 ), /* 9 */ +/* 2818 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2820 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2822 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2824 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 2826 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2828 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2830 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2832 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2834 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + + + /* Parameter index */ + +/* 2836 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2838 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2840 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter package */ + + + /* Parameter package */ + +/* 2842 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 2844 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2846 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + + + /* Return value */ + +/* 2848 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2850 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2852 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get */ + +/* 2854 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2856 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2860 */ NdrFcShort( 0x7 ), /* 7 */ +/* 2862 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2864 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2866 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2868 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2870 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2872 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2874 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2876 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2878 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter dir */ + +/* 2880 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2882 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2884 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 2886 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2888 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2890 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isAvailable */ + +/* 2892 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2894 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2898 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2900 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2902 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2904 */ NdrFcShort( 0x22 ), /* 34 */ +/* 2906 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2908 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2910 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2912 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2914 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2916 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__IPackage0000 */ + +/* 2918 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2920 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2922 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2924 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2926 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2928 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_availableVersion */ + +/* 2930 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2932 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2936 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2938 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2940 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2942 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2944 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2946 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2948 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2950 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2952 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2954 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0001 */ + +/* 2956 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2958 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2960 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 2962 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2964 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2966 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_totalBytesToDownload */ + +/* 2968 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2970 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2974 */ NdrFcShort( 0xa ), /* 10 */ +/* 2976 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2978 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2980 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2982 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2984 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2986 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2988 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2990 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2992 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0003 */ + +/* 2994 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2996 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2998 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3000 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3002 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3004 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_downloadTimeRemainingMs */ + +/* 3006 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3008 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3012 */ NdrFcShort( 0xb ), /* 11 */ +/* 3014 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3016 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3018 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3020 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3022 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3024 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3026 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3028 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3030 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0004 */ + +/* 3032 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3034 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3036 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3038 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3040 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3042 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nextRetryTime */ + +/* 3044 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3046 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3050 */ NdrFcShort( 0xc ), /* 12 */ +/* 3052 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3054 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3056 */ NdrFcShort( 0x2c ), /* 44 */ +/* 3058 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3060 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3062 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3066 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3068 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0005 */ + +/* 3070 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3072 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3074 */ 0xb, /* FC_HYPER */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3076 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3078 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3080 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_length */ + + + /* Procedure get_installProgress */ + +/* 3082 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3084 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3088 */ NdrFcShort( 0xd ), /* 13 */ +/* 3090 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3092 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3094 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3096 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3098 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3106 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + + + /* Parameter __MIDL__ICurrentState0006 */ + +/* 3108 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 3114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3116 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3118 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_installTimeRemainingMs */ + +/* 3120 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3122 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3126 */ NdrFcShort( 0xe ), /* 14 */ +/* 3128 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3130 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3132 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3134 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3136 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3138 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3140 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3142 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3144 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0007 */ + +/* 3146 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3148 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3150 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3152 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3154 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3156 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isCanceled */ + +/* 3158 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3160 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3164 */ NdrFcShort( 0xf ), /* 15 */ +/* 3166 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3168 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3170 */ NdrFcShort( 0x22 ), /* 34 */ +/* 3172 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3174 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3176 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3178 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3180 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3182 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter is_canceled */ + +/* 3184 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3188 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3190 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3192 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3194 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_errorCode */ + +/* 3196 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3198 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3202 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3204 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3208 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3210 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3212 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3214 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3216 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3218 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3220 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0008 */ + +/* 3222 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3224 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3226 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3230 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3232 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_extraCode1 */ + +/* 3234 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3236 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3240 */ NdrFcShort( 0x11 ), /* 17 */ +/* 3242 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3244 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3246 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3248 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3250 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3252 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3254 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3256 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3258 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0009 */ + +/* 3260 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3262 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3264 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3266 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3268 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3270 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_installerResultCode */ + +/* 3272 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3274 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3278 */ NdrFcShort( 0x13 ), /* 19 */ +/* 3280 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3282 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3284 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3286 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3288 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3290 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3294 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3296 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0011 */ + +/* 3298 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3300 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3302 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3304 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3306 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3308 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_installerResultExtraCode1 */ + +/* 3310 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3312 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3316 */ NdrFcShort( 0x14 ), /* 20 */ +/* 3318 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3320 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3322 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3324 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3326 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3328 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3330 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3332 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3334 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0012 */ + +/* 3336 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3338 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3340 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3342 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3344 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3346 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_postInstallLaunchCommandLine */ + +/* 3348 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3350 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3354 */ NdrFcShort( 0x15 ), /* 21 */ +/* 3356 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3358 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3360 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3362 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 3364 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3366 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3368 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3370 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3372 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __MIDL__ICurrentState0013 */ + +/* 3374 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 3376 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3378 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 3380 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3382 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3384 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure UpdateRegistry */ + +/* 3386 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3388 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3392 */ NdrFcShort( 0x7 ), /* 7 */ +/* 3394 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3396 */ NdrFcShort( 0x6 ), /* 6 */ +/* 3398 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3400 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3402 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 3404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3406 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3408 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3410 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_id */ + +/* 3412 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3414 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3416 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter is_machine */ + +/* 3418 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3420 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3422 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3424 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3426 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3428 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure QueryUserForCredentials */ + +/* 3430 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3432 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3436 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3438 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 3440 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3442 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3444 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x6, /* 6 */ +/* 3446 */ 0xa, /* 10 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 3448 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3450 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3452 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3454 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter owner_hwnd */ + +/* 3456 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3458 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3460 */ 0xb9, /* FC_UINT3264 */ + 0x0, /* 0 */ + + /* Parameter server */ + +/* 3462 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3464 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3466 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter message */ + +/* 3468 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3470 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3472 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter username */ + +/* 3474 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 3476 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3478 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Parameter password */ + +/* 3480 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 3482 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3484 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 3486 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3488 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 3490 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure setOriginURL */ + +/* 3492 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3494 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3498 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3500 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3502 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3504 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3506 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 3508 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 3510 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3512 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3514 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3516 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter origin_url */ + +/* 3518 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3520 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3522 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 3524 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3526 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3528 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure createApp */ + +/* 3530 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3532 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3536 */ NdrFcShort( 0x7 ), /* 7 */ +/* 3538 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 3540 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3542 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3544 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 3546 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 3548 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3550 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3552 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3554 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_guid */ + +/* 3556 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3558 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3560 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter brand_code */ + +/* 3562 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3564 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3566 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter language */ + +/* 3568 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3570 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3572 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter ap */ + +/* 3574 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3576 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3578 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 3580 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3582 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3584 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnInstalling */ + + + /* Procedure createAllInstalledApps */ + +/* 3586 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3588 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3592 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3594 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3596 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3598 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3600 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3602 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3604 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3606 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3608 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3610 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 3612 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3614 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3616 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_parentHWND */ + +/* 3618 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3620 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3624 */ NdrFcShort( 0xc ), /* 12 */ +/* 3626 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3628 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3630 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3632 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3634 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3636 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3638 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3640 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3642 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter hwnd */ + +/* 3644 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3646 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3648 */ 0xb9, /* FC_UINT3264 */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3650 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3652 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3654 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_appWeb */ + +/* 3656 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3658 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3662 */ NdrFcShort( 0xe ), /* 14 */ +/* 3664 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3666 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3668 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3670 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3672 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3674 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3676 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3678 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3680 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 3682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3684 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3686 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter app_web */ + +/* 3688 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3690 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3692 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + +/* 3694 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3696 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3698 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure initialize */ + +/* 3700 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3702 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3706 */ NdrFcShort( 0xf ), /* 15 */ +/* 3708 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3710 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3712 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3714 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3716 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3718 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3720 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3722 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3724 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 3726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3728 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3730 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure checkForUpdate */ + +/* 3732 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3734 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3738 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3740 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3742 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3744 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3746 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3748 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3756 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 3758 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3762 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure download */ + +/* 3764 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3766 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3770 */ NdrFcShort( 0x11 ), /* 17 */ +/* 3772 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3774 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3776 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3778 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3780 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3782 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3784 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3786 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3788 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 3790 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3792 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3794 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure install */ + +/* 3796 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3798 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3802 */ NdrFcShort( 0x12 ), /* 18 */ +/* 3804 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3806 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3808 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3810 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3812 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3814 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3816 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3818 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3820 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 3822 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3824 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3826 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure pause */ + +/* 3828 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3830 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3834 */ NdrFcShort( 0x13 ), /* 19 */ +/* 3836 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3838 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3840 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3842 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3844 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3846 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3848 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3850 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3852 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 3854 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3856 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3858 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure resume */ + +/* 3860 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3862 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3866 */ NdrFcShort( 0x14 ), /* 20 */ +/* 3868 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3870 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3872 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3874 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3876 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3878 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3880 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3882 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3884 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 3886 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3888 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3890 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure cancel */ + +/* 3892 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3894 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3898 */ NdrFcShort( 0x15 ), /* 21 */ +/* 3900 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3902 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3904 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3906 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 3908 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3910 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3912 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3914 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3916 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 3918 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3920 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3922 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure downloadPackage */ + +/* 3924 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3926 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3930 */ NdrFcShort( 0x16 ), /* 22 */ +/* 3932 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3934 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3936 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3938 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3940 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 3942 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3944 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3946 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3948 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_id */ + +/* 3950 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3952 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3954 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter package_name */ + +/* 3956 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 3958 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3960 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Return value */ + +/* 3962 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3964 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3966 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentState */ + +/* 3968 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3970 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3974 */ NdrFcShort( 0x17 ), /* 23 */ +/* 3976 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3978 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3980 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3982 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 3984 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3986 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3988 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3990 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3992 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter current_state */ + +/* 3994 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 3996 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3998 */ NdrFcShort( 0x3fa ), /* Type Offset=1018 */ + + /* Return value */ + +/* 4000 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4002 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4004 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_command */ + +/* 4006 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4008 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4012 */ NdrFcShort( 0xa ), /* 10 */ +/* 4014 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4016 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4018 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4020 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4022 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 4024 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4026 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4028 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4030 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter command_id */ + +/* 4032 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 4034 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4036 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter command */ + +/* 4038 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4040 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4042 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + +/* 4044 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4046 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4048 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure cancel */ + +/* 4050 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4052 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4056 */ NdrFcShort( 0xb ), /* 11 */ +/* 4058 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4060 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4062 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4064 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4066 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4068 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4070 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4072 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4074 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 4076 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4078 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4080 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentState */ + +/* 4082 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4084 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4088 */ NdrFcShort( 0xc ), /* 12 */ +/* 4090 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4092 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4094 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4096 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4098 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4106 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter current_state */ + +/* 4108 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4112 */ NdrFcShort( 0x6 ), /* Type Offset=6 */ + + /* Return value */ + +/* 4114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4116 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4118 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure launch */ + +/* 4120 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4122 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4126 */ NdrFcShort( 0xd ), /* 13 */ +/* 4128 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4130 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4132 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4134 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4136 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4138 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4140 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4142 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4144 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 4146 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4148 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4150 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure uninstall */ + +/* 4152 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4154 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4158 */ NdrFcShort( 0xe ), /* 14 */ +/* 4160 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4162 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4164 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4166 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4168 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4170 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4172 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4174 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4176 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 4178 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4180 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4182 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure execute */ + +/* 4184 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4186 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4190 */ NdrFcShort( 0x9 ), /* 9 */ +/* 4192 */ NdrFcShort( 0x58 ), /* X64 Stack size/offset = 88 */ +/* 4194 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4196 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4198 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0xa, /* 10 */ +/* 4200 */ 0xa, /* 10 */ + 0x85, /* Ext Flags: new corr desc, srv corr check, has big byval param */ +/* 4202 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4204 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4208 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter arg1 */ + +/* 4210 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4212 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4214 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg2 */ + +/* 4216 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4218 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4220 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg3 */ + +/* 4222 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4224 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4226 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg4 */ + +/* 4228 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4230 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4232 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg5 */ + +/* 4234 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4236 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4238 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg6 */ + +/* 4240 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4242 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 4244 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg7 */ + +/* 4246 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4248 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 4250 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg8 */ + +/* 4252 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4254 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 4256 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter arg9 */ + +/* 4258 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4260 */ NdrFcShort( 0x48 ), /* X64 Stack size/offset = 72 */ +/* 4262 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Return value */ + +/* 4264 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4266 */ NdrFcShort( 0x50 ), /* X64 Stack size/offset = 80 */ +/* 4268 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure createOmahaMachineServerAsync */ + +/* 4270 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4272 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4276 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4278 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4280 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4282 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4284 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x4, /* 4 */ +/* 4286 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 4288 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4290 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4294 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter origin_url */ + +/* 4296 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 4298 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4300 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter create_elevated */ + +/* 4302 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4304 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4306 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter status */ + +/* 4308 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4310 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4312 */ NdrFcShort( 0x41a ), /* Type Offset=1050 */ + + /* Return value */ + +/* 4314 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4316 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4318 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure Send */ + +/* 4320 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4322 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4326 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4328 */ NdrFcShort( 0x48 ), /* X64 Stack size/offset = 72 */ +/* 4330 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4332 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4334 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x8, /* 8 */ +/* 4336 */ 0xa, /* 10 */ + 0x87, /* Ext Flags: new corr desc, clt corr check, srv corr check, has big byval param */ +/* 4338 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4340 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4342 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4344 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter url */ + +/* 4346 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 4348 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4350 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter post_data */ + +/* 4352 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 4354 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4356 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter request_headers */ + +/* 4358 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 4360 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4362 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter response_headers_needed */ + +/* 4364 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4366 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4368 */ NdrFcShort( 0x40c ), /* Type Offset=1036 */ + + /* Parameter response_headers */ + +/* 4370 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 4372 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4374 */ NdrFcShort( 0x3fa ), /* Type Offset=1018 */ + + /* Parameter response_code */ + +/* 4376 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4378 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 4380 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter cache_filename */ + +/* 4382 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 4384 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 4386 */ NdrFcShort( 0x3a ), /* Type Offset=58 */ + + /* Return value */ + +/* 4388 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4390 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 4392 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure LaunchCmdLine */ + +/* 4394 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4396 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4400 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4402 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4406 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4408 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4410 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4412 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4414 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4416 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4418 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter cmd_line */ + +/* 4420 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4422 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4424 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Return value */ + +/* 4426 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4428 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4430 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure LaunchBrowser */ + +/* 4432 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4434 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4438 */ NdrFcShort( 0x4 ), /* 4 */ +/* 4440 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4442 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4444 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4446 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4448 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4450 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4452 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4454 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4456 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter browser_type */ + +/* 4458 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4460 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4462 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter url */ + +/* 4464 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4466 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4468 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Return value */ + +/* 4470 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4472 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4474 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure LaunchCmdElevated */ + +/* 4476 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4478 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4482 */ NdrFcShort( 0x5 ), /* 5 */ +/* 4484 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 4486 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4488 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4490 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 4492 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4494 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4496 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4498 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4500 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_guid */ + +/* 4502 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4504 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4506 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Parameter cmd_id */ + +/* 4508 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4510 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4512 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Parameter caller_proc_id */ + +/* 4514 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4516 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4518 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter proc_handle */ + +/* 4520 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4522 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4524 */ 0xb9, /* FC_UINT3264 */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4526 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4528 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4530 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure LaunchAppCommand */ + +/* 4532 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4534 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4538 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4540 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4542 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4544 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4546 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4548 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4550 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4552 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4554 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4556 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_guid */ + +/* 4558 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4560 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4562 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Parameter cmd_id */ + +/* 4564 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4566 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4568 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Return value */ + +/* 4570 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4572 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4574 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnShow */ + + + /* Procedure DoClose */ + +/* 4576 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4578 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4582 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4584 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4586 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4588 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4590 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4592 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4594 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4596 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4598 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4600 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 4602 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4604 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4606 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnCheckingForUpdate */ + + + /* Procedure DoPause */ + +/* 4608 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4610 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4614 */ NdrFcShort( 0x4 ), /* 4 */ +/* 4616 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4618 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4620 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4622 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4624 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4626 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4628 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4630 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4632 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 4634 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4636 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4638 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure DoResume */ + +/* 4640 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4642 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4646 */ NdrFcShort( 0x5 ), /* 5 */ +/* 4648 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4650 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4652 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4654 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4656 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4658 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4660 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4662 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4664 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 4666 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4668 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4670 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnWaitingToDownload */ + + + /* Procedure DoRestartBrowsers */ + +/* 4672 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4674 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4678 */ NdrFcShort( 0x6 ), /* 6 */ +/* 4680 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4682 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4684 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4686 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4688 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4690 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4692 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4694 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4696 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 4698 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4700 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4702 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure DoReboot */ + +/* 4704 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4706 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4710 */ NdrFcShort( 0x7 ), /* 7 */ +/* 4712 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4714 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4716 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4718 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4720 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4722 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4724 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4726 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4728 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 4730 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4732 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4734 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure DoLaunchBrowser */ + +/* 4736 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4738 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4742 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4744 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4746 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4748 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4750 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4752 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4756 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4758 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4760 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter url */ + +/* 4762 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4764 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4766 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Return value */ + +/* 4768 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4770 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4772 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnUpdateAvailable */ + +/* 4774 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4776 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4780 */ NdrFcShort( 0x5 ), /* 5 */ +/* 4782 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4784 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4786 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4788 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4790 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4792 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4794 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4796 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4798 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter version_string */ + +/* 4800 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4802 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4804 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Return value */ + +/* 4806 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4808 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4810 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnDownloading */ + +/* 4812 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4814 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4818 */ NdrFcShort( 0x7 ), /* 7 */ +/* 4820 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4822 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4824 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4826 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 4828 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4830 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4832 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4834 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4836 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter time_remaining_ms */ + +/* 4838 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4840 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4842 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter pos */ + +/* 4844 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4846 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4848 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4850 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4852 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4854 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnWaitingToInstall */ + +/* 4856 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4858 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4862 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4864 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4866 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4868 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4870 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4872 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4874 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4876 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4878 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4880 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 4882 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4884 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4886 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnPause */ + +/* 4888 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4890 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4894 */ NdrFcShort( 0xa ), /* 10 */ +/* 4896 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4898 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4900 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4902 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 4904 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4906 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4908 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4910 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4912 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 4914 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4916 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4918 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure OnComplete */ + +/* 4920 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4922 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4926 */ NdrFcShort( 0xb ), /* 11 */ +/* 4928 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4930 */ NdrFcShort( 0x6 ), /* 6 */ +/* 4932 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4934 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4936 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4938 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4940 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4942 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4944 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter code */ + +/* 4946 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4948 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4950 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter completion_text */ + +/* 4952 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 4954 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4956 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Return value */ + +/* 4958 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4960 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4962 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure SetEventSink */ + +/* 4964 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4966 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4970 */ NdrFcShort( 0xc ), /* 12 */ +/* 4972 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4974 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4976 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4978 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4980 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4982 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4984 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4986 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4988 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter ui_sink */ + +/* 4990 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */ +/* 4992 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4994 */ NdrFcShort( 0x438 ), /* Type Offset=1080 */ + + /* Return value */ + +/* 4996 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4998 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5000 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure CheckForUpdate */ + +/* 5002 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5004 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5008 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5010 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5012 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5014 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5016 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 5018 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5020 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5022 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5024 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5026 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter guid */ + +/* 5028 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 5030 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5032 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Parameter observer */ + +/* 5034 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */ +/* 5036 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5038 */ NdrFcShort( 0x44a ), /* Type Offset=1098 */ + + /* Return value */ + +/* 5040 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5042 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5044 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure Update */ + +/* 5046 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5048 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5052 */ NdrFcShort( 0x4 ), /* 4 */ +/* 5054 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5056 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5058 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5060 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 5062 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5066 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5068 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5070 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter guid */ + +/* 5072 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 5074 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5076 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Parameter observer */ + +/* 5078 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */ +/* 5080 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5082 */ NdrFcShort( 0x44a ), /* Type Offset=1098 */ + + /* Return value */ + +/* 5084 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5086 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5088 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure LaunchCmdElevated */ + +/* 5090 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5092 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5096 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5098 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 5100 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5102 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5104 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 5106 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5108 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5110 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5112 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5114 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter app_guid */ + +/* 5116 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 5118 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5120 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Parameter cmd_id */ + +/* 5122 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 5124 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5126 */ NdrFcShort( 0x432 ), /* Type Offset=1074 */ + + /* Parameter caller_proc_id */ + +/* 5128 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5130 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5132 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter proc_handle */ + +/* 5134 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5136 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5138 */ 0xb9, /* FC_UINT3264 */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5142 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 5144 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const google_update_idl_MIDL_TYPE_FORMAT_STRING google_update_idl__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 4 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 6 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */ +/* 10 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 12 */ NdrFcLong( 0x20400 ), /* 132096 */ +/* 16 */ NdrFcShort( 0x0 ), /* 0 */ +/* 18 */ NdrFcShort( 0x0 ), /* 0 */ +/* 20 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 22 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 24 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 26 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 28 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 30 */ NdrFcShort( 0x1c ), /* Offset= 28 (58) */ +/* 32 */ + 0x13, 0x0, /* FC_OP */ +/* 34 */ NdrFcShort( 0xe ), /* Offset= 14 (48) */ +/* 36 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 38 */ NdrFcShort( 0x2 ), /* 2 */ +/* 40 */ 0x9, /* Corr desc: FC_ULONG */ + 0x0, /* */ +/* 42 */ NdrFcShort( 0xfffc ), /* -4 */ +/* 44 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 46 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 48 */ + 0x17, /* FC_CSTRUCT */ + 0x3, /* 3 */ +/* 50 */ NdrFcShort( 0x8 ), /* 8 */ +/* 52 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (36) */ +/* 54 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 56 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 58 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 60 */ NdrFcShort( 0x0 ), /* 0 */ +/* 62 */ NdrFcShort( 0x8 ), /* 8 */ +/* 64 */ NdrFcShort( 0x0 ), /* 0 */ +/* 66 */ NdrFcShort( 0xffde ), /* Offset= -34 (32) */ +/* 68 */ + 0x12, 0x0, /* FC_UP */ +/* 70 */ NdrFcShort( 0xffea ), /* Offset= -22 (48) */ +/* 72 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 74 */ NdrFcShort( 0x0 ), /* 0 */ +/* 76 */ NdrFcShort( 0x8 ), /* 8 */ +/* 78 */ NdrFcShort( 0x0 ), /* 0 */ +/* 80 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (68) */ +/* 82 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 84 */ 0x6, /* FC_SHORT */ + 0x5c, /* FC_PAD */ +/* 86 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 88 */ NdrFcShort( 0x3a2 ), /* Offset= 930 (1018) */ +/* 90 */ + 0x13, 0x0, /* FC_OP */ +/* 92 */ NdrFcShort( 0x38a ), /* Offset= 906 (998) */ +/* 94 */ + 0x2b, /* FC_NON_ENCAPSULATED_UNION */ + 0x9, /* FC_ULONG */ +/* 96 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 98 */ NdrFcShort( 0xfff8 ), /* -8 */ +/* 100 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 102 */ NdrFcShort( 0x2 ), /* Offset= 2 (104) */ +/* 104 */ NdrFcShort( 0x10 ), /* 16 */ +/* 106 */ NdrFcShort( 0x2f ), /* 47 */ +/* 108 */ NdrFcLong( 0x14 ), /* 20 */ +/* 112 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */ +/* 114 */ NdrFcLong( 0x3 ), /* 3 */ +/* 118 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 120 */ NdrFcLong( 0x11 ), /* 17 */ +/* 124 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */ +/* 126 */ NdrFcLong( 0x2 ), /* 2 */ +/* 130 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 132 */ NdrFcLong( 0x4 ), /* 4 */ +/* 136 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */ +/* 138 */ NdrFcLong( 0x5 ), /* 5 */ +/* 142 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 144 */ NdrFcLong( 0xb ), /* 11 */ +/* 148 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 150 */ NdrFcLong( 0xa ), /* 10 */ +/* 154 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 156 */ NdrFcLong( 0x6 ), /* 6 */ +/* 160 */ NdrFcShort( 0xe8 ), /* Offset= 232 (392) */ +/* 162 */ NdrFcLong( 0x7 ), /* 7 */ +/* 166 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 168 */ NdrFcLong( 0x8 ), /* 8 */ +/* 172 */ NdrFcShort( 0xff74 ), /* Offset= -140 (32) */ +/* 174 */ NdrFcLong( 0xd ), /* 13 */ +/* 178 */ NdrFcShort( 0xdc ), /* Offset= 220 (398) */ +/* 180 */ NdrFcLong( 0x9 ), /* 9 */ +/* 184 */ NdrFcShort( 0xff52 ), /* Offset= -174 (10) */ +/* 186 */ NdrFcLong( 0x2000 ), /* 8192 */ +/* 190 */ NdrFcShort( 0xe2 ), /* Offset= 226 (416) */ +/* 192 */ NdrFcLong( 0x24 ), /* 36 */ +/* 196 */ NdrFcShort( 0x2d8 ), /* Offset= 728 (924) */ +/* 198 */ NdrFcLong( 0x4024 ), /* 16420 */ +/* 202 */ NdrFcShort( 0x2d2 ), /* Offset= 722 (924) */ +/* 204 */ NdrFcLong( 0x4011 ), /* 16401 */ +/* 208 */ NdrFcShort( 0x2d0 ), /* Offset= 720 (928) */ +/* 210 */ NdrFcLong( 0x4002 ), /* 16386 */ +/* 214 */ NdrFcShort( 0x2ce ), /* Offset= 718 (932) */ +/* 216 */ NdrFcLong( 0x4003 ), /* 16387 */ +/* 220 */ NdrFcShort( 0x2cc ), /* Offset= 716 (936) */ +/* 222 */ NdrFcLong( 0x4014 ), /* 16404 */ +/* 226 */ NdrFcShort( 0x2ca ), /* Offset= 714 (940) */ +/* 228 */ NdrFcLong( 0x4004 ), /* 16388 */ +/* 232 */ NdrFcShort( 0x2c8 ), /* Offset= 712 (944) */ +/* 234 */ NdrFcLong( 0x4005 ), /* 16389 */ +/* 238 */ NdrFcShort( 0x2c6 ), /* Offset= 710 (948) */ +/* 240 */ NdrFcLong( 0x400b ), /* 16395 */ +/* 244 */ NdrFcShort( 0x2b0 ), /* Offset= 688 (932) */ +/* 246 */ NdrFcLong( 0x400a ), /* 16394 */ +/* 250 */ NdrFcShort( 0x2ae ), /* Offset= 686 (936) */ +/* 252 */ NdrFcLong( 0x4006 ), /* 16390 */ +/* 256 */ NdrFcShort( 0x2b8 ), /* Offset= 696 (952) */ +/* 258 */ NdrFcLong( 0x4007 ), /* 16391 */ +/* 262 */ NdrFcShort( 0x2ae ), /* Offset= 686 (948) */ +/* 264 */ NdrFcLong( 0x4008 ), /* 16392 */ +/* 268 */ NdrFcShort( 0x2b0 ), /* Offset= 688 (956) */ +/* 270 */ NdrFcLong( 0x400d ), /* 16397 */ +/* 274 */ NdrFcShort( 0x2ae ), /* Offset= 686 (960) */ +/* 276 */ NdrFcLong( 0x4009 ), /* 16393 */ +/* 280 */ NdrFcShort( 0x2ac ), /* Offset= 684 (964) */ +/* 282 */ NdrFcLong( 0x6000 ), /* 24576 */ +/* 286 */ NdrFcShort( 0x2aa ), /* Offset= 682 (968) */ +/* 288 */ NdrFcLong( 0x400c ), /* 16396 */ +/* 292 */ NdrFcShort( 0x2a8 ), /* Offset= 680 (972) */ +/* 294 */ NdrFcLong( 0x10 ), /* 16 */ +/* 298 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */ +/* 300 */ NdrFcLong( 0x12 ), /* 18 */ +/* 304 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 306 */ NdrFcLong( 0x13 ), /* 19 */ +/* 310 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 312 */ NdrFcLong( 0x15 ), /* 21 */ +/* 316 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */ +/* 318 */ NdrFcLong( 0x16 ), /* 22 */ +/* 322 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 324 */ NdrFcLong( 0x17 ), /* 23 */ +/* 328 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 330 */ NdrFcLong( 0xe ), /* 14 */ +/* 334 */ NdrFcShort( 0x286 ), /* Offset= 646 (980) */ +/* 336 */ NdrFcLong( 0x400e ), /* 16398 */ +/* 340 */ NdrFcShort( 0x28a ), /* Offset= 650 (990) */ +/* 342 */ NdrFcLong( 0x4010 ), /* 16400 */ +/* 346 */ NdrFcShort( 0x288 ), /* Offset= 648 (994) */ +/* 348 */ NdrFcLong( 0x4012 ), /* 16402 */ +/* 352 */ NdrFcShort( 0x244 ), /* Offset= 580 (932) */ +/* 354 */ NdrFcLong( 0x4013 ), /* 16403 */ +/* 358 */ NdrFcShort( 0x242 ), /* Offset= 578 (936) */ +/* 360 */ NdrFcLong( 0x4015 ), /* 16405 */ +/* 364 */ NdrFcShort( 0x240 ), /* Offset= 576 (940) */ +/* 366 */ NdrFcLong( 0x4016 ), /* 16406 */ +/* 370 */ NdrFcShort( 0x236 ), /* Offset= 566 (936) */ +/* 372 */ NdrFcLong( 0x4017 ), /* 16407 */ +/* 376 */ NdrFcShort( 0x230 ), /* Offset= 560 (936) */ +/* 378 */ NdrFcLong( 0x0 ), /* 0 */ +/* 382 */ NdrFcShort( 0x0 ), /* Offset= 0 (382) */ +/* 384 */ NdrFcLong( 0x1 ), /* 1 */ +/* 388 */ NdrFcShort( 0x0 ), /* Offset= 0 (388) */ +/* 390 */ NdrFcShort( 0xffff ), /* Offset= -1 (389) */ +/* 392 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 394 */ NdrFcShort( 0x8 ), /* 8 */ +/* 396 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 398 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 400 */ NdrFcLong( 0x0 ), /* 0 */ +/* 404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 406 */ NdrFcShort( 0x0 ), /* 0 */ +/* 408 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 410 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 412 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 414 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 416 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 418 */ NdrFcShort( 0x2 ), /* Offset= 2 (420) */ +/* 420 */ + 0x13, 0x0, /* FC_OP */ +/* 422 */ NdrFcShort( 0x1e4 ), /* Offset= 484 (906) */ +/* 424 */ + 0x2a, /* FC_ENCAPSULATED_UNION */ + 0x89, /* 137 */ +/* 426 */ NdrFcShort( 0x20 ), /* 32 */ +/* 428 */ NdrFcShort( 0xa ), /* 10 */ +/* 430 */ NdrFcLong( 0x8 ), /* 8 */ +/* 434 */ NdrFcShort( 0x50 ), /* Offset= 80 (514) */ +/* 436 */ NdrFcLong( 0xd ), /* 13 */ +/* 440 */ NdrFcShort( 0x70 ), /* Offset= 112 (552) */ +/* 442 */ NdrFcLong( 0x9 ), /* 9 */ +/* 446 */ NdrFcShort( 0x90 ), /* Offset= 144 (590) */ +/* 448 */ NdrFcLong( 0xc ), /* 12 */ +/* 452 */ NdrFcShort( 0xb0 ), /* Offset= 176 (628) */ +/* 454 */ NdrFcLong( 0x24 ), /* 36 */ +/* 458 */ NdrFcShort( 0x102 ), /* Offset= 258 (716) */ +/* 460 */ NdrFcLong( 0x800d ), /* 32781 */ +/* 464 */ NdrFcShort( 0x11e ), /* Offset= 286 (750) */ +/* 466 */ NdrFcLong( 0x10 ), /* 16 */ +/* 470 */ NdrFcShort( 0x138 ), /* Offset= 312 (782) */ +/* 472 */ NdrFcLong( 0x2 ), /* 2 */ +/* 476 */ NdrFcShort( 0x14e ), /* Offset= 334 (810) */ +/* 478 */ NdrFcLong( 0x3 ), /* 3 */ +/* 482 */ NdrFcShort( 0x164 ), /* Offset= 356 (838) */ +/* 484 */ NdrFcLong( 0x14 ), /* 20 */ +/* 488 */ NdrFcShort( 0x17a ), /* Offset= 378 (866) */ +/* 490 */ NdrFcShort( 0xffff ), /* Offset= -1 (489) */ +/* 492 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 494 */ NdrFcShort( 0x0 ), /* 0 */ +/* 496 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 498 */ NdrFcShort( 0x0 ), /* 0 */ +/* 500 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 502 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 506 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 508 */ + 0x13, 0x0, /* FC_OP */ +/* 510 */ NdrFcShort( 0xfe32 ), /* Offset= -462 (48) */ +/* 512 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 514 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 516 */ NdrFcShort( 0x10 ), /* 16 */ +/* 518 */ NdrFcShort( 0x0 ), /* 0 */ +/* 520 */ NdrFcShort( 0x6 ), /* Offset= 6 (526) */ +/* 522 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 524 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 526 */ + 0x11, 0x0, /* FC_RP */ +/* 528 */ NdrFcShort( 0xffdc ), /* Offset= -36 (492) */ +/* 530 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 532 */ NdrFcShort( 0x0 ), /* 0 */ +/* 534 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 536 */ NdrFcShort( 0x0 ), /* 0 */ +/* 538 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 540 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 544 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 546 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 548 */ NdrFcShort( 0xff6a ), /* Offset= -150 (398) */ +/* 550 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 552 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 554 */ NdrFcShort( 0x10 ), /* 16 */ +/* 556 */ NdrFcShort( 0x0 ), /* 0 */ +/* 558 */ NdrFcShort( 0x6 ), /* Offset= 6 (564) */ +/* 560 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 562 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 564 */ + 0x11, 0x0, /* FC_RP */ +/* 566 */ NdrFcShort( 0xffdc ), /* Offset= -36 (530) */ +/* 568 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 570 */ NdrFcShort( 0x0 ), /* 0 */ +/* 572 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 574 */ NdrFcShort( 0x0 ), /* 0 */ +/* 576 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 578 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 582 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 584 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 586 */ NdrFcShort( 0xfdc0 ), /* Offset= -576 (10) */ +/* 588 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 590 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 592 */ NdrFcShort( 0x10 ), /* 16 */ +/* 594 */ NdrFcShort( 0x0 ), /* 0 */ +/* 596 */ NdrFcShort( 0x6 ), /* Offset= 6 (602) */ +/* 598 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 600 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 602 */ + 0x11, 0x0, /* FC_RP */ +/* 604 */ NdrFcShort( 0xffdc ), /* Offset= -36 (568) */ +/* 606 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 608 */ NdrFcShort( 0x0 ), /* 0 */ +/* 610 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 612 */ NdrFcShort( 0x0 ), /* 0 */ +/* 614 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 616 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 620 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 622 */ + 0x13, 0x0, /* FC_OP */ +/* 624 */ NdrFcShort( 0x176 ), /* Offset= 374 (998) */ +/* 626 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 628 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 630 */ NdrFcShort( 0x10 ), /* 16 */ +/* 632 */ NdrFcShort( 0x0 ), /* 0 */ +/* 634 */ NdrFcShort( 0x6 ), /* Offset= 6 (640) */ +/* 636 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 638 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 640 */ + 0x11, 0x0, /* FC_RP */ +/* 642 */ NdrFcShort( 0xffdc ), /* Offset= -36 (606) */ +/* 644 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 646 */ NdrFcLong( 0x2f ), /* 47 */ +/* 650 */ NdrFcShort( 0x0 ), /* 0 */ +/* 652 */ NdrFcShort( 0x0 ), /* 0 */ +/* 654 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 656 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 658 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 660 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 662 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 664 */ NdrFcShort( 0x1 ), /* 1 */ +/* 666 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 668 */ NdrFcShort( 0x4 ), /* 4 */ +/* 670 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 672 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 674 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 676 */ NdrFcShort( 0x18 ), /* 24 */ +/* 678 */ NdrFcShort( 0x0 ), /* 0 */ +/* 680 */ NdrFcShort( 0xa ), /* Offset= 10 (690) */ +/* 682 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 684 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 686 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (644) */ +/* 688 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 690 */ + 0x13, 0x0, /* FC_OP */ +/* 692 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (662) */ +/* 694 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 696 */ NdrFcShort( 0x0 ), /* 0 */ +/* 698 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 700 */ NdrFcShort( 0x0 ), /* 0 */ +/* 702 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 704 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 708 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 710 */ + 0x13, 0x0, /* FC_OP */ +/* 712 */ NdrFcShort( 0xffda ), /* Offset= -38 (674) */ +/* 714 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 716 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 718 */ NdrFcShort( 0x10 ), /* 16 */ +/* 720 */ NdrFcShort( 0x0 ), /* 0 */ +/* 722 */ NdrFcShort( 0x6 ), /* Offset= 6 (728) */ +/* 724 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 726 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 728 */ + 0x11, 0x0, /* FC_RP */ +/* 730 */ NdrFcShort( 0xffdc ), /* Offset= -36 (694) */ +/* 732 */ + 0x1d, /* FC_SMFARRAY */ + 0x0, /* 0 */ +/* 734 */ NdrFcShort( 0x8 ), /* 8 */ +/* 736 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 738 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 740 */ NdrFcShort( 0x10 ), /* 16 */ +/* 742 */ 0x8, /* FC_LONG */ + 0x6, /* FC_SHORT */ +/* 744 */ 0x6, /* FC_SHORT */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 746 */ 0x0, /* 0 */ + NdrFcShort( 0xfff1 ), /* Offset= -15 (732) */ + 0x5b, /* FC_END */ +/* 750 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 752 */ NdrFcShort( 0x20 ), /* 32 */ +/* 754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 756 */ NdrFcShort( 0xa ), /* Offset= 10 (766) */ +/* 758 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 760 */ 0x36, /* FC_POINTER */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 762 */ 0x0, /* 0 */ + NdrFcShort( 0xffe7 ), /* Offset= -25 (738) */ + 0x5b, /* FC_END */ +/* 766 */ + 0x11, 0x0, /* FC_RP */ +/* 768 */ NdrFcShort( 0xff12 ), /* Offset= -238 (530) */ +/* 770 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 772 */ NdrFcShort( 0x1 ), /* 1 */ +/* 774 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 776 */ NdrFcShort( 0x0 ), /* 0 */ +/* 778 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 780 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 782 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 784 */ NdrFcShort( 0x10 ), /* 16 */ +/* 786 */ NdrFcShort( 0x0 ), /* 0 */ +/* 788 */ NdrFcShort( 0x6 ), /* Offset= 6 (794) */ +/* 790 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 792 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 794 */ + 0x13, 0x0, /* FC_OP */ +/* 796 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (770) */ +/* 798 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 800 */ NdrFcShort( 0x2 ), /* 2 */ +/* 802 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 804 */ NdrFcShort( 0x0 ), /* 0 */ +/* 806 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 808 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 810 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 812 */ NdrFcShort( 0x10 ), /* 16 */ +/* 814 */ NdrFcShort( 0x0 ), /* 0 */ +/* 816 */ NdrFcShort( 0x6 ), /* Offset= 6 (822) */ +/* 818 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 820 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 822 */ + 0x13, 0x0, /* FC_OP */ +/* 824 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (798) */ +/* 826 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 828 */ NdrFcShort( 0x4 ), /* 4 */ +/* 830 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 832 */ NdrFcShort( 0x0 ), /* 0 */ +/* 834 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 836 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 838 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 840 */ NdrFcShort( 0x10 ), /* 16 */ +/* 842 */ NdrFcShort( 0x0 ), /* 0 */ +/* 844 */ NdrFcShort( 0x6 ), /* Offset= 6 (850) */ +/* 846 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 848 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 850 */ + 0x13, 0x0, /* FC_OP */ +/* 852 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (826) */ +/* 854 */ + 0x1b, /* FC_CARRAY */ + 0x7, /* 7 */ +/* 856 */ NdrFcShort( 0x8 ), /* 8 */ +/* 858 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 860 */ NdrFcShort( 0x0 ), /* 0 */ +/* 862 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 864 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 866 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 868 */ NdrFcShort( 0x10 ), /* 16 */ +/* 870 */ NdrFcShort( 0x0 ), /* 0 */ +/* 872 */ NdrFcShort( 0x6 ), /* Offset= 6 (878) */ +/* 874 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 876 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 878 */ + 0x13, 0x0, /* FC_OP */ +/* 880 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (854) */ +/* 882 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 884 */ NdrFcShort( 0x8 ), /* 8 */ +/* 886 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 888 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 890 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 892 */ NdrFcShort( 0x8 ), /* 8 */ +/* 894 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 896 */ NdrFcShort( 0xffc8 ), /* -56 */ +/* 898 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 900 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 902 */ NdrFcShort( 0xffec ), /* Offset= -20 (882) */ +/* 904 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 906 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 908 */ NdrFcShort( 0x38 ), /* 56 */ +/* 910 */ NdrFcShort( 0xffec ), /* Offset= -20 (890) */ +/* 912 */ NdrFcShort( 0x0 ), /* Offset= 0 (912) */ +/* 914 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 916 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 918 */ 0x40, /* FC_STRUCTPAD4 */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 920 */ 0x0, /* 0 */ + NdrFcShort( 0xfe0f ), /* Offset= -497 (424) */ + 0x5b, /* FC_END */ +/* 924 */ + 0x13, 0x0, /* FC_OP */ +/* 926 */ NdrFcShort( 0xff04 ), /* Offset= -252 (674) */ +/* 928 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 930 */ 0x1, /* FC_BYTE */ + 0x5c, /* FC_PAD */ +/* 932 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 934 */ 0x6, /* FC_SHORT */ + 0x5c, /* FC_PAD */ +/* 936 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 938 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 940 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 942 */ 0xb, /* FC_HYPER */ + 0x5c, /* FC_PAD */ +/* 944 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 946 */ 0xa, /* FC_FLOAT */ + 0x5c, /* FC_PAD */ +/* 948 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 950 */ 0xc, /* FC_DOUBLE */ + 0x5c, /* FC_PAD */ +/* 952 */ + 0x13, 0x0, /* FC_OP */ +/* 954 */ NdrFcShort( 0xfdce ), /* Offset= -562 (392) */ +/* 956 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 958 */ NdrFcShort( 0xfc62 ), /* Offset= -926 (32) */ +/* 960 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 962 */ NdrFcShort( 0xfdcc ), /* Offset= -564 (398) */ +/* 964 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 966 */ NdrFcShort( 0xfc44 ), /* Offset= -956 (10) */ +/* 968 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 970 */ NdrFcShort( 0xfdd6 ), /* Offset= -554 (416) */ +/* 972 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 974 */ NdrFcShort( 0x2 ), /* Offset= 2 (976) */ +/* 976 */ + 0x13, 0x0, /* FC_OP */ +/* 978 */ NdrFcShort( 0x14 ), /* Offset= 20 (998) */ +/* 980 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 982 */ NdrFcShort( 0x10 ), /* 16 */ +/* 984 */ 0x6, /* FC_SHORT */ + 0x1, /* FC_BYTE */ +/* 986 */ 0x1, /* FC_BYTE */ + 0x8, /* FC_LONG */ +/* 988 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 990 */ + 0x13, 0x0, /* FC_OP */ +/* 992 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (980) */ +/* 994 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 996 */ 0x2, /* FC_CHAR */ + 0x5c, /* FC_PAD */ +/* 998 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x7, /* 7 */ +/* 1000 */ NdrFcShort( 0x20 ), /* 32 */ +/* 1002 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1004 */ NdrFcShort( 0x0 ), /* Offset= 0 (1004) */ +/* 1006 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1008 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1010 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1012 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1014 */ NdrFcShort( 0xfc68 ), /* Offset= -920 (94) */ +/* 1016 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1018 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 1020 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1022 */ NdrFcShort( 0x18 ), /* 24 */ +/* 1024 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1026 */ NdrFcShort( 0xfc58 ), /* Offset= -936 (90) */ +/* 1028 */ + 0x11, 0x0, /* FC_RP */ +/* 1030 */ NdrFcShort( 0x6 ), /* Offset= 6 (1036) */ +/* 1032 */ + 0x12, 0x0, /* FC_UP */ +/* 1034 */ NdrFcShort( 0xffdc ), /* Offset= -36 (998) */ +/* 1036 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 1038 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1040 */ NdrFcShort( 0x18 ), /* 24 */ +/* 1042 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1044 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1032) */ +/* 1046 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 1048 */ 0xb, /* FC_HYPER */ + 0x5c, /* FC_PAD */ +/* 1050 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 1052 */ NdrFcShort( 0x2 ), /* Offset= 2 (1054) */ +/* 1054 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1056 */ NdrFcLong( 0x2e629606 ), /* 778212870 */ +/* 1060 */ NdrFcShort( 0x312a ), /* 12586 */ +/* 1062 */ NdrFcShort( 0x482f ), /* 18479 */ +/* 1064 */ 0x9b, /* 155 */ + 0x12, /* 18 */ +/* 1066 */ 0x2c, /* 44 */ + 0x4a, /* 74 */ +/* 1068 */ 0xbf, /* 191 */ + 0x6f, /* 111 */ +/* 1070 */ 0xb, /* 11 */ + 0x6d, /* 109 */ +/* 1072 */ + 0x11, 0x8, /* FC_RP [simple_pointer] */ +/* 1074 */ + 0x25, /* FC_C_WSTRING */ + 0x5c, /* FC_PAD */ +/* 1076 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 1078 */ 0xb9, /* FC_UINT3264 */ + 0x5c, /* FC_PAD */ +/* 1080 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1082 */ NdrFcLong( 0x1c642ced ), /* 476327149 */ +/* 1086 */ NdrFcShort( 0xca3b ), /* -13765 */ +/* 1088 */ NdrFcShort( 0x4013 ), /* 16403 */ +/* 1090 */ 0xa9, /* 169 */ + 0xdf, /* 223 */ +/* 1092 */ 0xca, /* 202 */ + 0x6c, /* 108 */ +/* 1094 */ 0xe5, /* 229 */ + 0xff, /* 255 */ +/* 1096 */ 0x65, /* 101 */ + 0x3, /* 3 */ +/* 1098 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1100 */ NdrFcLong( 0x49d7563b ), /* 1238849083 */ +/* 1104 */ NdrFcShort( 0x2ddb ), /* 11739 */ +/* 1106 */ NdrFcShort( 0x4831 ), /* 18481 */ +/* 1108 */ 0x88, /* 136 */ + 0xc8, /* 200 */ +/* 1110 */ 0x76, /* 118 */ + 0x8a, /* 138 */ +/* 1112 */ 0x53, /* 83 */ + 0x83, /* 131 */ +/* 1114 */ 0x38, /* 56 */ + 0x37, /* 55 */ + + 0x0 + } + }; + +static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] = + { + + { + BSTR_UserSize + ,BSTR_UserMarshal + ,BSTR_UserUnmarshal + ,BSTR_UserFree + }, + { + VARIANT_UserSize + ,VARIANT_UserMarshal + ,VARIANT_UserUnmarshal + ,VARIANT_UserFree + } + + }; + + + +/* Standard interface: __MIDL_itf_google_update_idl_0000_0000, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IUnknown, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IDispatch, ver. 0.0, + GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IGoogleUpdate3, ver. 0.0, + GUID={0x6DB17455,0x4E85,0x46e7,{0x9D,0x23,0xE5,0x55,0xE4,0xB0,0x05,0xAF}} */ + +#pragma code_seg(".orpc") +static const unsigned short IGoogleUpdate3_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 0, + 38, + 82 + }; + +static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate3_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IGoogleUpdate3_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate3_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(10) _IGoogleUpdate3ProxyVtbl = +{ + &IGoogleUpdate3_ProxyInfo, + &IID_IGoogleUpdate3, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IGoogleUpdate3::get_Count */ , + (void *) (INT_PTR) -1 /* IGoogleUpdate3::get_Item */ , + (void *) (INT_PTR) -1 /* IGoogleUpdate3::createAppBundle */ +}; + + +static const PRPC_STUB_FUNCTION IGoogleUpdate3_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IGoogleUpdate3StubVtbl = +{ + &IID_IGoogleUpdate3, + &IGoogleUpdate3_ServerInfo, + 10, + &IGoogleUpdate3_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IAppBundle, ver. 0.0, + GUID={0xfe908cdd,0x22bb,0x472a,{0x98,0x70,0x1a,0x03,0x90,0xe4,0x2f,0x36}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAppBundle_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 120, + 158, + 196, + 234, + 272, + 310, + 348, + 386, + 424, + 462, + 500, + 538, + 576, + 614, + 652, + 690, + 728, + 766, + 810, + 860, + 898, + 930, + 974, + 1018, + 1050, + 1082, + 1114, + 1146, + 1178, + 1210, + 1242, + 1274, + 1312, + 1356 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAppBundle_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppBundle_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAppBundle_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppBundle_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(41) _IAppBundleProxyVtbl = +{ + &IAppBundle_ProxyInfo, + &IID_IAppBundle, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_displayName */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_displayName */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_displayLanguage */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_displayLanguage */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_installSource */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_installSource */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_originURL */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_originURL */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_offlineDirectory */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_offlineDirectory */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_sessionId */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_sessionId */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_sendPings */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_sendPings */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_priority */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_priority */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_Count */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_Item */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_altTokens */ , + (void *) (INT_PTR) -1 /* IAppBundle::put_parentHWND */ , + (void *) (INT_PTR) -1 /* IAppBundle::initialize */ , + (void *) (INT_PTR) -1 /* IAppBundle::createApp */ , + (void *) (INT_PTR) -1 /* IAppBundle::createInstalledApp */ , + (void *) (INT_PTR) -1 /* IAppBundle::createAllInstalledApps */ , + (void *) (INT_PTR) -1 /* IAppBundle::checkForUpdate */ , + (void *) (INT_PTR) -1 /* IAppBundle::download */ , + (void *) (INT_PTR) -1 /* IAppBundle::install */ , + (void *) (INT_PTR) -1 /* IAppBundle::updateAllApps */ , + (void *) (INT_PTR) -1 /* IAppBundle::stop */ , + (void *) (INT_PTR) -1 /* IAppBundle::pause */ , + (void *) (INT_PTR) -1 /* IAppBundle::resume */ , + (void *) (INT_PTR) -1 /* IAppBundle::isBusy */ , + (void *) (INT_PTR) -1 /* IAppBundle::downloadPackage */ , + (void *) (INT_PTR) -1 /* IAppBundle::get_currentState */ +}; + + +static const PRPC_STUB_FUNCTION IAppBundle_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppBundleStubVtbl = +{ + &IID_IAppBundle, + &IAppBundle_ServerInfo, + 41, + &IAppBundle_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IApp, ver. 0.0, + GUID={0x76F7B787,0xA67C,0x4c73,{0x82,0xC7,0x31,0xF5,0xE3,0xAA,0xBC,0x5C}} */ + +#pragma code_seg(".orpc") +static const unsigned short IApp_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 1394, + 1432, + 196, + 1470, + 1508, + 1546, + 1584, + 1622, + 1660, + 1698, + 1736, + 1774, + 1812, + 1850, + 1888, + 1926, + 1964, + 2002, + 2040, + 2078, + 2116, + 930, + 2154, + 2192, + 2230, + 2268, + 2306, + 2344, + 2382, + 2420, + 2458, + 2496, + 2534, + 2572 + }; + +static const MIDL_STUBLESS_PROXY_INFO IApp_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IApp_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IApp_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IApp_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(41) _IAppProxyVtbl = +{ + &IApp_ProxyInfo, + &IID_IApp, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IApp::get_currentVersion */ , + (void *) (INT_PTR) -1 /* IApp::get_nextVersion */ , + (void *) (INT_PTR) -1 /* IApp::get_appId */ , + (void *) (INT_PTR) -1 /* IApp::get_displayName */ , + (void *) (INT_PTR) -1 /* IApp::put_displayName */ , + (void *) (INT_PTR) -1 /* IApp::get_language */ , + (void *) (INT_PTR) -1 /* IApp::put_language */ , + (void *) (INT_PTR) -1 /* IApp::get_ap */ , + (void *) (INT_PTR) -1 /* IApp::put_ap */ , + (void *) (INT_PTR) -1 /* IApp::get_ttToken */ , + (void *) (INT_PTR) -1 /* IApp::put_ttToken */ , + (void *) (INT_PTR) -1 /* IApp::get_iid */ , + (void *) (INT_PTR) -1 /* IApp::put_iid */ , + (void *) (INT_PTR) -1 /* IApp::get_brandCode */ , + (void *) (INT_PTR) -1 /* IApp::put_brandCode */ , + (void *) (INT_PTR) -1 /* IApp::get_clientId */ , + (void *) (INT_PTR) -1 /* IApp::put_clientId */ , + (void *) (INT_PTR) -1 /* IApp::get_labels */ , + (void *) (INT_PTR) -1 /* IApp::put_labels */ , + (void *) (INT_PTR) -1 /* IApp::get_referralId */ , + (void *) (INT_PTR) -1 /* IApp::put_referralId */ , + (void *) (INT_PTR) -1 /* IApp::get_command */ , + (void *) (INT_PTR) -1 /* IApp::get_browserType */ , + (void *) (INT_PTR) -1 /* IApp::put_browserType */ , + (void *) (INT_PTR) -1 /* IApp::get_clientInstallData */ , + (void *) (INT_PTR) -1 /* IApp::put_clientInstallData */ , + (void *) (INT_PTR) -1 /* IApp::get_serverInstallDataIndex */ , + (void *) (INT_PTR) -1 /* IApp::put_serverInstallDataIndex */ , + (void *) (INT_PTR) -1 /* IApp::get_isEulaAccepted */ , + (void *) (INT_PTR) -1 /* IApp::put_isEulaAccepted */ , + (void *) (INT_PTR) -1 /* IApp::get_usageStatsEnable */ , + (void *) (INT_PTR) -1 /* IApp::put_usageStatsEnable */ , + (void *) (INT_PTR) -1 /* IApp::get_installTimeDiffSec */ , + (void *) (INT_PTR) -1 /* IApp::get_currentState */ +}; + + +static const PRPC_STUB_FUNCTION IApp_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppStubVtbl = +{ + &IID_IApp, + &IApp_ServerInfo, + 41, + &IApp_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IAppCommand, ver. 0.0, + GUID={0x4DE778FE,0xF195,0x4ee3,{0x9D,0xAB,0xFE,0x44,0x6C,0x23,0x92,0x21}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAppCommand_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 2610, + 2648, + 2686, + 2724 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAppCommand_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppCommand_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAppCommand_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppCommand_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(11) _IAppCommandProxyVtbl = +{ + &IAppCommand_ProxyInfo, + &IID_IAppCommand, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IAppCommand::get_isWebAccessible */ , + (void *) (INT_PTR) -1 /* IAppCommand::get_status */ , + (void *) (INT_PTR) -1 /* IAppCommand::get_exitCode */ , + (void *) (INT_PTR) -1 /* IAppCommand::execute */ +}; + + +static const PRPC_STUB_FUNCTION IAppCommand_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppCommandStubVtbl = +{ + &IID_IAppCommand, + &IAppCommand_ServerInfo, + 11, + &IAppCommand_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IAppVersion, ver. 0.0, + GUID={0xBCDCB538,0x01C0,0x46d1,{0xA6,0xA7,0x52,0xF4,0xD0,0x21,0xC2,0x72}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAppVersion_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 120, + 2648, + 2810 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAppVersion_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppVersion_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAppVersion_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppVersion_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(10) _IAppVersionProxyVtbl = +{ + &IAppVersion_ProxyInfo, + &IID_IAppVersion, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IAppVersion::get_version */ , + (void *) (INT_PTR) -1 /* IAppVersion::get_packageCount */ , + (void *) (INT_PTR) -1 /* IAppVersion::get_package */ +}; + + +static const PRPC_STUB_FUNCTION IAppVersion_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppVersionStubVtbl = +{ + &IID_IAppVersion, + &IAppVersion_ServerInfo, + 10, + &IAppVersion_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IPackage, ver. 0.0, + GUID={0xDCAB8386,0x4F03,0x4dbd,{0xA3,0x66,0xD9,0x0B,0xC9,0xF6,0x8D,0xE6}} */ + +#pragma code_seg(".orpc") +static const unsigned short IPackage_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 2854, + 2892, + 196 + }; + +static const MIDL_STUBLESS_PROXY_INFO IPackage_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IPackage_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IPackage_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IPackage_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(10) _IPackageProxyVtbl = +{ + &IPackage_ProxyInfo, + &IID_IPackage, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IPackage::get */ , + (void *) (INT_PTR) -1 /* IPackage::get_isAvailable */ , + (void *) (INT_PTR) -1 /* IPackage::get_filename */ +}; + + +static const PRPC_STUB_FUNCTION IPackage_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IPackageStubVtbl = +{ + &IID_IPackage, + &IPackage_ServerInfo, + 10, + &IPackage_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: ICurrentState, ver. 0.0, + GUID={0x247954F9,0x9EDC,0x4E68,{0x8C,0xC3,0x15,0x0C,0x2B,0x89,0xEA,0xDF}} */ + +#pragma code_seg(".orpc") +static const unsigned short ICurrentState_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 0, + 2930, + 2686, + 2968, + 3006, + 3044, + 3082, + 3120, + 3158, + 3196, + 3234, + 1774, + 3272, + 3310, + 3348, + 1926, + 728 + }; + +static const MIDL_STUBLESS_PROXY_INFO ICurrentState_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &ICurrentState_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO ICurrentState_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &ICurrentState_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(24) _ICurrentStateProxyVtbl = +{ + &ICurrentState_ProxyInfo, + &IID_ICurrentState, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_stateValue */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_availableVersion */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_bytesDownloaded */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_totalBytesToDownload */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_downloadTimeRemainingMs */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_nextRetryTime */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_installProgress */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_installTimeRemainingMs */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_isCanceled */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_errorCode */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_extraCode1 */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_completionMessage */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_installerResultCode */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_installerResultExtraCode1 */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_postInstallLaunchCommandLine */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_postInstallUrl */ , + (void *) (INT_PTR) -1 /* ICurrentState::get_postInstallAction */ +}; + + +static const PRPC_STUB_FUNCTION ICurrentState_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _ICurrentStateStubVtbl = +{ + &IID_ICurrentState, + &ICurrentState_ServerInfo, + 24, + &ICurrentState_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IRegistrationUpdateHook, ver. 0.0, + GUID={0x4E223325,0xC16B,0x4eeb,{0xAE,0xDC,0x19,0xAA,0x99,0xA2,0x37,0xFA}} */ + +#pragma code_seg(".orpc") +static const unsigned short IRegistrationUpdateHook_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 3386 + }; + +static const MIDL_STUBLESS_PROXY_INFO IRegistrationUpdateHook_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IRegistrationUpdateHook_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IRegistrationUpdateHook_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IRegistrationUpdateHook_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(8) _IRegistrationUpdateHookProxyVtbl = +{ + &IRegistrationUpdateHook_ProxyInfo, + &IID_IRegistrationUpdateHook, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IRegistrationUpdateHook::UpdateRegistry */ +}; + + +static const PRPC_STUB_FUNCTION IRegistrationUpdateHook_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IRegistrationUpdateHookStubVtbl = +{ + &IID_IRegistrationUpdateHook, + &IRegistrationUpdateHook_ServerInfo, + 8, + &IRegistrationUpdateHook_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: ICredentialDialog, ver. 0.0, + GUID={0xb3a47570,0x0a85,0x4aea,{0x82,0x70,0x52,0x9d,0x47,0x89,0x96,0x03}} */ + +#pragma code_seg(".orpc") +static const unsigned short ICredentialDialog_FormatStringOffsetTable[] = + { + 3430 + }; + +static const MIDL_STUBLESS_PROXY_INFO ICredentialDialog_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &ICredentialDialog_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO ICredentialDialog_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &ICredentialDialog_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(4) _ICredentialDialogProxyVtbl = +{ + &ICredentialDialog_ProxyInfo, + &IID_ICredentialDialog, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* ICredentialDialog::QueryUserForCredentials */ +}; + +const CInterfaceStubVtbl _ICredentialDialogStubVtbl = +{ + &IID_ICredentialDialog, + &ICredentialDialog_ServerInfo, + 4, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IGoogleUpdate3Web, ver. 0.0, + GUID={0x494B20CF,0x282E,0x4BDD,{0x9F,0x5D,0xB7,0x0C,0xB0,0x9D,0x35,0x1E}} */ + +#pragma code_seg(".orpc") +static const unsigned short IGoogleUpdate3Web_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 1394 + }; + +static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3Web_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate3Web_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IGoogleUpdate3Web_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate3Web_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(8) _IGoogleUpdate3WebProxyVtbl = +{ + &IGoogleUpdate3Web_ProxyInfo, + &IID_IGoogleUpdate3Web, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IGoogleUpdate3Web::createAppBundleWeb */ +}; + + +static const PRPC_STUB_FUNCTION IGoogleUpdate3Web_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IGoogleUpdate3WebStubVtbl = +{ + &IID_IGoogleUpdate3Web, + &IGoogleUpdate3Web_ServerInfo, + 8, + &IGoogleUpdate3Web_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IGoogleUpdate3WebSecurity, ver. 0.0, + GUID={0x2D363682,0x561D,0x4c3a,{0x81,0xC6,0xF2,0xF8,0x21,0x07,0x56,0x2A}} */ + +#pragma code_seg(".orpc") +static const unsigned short IGoogleUpdate3WebSecurity_FormatStringOffsetTable[] = + { + 3492 + }; + +static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate3WebSecurity_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate3WebSecurity_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IGoogleUpdate3WebSecurity_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate3WebSecurity_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(4) _IGoogleUpdate3WebSecurityProxyVtbl = +{ + &IGoogleUpdate3WebSecurity_ProxyInfo, + &IID_IGoogleUpdate3WebSecurity, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IGoogleUpdate3WebSecurity::setOriginURL */ +}; + +const CInterfaceStubVtbl _IGoogleUpdate3WebSecurityStubVtbl = +{ + &IID_IGoogleUpdate3WebSecurity, + &IGoogleUpdate3WebSecurity_ServerInfo, + 4, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAppBundleWeb, ver. 0.0, + GUID={0xDD42475D,0x6D46,0x496a,{0x92,0x4E,0xBD,0x56,0x30,0xB4,0xCB,0xBA}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAppBundleWeb_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 3530, + 158, + 3586, + 1470, + 1508, + 3618, + 3082, + 3656, + 3700, + 3732, + 3764, + 3796, + 3828, + 3860, + 3892, + 3924, + 3968 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAppBundleWeb_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppBundleWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAppBundleWeb_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppBundleWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(24) _IAppBundleWebProxyVtbl = +{ + &IAppBundleWeb_ProxyInfo, + &IID_IAppBundleWeb, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::createApp */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::createInstalledApp */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::createAllInstalledApps */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::get_displayLanguage */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::put_displayLanguage */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::put_parentHWND */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::get_length */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::get_appWeb */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::initialize */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::checkForUpdate */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::download */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::install */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::pause */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::resume */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::cancel */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::downloadPackage */ , + (void *) (INT_PTR) -1 /* IAppBundleWeb::get_currentState */ +}; + + +static const PRPC_STUB_FUNCTION IAppBundleWeb_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppBundleWebStubVtbl = +{ + &IID_IAppBundleWeb, + &IAppBundleWeb_ServerInfo, + 24, + &IAppBundleWeb_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IAppWeb, ver. 0.0, + GUID={0x18D0F672,0x18B4,0x48e6,{0xAD,0x36,0x6E,0x6B,0xF0,0x1D,0xBB,0xC4}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAppWeb_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 120, + 1432, + 82, + 4006, + 4050, + 4082, + 4120, + 4152 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAppWeb_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAppWeb_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(15) _IAppWebProxyVtbl = +{ + &IAppWeb_ProxyInfo, + &IID_IAppWeb, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IAppWeb::get_appId */ , + (void *) (INT_PTR) -1 /* IAppWeb::get_currentVersionWeb */ , + (void *) (INT_PTR) -1 /* IAppWeb::get_nextVersionWeb */ , + (void *) (INT_PTR) -1 /* IAppWeb::get_command */ , + (void *) (INT_PTR) -1 /* IAppWeb::cancel */ , + (void *) (INT_PTR) -1 /* IAppWeb::get_currentState */ , + (void *) (INT_PTR) -1 /* IAppWeb::launch */ , + (void *) (INT_PTR) -1 /* IAppWeb::uninstall */ +}; + + +static const PRPC_STUB_FUNCTION IAppWeb_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppWebStubVtbl = +{ + &IID_IAppWeb, + &IAppWeb_ServerInfo, + 15, + &IAppWeb_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IAppCommandWeb, ver. 0.0, + GUID={0x68D6C2BD,0x712E,0x4c96,{0x93,0xE8,0x49,0xCB,0x8A,0x9A,0xAE,0xED}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAppCommandWeb_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 0, + 2648, + 4184 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAppCommandWeb_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppCommandWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAppCommandWeb_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppCommandWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(10) _IAppCommandWebProxyVtbl = +{ + &IAppCommandWeb_ProxyInfo, + &IID_IAppCommandWeb, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IAppCommandWeb::get_status */ , + (void *) (INT_PTR) -1 /* IAppCommandWeb::get_exitCode */ , + (void *) (INT_PTR) -1 /* IAppCommandWeb::execute */ +}; + + +static const PRPC_STUB_FUNCTION IAppCommandWeb_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppCommandWebStubVtbl = +{ + &IID_IAppCommandWeb, + &IAppCommandWeb_ServerInfo, + 10, + &IAppCommandWeb_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IAppVersionWeb, ver. 0.0, + GUID={0x0CD01D1E,0x4A1C,0x489d,{0x93,0xB9,0x9B,0x66,0x72,0x87,0x7C,0x57}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAppVersionWeb_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 120, + 2648, + 2810 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAppVersionWeb_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppVersionWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAppVersionWeb_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IAppVersionWeb_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(10) _IAppVersionWebProxyVtbl = +{ + &IAppVersionWeb_ProxyInfo, + &IID_IAppVersionWeb, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* IAppVersionWeb::get_version */ , + (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageCount */ , + (void *) (INT_PTR) -1 /* IAppVersionWeb::get_packageWeb */ +}; + + +static const PRPC_STUB_FUNCTION IAppVersionWeb_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAppVersionWebStubVtbl = +{ + &IID_IAppVersionWeb, + &IAppVersionWeb_ServerInfo, + 10, + &IAppVersionWeb_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: ICoCreateAsyncStatus, ver. 0.0, + GUID={0x2E629606,0x312A,0x482f,{0x9B,0x12,0x2C,0x4A,0xBF,0x6F,0x0B,0x6D}} */ + +#pragma code_seg(".orpc") +static const unsigned short ICoCreateAsyncStatus_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 2610, + 2648, + 82 + }; + +static const MIDL_STUBLESS_PROXY_INFO ICoCreateAsyncStatus_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &ICoCreateAsyncStatus_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO ICoCreateAsyncStatus_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &ICoCreateAsyncStatus_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(10) _ICoCreateAsyncStatusProxyVtbl = +{ + &ICoCreateAsyncStatus_ProxyInfo, + &IID_ICoCreateAsyncStatus, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + (void *) (INT_PTR) -1 /* ICoCreateAsyncStatus::get_isDone */ , + (void *) (INT_PTR) -1 /* ICoCreateAsyncStatus::get_completionHResult */ , + (void *) (INT_PTR) -1 /* ICoCreateAsyncStatus::get_createdInstance */ +}; + + +static const PRPC_STUB_FUNCTION ICoCreateAsyncStatus_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _ICoCreateAsyncStatusStubVtbl = +{ + &IID_ICoCreateAsyncStatus, + &ICoCreateAsyncStatus_ServerInfo, + 10, + &ICoCreateAsyncStatus_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: ICoCreateAsync, ver. 0.0, + GUID={0xDAB1D343,0x1B2A,0x47f9,{0xB4,0x45,0x93,0xDC,0x50,0x70,0x4B,0xFE}} */ + +#pragma code_seg(".orpc") +static const unsigned short ICoCreateAsync_FormatStringOffsetTable[] = + { + 4270 + }; + +static const MIDL_STUBLESS_PROXY_INFO ICoCreateAsync_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &ICoCreateAsync_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO ICoCreateAsync_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &ICoCreateAsync_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(4) _ICoCreateAsyncProxyVtbl = +{ + &ICoCreateAsync_ProxyInfo, + &IID_ICoCreateAsync, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* ICoCreateAsync::createOmahaMachineServerAsync */ +}; + +const CInterfaceStubVtbl _ICoCreateAsyncStubVtbl = +{ + &IID_ICoCreateAsync, + &ICoCreateAsync_ServerInfo, + 4, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IBrowserHttpRequest2, ver. 0.0, + GUID={0x5B25A8DC,0x1780,0x4178,{0xA6,0x29,0x6B,0xE8,0xB8,0xDE,0xFA,0xA2}} */ + +#pragma code_seg(".orpc") +static const unsigned short IBrowserHttpRequest2_FormatStringOffsetTable[] = + { + 4320 + }; + +static const MIDL_STUBLESS_PROXY_INFO IBrowserHttpRequest2_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IBrowserHttpRequest2_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IBrowserHttpRequest2_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IBrowserHttpRequest2_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(4) _IBrowserHttpRequest2ProxyVtbl = +{ + &IBrowserHttpRequest2_ProxyInfo, + &IID_IBrowserHttpRequest2, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IBrowserHttpRequest2::Send */ +}; + +const CInterfaceStubVtbl _IBrowserHttpRequest2StubVtbl = +{ + &IID_IBrowserHttpRequest2, + &IBrowserHttpRequest2_ServerInfo, + 4, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IProcessLauncher, ver. 0.0, + GUID={0x128C2DA6,0x2BC0,0x44c0,{0xB3,0xF6,0x4E,0xC2,0x2E,0x64,0x79,0x64}} */ + +#pragma code_seg(".orpc") +static const unsigned short IProcessLauncher_FormatStringOffsetTable[] = + { + 4394, + 4432, + 4476 + }; + +static const MIDL_STUBLESS_PROXY_INFO IProcessLauncher_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IProcessLauncher_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IProcessLauncher_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IProcessLauncher_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(6) _IProcessLauncherProxyVtbl = +{ + &IProcessLauncher_ProxyInfo, + &IID_IProcessLauncher, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IProcessLauncher::LaunchCmdLine */ , + (void *) (INT_PTR) -1 /* IProcessLauncher::LaunchBrowser */ , + (void *) (INT_PTR) -1 /* IProcessLauncher::LaunchCmdElevated */ +}; + +const CInterfaceStubVtbl _IProcessLauncherStubVtbl = +{ + &IID_IProcessLauncher, + &IProcessLauncher_ServerInfo, + 6, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IOneClickProcessLauncher, ver. 0.0, + GUID={0x5CCCB0EF,0x7073,0x4516,{0x80,0x28,0x4C,0x62,0x8D,0x0C,0x8A,0xAB}} */ + +#pragma code_seg(".orpc") +static const unsigned short IOneClickProcessLauncher_FormatStringOffsetTable[] = + { + 4532 + }; + +static const MIDL_STUBLESS_PROXY_INFO IOneClickProcessLauncher_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IOneClickProcessLauncher_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IOneClickProcessLauncher_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IOneClickProcessLauncher_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(4) _IOneClickProcessLauncherProxyVtbl = +{ + &IOneClickProcessLauncher_ProxyInfo, + &IID_IOneClickProcessLauncher, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IOneClickProcessLauncher::LaunchAppCommand */ +}; + +const CInterfaceStubVtbl _IOneClickProcessLauncherStubVtbl = +{ + &IID_IOneClickProcessLauncher, + &IOneClickProcessLauncher_ServerInfo, + 4, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Standard interface: __MIDL_itf_google_update_idl_0000_0020, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IProgressWndEvents, ver. 0.0, + GUID={0x1C642CED,0xCA3B,0x4013,{0xA9,0xDF,0xCA,0x6C,0xE5,0xFF,0x65,0x03}} */ + +#pragma code_seg(".orpc") +static const unsigned short IProgressWndEvents_FormatStringOffsetTable[] = + { + 4576, + 4608, + 4640, + 4672, + 4704, + 4736 + }; + +static const MIDL_STUBLESS_PROXY_INFO IProgressWndEvents_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IProgressWndEvents_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IProgressWndEvents_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IProgressWndEvents_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(9) _IProgressWndEventsProxyVtbl = +{ + &IProgressWndEvents_ProxyInfo, + &IID_IProgressWndEvents, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IProgressWndEvents::DoClose */ , + (void *) (INT_PTR) -1 /* IProgressWndEvents::DoPause */ , + (void *) (INT_PTR) -1 /* IProgressWndEvents::DoResume */ , + (void *) (INT_PTR) -1 /* IProgressWndEvents::DoRestartBrowsers */ , + (void *) (INT_PTR) -1 /* IProgressWndEvents::DoReboot */ , + (void *) (INT_PTR) -1 /* IProgressWndEvents::DoLaunchBrowser */ +}; + +const CInterfaceStubVtbl _IProgressWndEventsStubVtbl = +{ + &IID_IProgressWndEvents, + &IProgressWndEvents_ServerInfo, + 9, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IJobObserver, ver. 0.0, + GUID={0x49D7563B,0x2DDB,0x4831,{0x88,0xC8,0x76,0x8A,0x53,0x83,0x38,0x37}} */ + +#pragma code_seg(".orpc") +static const unsigned short IJobObserver_FormatStringOffsetTable[] = + { + 4576, + 4608, + 4774, + 4672, + 4812, + 4856, + 3586, + 4888, + 4920, + 4964 + }; + +static const MIDL_STUBLESS_PROXY_INFO IJobObserver_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IJobObserver_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IJobObserver_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IJobObserver_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(13) _IJobObserverProxyVtbl = +{ + &IJobObserver_ProxyInfo, + &IID_IJobObserver, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IJobObserver::OnShow */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnCheckingForUpdate */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnUpdateAvailable */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnWaitingToDownload */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnDownloading */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnWaitingToInstall */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnInstalling */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnPause */ , + (void *) (INT_PTR) -1 /* IJobObserver::OnComplete */ , + (void *) (INT_PTR) -1 /* IJobObserver::SetEventSink */ +}; + +const CInterfaceStubVtbl _IJobObserverStubVtbl = +{ + &IID_IJobObserver, + &IJobObserver_ServerInfo, + 13, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IGoogleUpdate, ver. 0.0, + GUID={0x31AC3F11,0xE5EA,0x4a85,{0x8A,0x3D,0x8E,0x09,0x5A,0x39,0xC2,0x7B}} */ + +#pragma code_seg(".orpc") +static const unsigned short IGoogleUpdate_FormatStringOffsetTable[] = + { + 5002, + 5046 + }; + +static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdate_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IGoogleUpdate_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdate_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(5) _IGoogleUpdateProxyVtbl = +{ + &IGoogleUpdate_ProxyInfo, + &IID_IGoogleUpdate, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IGoogleUpdate::CheckForUpdate */ , + (void *) (INT_PTR) -1 /* IGoogleUpdate::Update */ +}; + +const CInterfaceStubVtbl _IGoogleUpdateStubVtbl = +{ + &IID_IGoogleUpdate, + &IGoogleUpdate_ServerInfo, + 5, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IGoogleUpdateCore, ver. 0.0, + GUID={0x909489C2,0x85A6,0x4322,{0xAA,0x56,0xD2,0x52,0x78,0x64,0x9D,0x67}} */ + +#pragma code_seg(".orpc") +static const unsigned short IGoogleUpdateCore_FormatStringOffsetTable[] = + { + 5090 + }; + +static const MIDL_STUBLESS_PROXY_INFO IGoogleUpdateCore_ProxyInfo = + { + &Object_StubDesc, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdateCore_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IGoogleUpdateCore_ServerInfo = + { + &Object_StubDesc, + 0, + google_update_idl__MIDL_ProcFormatString.Format, + &IGoogleUpdateCore_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(4) _IGoogleUpdateCoreProxyVtbl = +{ + &IGoogleUpdateCore_ProxyInfo, + &IID_IGoogleUpdateCore, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IGoogleUpdateCore::LaunchCmdElevated */ +}; + +const CInterfaceStubVtbl _IGoogleUpdateCoreStubVtbl = +{ + &IID_IGoogleUpdateCore, + &IGoogleUpdateCore_ServerInfo, + 4, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + +static const MIDL_STUB_DESC Object_StubDesc = + { + 0, + NdrOleAllocate, + NdrOleFree, + 0, + 0, + 0, + 0, + 0, + google_update_idl__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x50002, /* Ndr library version */ + 0, + 0x801026e, /* MIDL Version 8.1.622 */ + 0, + UserMarshalRoutines, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; + +const CInterfaceProxyVtbl * const _google_update_idl_ProxyVtblList[] = +{ + ( CInterfaceProxyVtbl *) &_ICoCreateAsyncStatusProxyVtbl, + ( CInterfaceProxyVtbl *) &_IGoogleUpdateProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppVersionWebProxyVtbl, + ( CInterfaceProxyVtbl *) &_IRegistrationUpdateHookProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppVersionProxyVtbl, + ( CInterfaceProxyVtbl *) &_IJobObserverProxyVtbl, + ( CInterfaceProxyVtbl *) &_ICoCreateAsyncProxyVtbl, + ( CInterfaceProxyVtbl *) &_IGoogleUpdate3ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppBundleWebProxyVtbl, + ( CInterfaceProxyVtbl *) &_ICredentialDialogProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppWebProxyVtbl, + ( CInterfaceProxyVtbl *) &_IGoogleUpdate3WebSecurityProxyVtbl, + ( CInterfaceProxyVtbl *) &_IPackageProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppProxyVtbl, + ( CInterfaceProxyVtbl *) &_IProcessLauncherProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppCommandWebProxyVtbl, + ( CInterfaceProxyVtbl *) &_IGoogleUpdateCoreProxyVtbl, + ( CInterfaceProxyVtbl *) &_IGoogleUpdate3WebProxyVtbl, + ( CInterfaceProxyVtbl *) &_IBrowserHttpRequest2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppBundleProxyVtbl, + ( CInterfaceProxyVtbl *) &_IProgressWndEventsProxyVtbl, + ( CInterfaceProxyVtbl *) &_IOneClickProcessLauncherProxyVtbl, + ( CInterfaceProxyVtbl *) &_ICurrentStateProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAppCommandProxyVtbl, + 0 +}; + +const CInterfaceStubVtbl * const _google_update_idl_StubVtblList[] = +{ + ( CInterfaceStubVtbl *) &_ICoCreateAsyncStatusStubVtbl, + ( CInterfaceStubVtbl *) &_IGoogleUpdateStubVtbl, + ( CInterfaceStubVtbl *) &_IAppVersionWebStubVtbl, + ( CInterfaceStubVtbl *) &_IRegistrationUpdateHookStubVtbl, + ( CInterfaceStubVtbl *) &_IAppVersionStubVtbl, + ( CInterfaceStubVtbl *) &_IJobObserverStubVtbl, + ( CInterfaceStubVtbl *) &_ICoCreateAsyncStubVtbl, + ( CInterfaceStubVtbl *) &_IGoogleUpdate3StubVtbl, + ( CInterfaceStubVtbl *) &_IAppBundleWebStubVtbl, + ( CInterfaceStubVtbl *) &_ICredentialDialogStubVtbl, + ( CInterfaceStubVtbl *) &_IAppWebStubVtbl, + ( CInterfaceStubVtbl *) &_IGoogleUpdate3WebSecurityStubVtbl, + ( CInterfaceStubVtbl *) &_IPackageStubVtbl, + ( CInterfaceStubVtbl *) &_IAppStubVtbl, + ( CInterfaceStubVtbl *) &_IProcessLauncherStubVtbl, + ( CInterfaceStubVtbl *) &_IAppCommandWebStubVtbl, + ( CInterfaceStubVtbl *) &_IGoogleUpdateCoreStubVtbl, + ( CInterfaceStubVtbl *) &_IGoogleUpdate3WebStubVtbl, + ( CInterfaceStubVtbl *) &_IBrowserHttpRequest2StubVtbl, + ( CInterfaceStubVtbl *) &_IAppBundleStubVtbl, + ( CInterfaceStubVtbl *) &_IProgressWndEventsStubVtbl, + ( CInterfaceStubVtbl *) &_IOneClickProcessLauncherStubVtbl, + ( CInterfaceStubVtbl *) &_ICurrentStateStubVtbl, + ( CInterfaceStubVtbl *) &_IAppCommandStubVtbl, + 0 +}; + +PCInterfaceName const _google_update_idl_InterfaceNamesList[] = +{ + "ICoCreateAsyncStatus", + "IGoogleUpdate", + "IAppVersionWeb", + "IRegistrationUpdateHook", + "IAppVersion", + "IJobObserver", + "ICoCreateAsync", + "IGoogleUpdate3", + "IAppBundleWeb", + "ICredentialDialog", + "IAppWeb", + "IGoogleUpdate3WebSecurity", + "IPackage", + "IApp", + "IProcessLauncher", + "IAppCommandWeb", + "IGoogleUpdateCore", + "IGoogleUpdate3Web", + "IBrowserHttpRequest2", + "IAppBundle", + "IProgressWndEvents", + "IOneClickProcessLauncher", + "ICurrentState", + "IAppCommand", + 0 +}; + +const IID * const _google_update_idl_BaseIIDList[] = +{ + &IID_IDispatch, + 0, + &IID_IDispatch, + &IID_IDispatch, + &IID_IDispatch, + 0, + 0, + &IID_IDispatch, + &IID_IDispatch, + 0, + &IID_IDispatch, + 0, + &IID_IDispatch, + &IID_IDispatch, + 0, + &IID_IDispatch, + 0, + &IID_IDispatch, + 0, + &IID_IDispatch, + 0, + 0, + &IID_IDispatch, + &IID_IDispatch, + 0 +}; + + +#define _google_update_idl_CHECK_IID(n) IID_GENERIC_CHECK_IID( _google_update_idl, pIID, n) + +int __stdcall _google_update_idl_IID_Lookup( const IID * pIID, int * pIndex ) +{ + IID_BS_LOOKUP_SETUP + + IID_BS_LOOKUP_INITIAL_TEST( _google_update_idl, 24, 16 ) + IID_BS_LOOKUP_NEXT_TEST( _google_update_idl, 8 ) + IID_BS_LOOKUP_NEXT_TEST( _google_update_idl, 4 ) + IID_BS_LOOKUP_NEXT_TEST( _google_update_idl, 2 ) + IID_BS_LOOKUP_NEXT_TEST( _google_update_idl, 1 ) + IID_BS_LOOKUP_RETURN_RESULT( _google_update_idl, 24, *pIndex ) + +} + +const ExtendedProxyFileInfo google_update_idl_ProxyFileInfo = +{ + (PCInterfaceProxyVtblList *) & _google_update_idl_ProxyVtblList, + (PCInterfaceStubVtblList *) & _google_update_idl_StubVtblList, + (const PCInterfaceName * ) & _google_update_idl_InterfaceNamesList, + (const IID ** ) & _google_update_idl_BaseIIDList, + & _google_update_idl_IID_Lookup, + 24, + 2, + 0, /* table of [async_uuid] interfaces */ + 0, /* Filler1 */ + 0, /* Filler2 */ + 0 /* Filler3 */ +}; +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* defined(_M_AMD64)*/ +
diff --git a/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.dlldata.c b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.dlldata.c new file mode 100644 index 0000000..aa1c55c --- /dev/null +++ b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.dlldata.c
@@ -0,0 +1,37 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + + +#include <rpcproxy.h> + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( chromoting_lib ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( chromoting_lib ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */
diff --git a/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.h b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.h new file mode 100644 index 0000000..67ab8aca --- /dev/null +++ b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.h
@@ -0,0 +1,327 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for gen/remoting/host/win/chromoting_lib.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the <rpcndr.h> version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of <rpcndr.h> +#endif /* __RPCNDR_H_VERSION__ */ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __chromoting_lib_h__ +#define __chromoting_lib_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IRdpDesktopSessionEventHandler_FWD_DEFINED__ +#define __IRdpDesktopSessionEventHandler_FWD_DEFINED__ +typedef interface IRdpDesktopSessionEventHandler IRdpDesktopSessionEventHandler; + +#endif /* __IRdpDesktopSessionEventHandler_FWD_DEFINED__ */ + + +#ifndef __IRdpDesktopSession_FWD_DEFINED__ +#define __IRdpDesktopSession_FWD_DEFINED__ +typedef interface IRdpDesktopSession IRdpDesktopSession; + +#endif /* __IRdpDesktopSession_FWD_DEFINED__ */ + + +#ifndef __RdpDesktopSession_FWD_DEFINED__ +#define __RdpDesktopSession_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class RdpDesktopSession RdpDesktopSession; +#else +typedef struct RdpDesktopSession RdpDesktopSession; +#endif /* __cplusplus */ + +#endif /* __RdpDesktopSession_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +#ifndef __IRdpDesktopSessionEventHandler_INTERFACE_DEFINED__ +#define __IRdpDesktopSessionEventHandler_INTERFACE_DEFINED__ + +/* interface IRdpDesktopSessionEventHandler */ +/* [unique][helpstring][nonextensible][uuid][object] */ + + +EXTERN_C const IID IID_IRdpDesktopSessionEventHandler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("b59b96da-83cb-40ee-9b91-c377400fc3e3") + IRdpDesktopSessionEventHandler : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnRdpConnected( void) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnRdpClosed( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IRdpDesktopSessionEventHandlerVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IRdpDesktopSessionEventHandler * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IRdpDesktopSessionEventHandler * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IRdpDesktopSessionEventHandler * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnRdpConnected )( + IRdpDesktopSessionEventHandler * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnRdpClosed )( + IRdpDesktopSessionEventHandler * This); + + END_INTERFACE + } IRdpDesktopSessionEventHandlerVtbl; + + interface IRdpDesktopSessionEventHandler + { + CONST_VTBL struct IRdpDesktopSessionEventHandlerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IRdpDesktopSessionEventHandler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IRdpDesktopSessionEventHandler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IRdpDesktopSessionEventHandler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IRdpDesktopSessionEventHandler_OnRdpConnected(This) \ + ( (This)->lpVtbl -> OnRdpConnected(This) ) + +#define IRdpDesktopSessionEventHandler_OnRdpClosed(This) \ + ( (This)->lpVtbl -> OnRdpClosed(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IRdpDesktopSessionEventHandler_INTERFACE_DEFINED__ */ + + +#ifndef __IRdpDesktopSession_INTERFACE_DEFINED__ +#define __IRdpDesktopSession_INTERFACE_DEFINED__ + +/* interface IRdpDesktopSession */ +/* [unique][helpstring][nonextensible][uuid][object] */ + + +EXTERN_C const IID IID_IRdpDesktopSession; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6a7699f0-ee43-43e7-aa30-a6738f9bd470") + IRdpDesktopSession : public IUnknown + { + public: + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Connect( + /* [in] */ long width, + /* [in] */ long height, + /* [in] */ long dpi_x, + /* [in] */ long dpi_y, + /* [in] */ BSTR terminal_id, + /* [in] */ DWORD port_number, + /* [in] */ IRdpDesktopSessionEventHandler *event_handler) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Disconnect( void) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ChangeResolution( + /* [in] */ long width, + /* [in] */ long height, + /* [in] */ long dpi_x, + /* [in] */ long dpi_y) = 0; + + virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE InjectSas( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IRdpDesktopSessionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IRdpDesktopSession * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IRdpDesktopSession * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IRdpDesktopSession * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Connect )( + IRdpDesktopSession * This, + /* [in] */ long width, + /* [in] */ long height, + /* [in] */ long dpi_x, + /* [in] */ long dpi_y, + /* [in] */ BSTR terminal_id, + /* [in] */ DWORD port_number, + /* [in] */ IRdpDesktopSessionEventHandler *event_handler); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Disconnect )( + IRdpDesktopSession * This); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ChangeResolution )( + IRdpDesktopSession * This, + /* [in] */ long width, + /* [in] */ long height, + /* [in] */ long dpi_x, + /* [in] */ long dpi_y); + + /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *InjectSas )( + IRdpDesktopSession * This); + + END_INTERFACE + } IRdpDesktopSessionVtbl; + + interface IRdpDesktopSession + { + CONST_VTBL struct IRdpDesktopSessionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IRdpDesktopSession_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IRdpDesktopSession_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IRdpDesktopSession_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IRdpDesktopSession_Connect(This,width,height,dpi_x,dpi_y,terminal_id,port_number,event_handler) \ + ( (This)->lpVtbl -> Connect(This,width,height,dpi_x,dpi_y,terminal_id,port_number,event_handler) ) + +#define IRdpDesktopSession_Disconnect(This) \ + ( (This)->lpVtbl -> Disconnect(This) ) + +#define IRdpDesktopSession_ChangeResolution(This,width,height,dpi_x,dpi_y) \ + ( (This)->lpVtbl -> ChangeResolution(This,width,height,dpi_x,dpi_y) ) + +#define IRdpDesktopSession_InjectSas(This) \ + ( (This)->lpVtbl -> InjectSas(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IRdpDesktopSession_INTERFACE_DEFINED__ */ + + + +#ifndef __ChromotingLib_LIBRARY_DEFINED__ +#define __ChromotingLib_LIBRARY_DEFINED__ + +/* library ChromotingLib */ +/* [helpstring][version][uuid] */ + + +EXTERN_C const IID LIBID_ChromotingLib; + +EXTERN_C const CLSID CLSID_RdpDesktopSession; + +#ifdef __cplusplus + +class DECLSPEC_UUID("d2265286-2cc6-53cb-b6ef-909034b95730") +RdpDesktopSession; +#endif +#endif /* __ChromotingLib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + +
diff --git a/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.tlb b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.tlb new file mode 100644 index 0000000..3dd2490 --- /dev/null +++ b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib.tlb Binary files differ
diff --git a/third_party/win_build_output/midl/remoting/host/win/chromoting_lib_i.c b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib_i.c new file mode 100644 index 0000000..7e57611 --- /dev/null +++ b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib_i.c
@@ -0,0 +1,88 @@ + + +/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for gen/remoting/host/win/chromoting_lib.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#ifdef __cplusplus +extern "C"{ +#endif + + +#include <rpc.h> +#include <rpcndr.h> + +#ifdef _MIDL_USE_GUIDDEF_ + +#ifndef INITGUID +#define INITGUID +#include <guiddef.h> +#undef INITGUID +#else +#include <guiddef.h> +#endif + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) + +#else // !_MIDL_USE_GUIDDEF_ + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + EXTERN_C __declspec(selectany) const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + +#endif // !_MIDL_USE_GUIDDEF_ + +MIDL_DEFINE_GUID(IID, IID_IRdpDesktopSessionEventHandler,0xb59b96da,0x83cb,0x40ee,0x9b,0x91,0xc3,0x77,0x40,0x0f,0xc3,0xe3); + + +MIDL_DEFINE_GUID(IID, IID_IRdpDesktopSession,0x6a7699f0,0xee43,0x43e7,0xaa,0x30,0xa6,0x73,0x8f,0x9b,0xd4,0x70); + + +MIDL_DEFINE_GUID(IID, LIBID_ChromotingLib,0xb6396c45,0xb0cc,0x456b,0x9f,0x49,0xf1,0x29,0x64,0xee,0x6d,0xf4); + + +MIDL_DEFINE_GUID(CLSID, CLSID_RdpDesktopSession,0xd2265286,0x2cc6,0x53cb,0xb6,0xef,0x90,0x90,0x34,0xb9,0x57,0x30); + +#undef MIDL_DEFINE_GUID + +#ifdef __cplusplus +} +#endif + + +
diff --git a/third_party/win_build_output/midl/remoting/host/win/chromoting_lib_p.c b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib_p.c new file mode 100644 index 0000000..61ce41c --- /dev/null +++ b/third_party/win_build_output/midl/remoting/host/win/chromoting_lib_p.c
@@ -0,0 +1,572 @@ + + +/* this ALWAYS GENERATED file contains the proxy stub code */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for gen/remoting/host/win/chromoting_lib.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */ + +#define USE_STUBLESS_PROXY + + +/* verify that the <rpcproxy.h> version is high enough to compile this file*/ +#ifndef __REDQ_RPCPROXY_H_VERSION__ +#define __REQUIRED_RPCPROXY_H_VERSION__ 475 +#endif + + +#include "rpcproxy.h" +#ifndef __RPCPROXY_H_VERSION__ +#error this stub requires an updated version of <rpcproxy.h> +#endif /* __RPCPROXY_H_VERSION__ */ + + +#include "chromoting_lib.h" + +#define TYPE_FORMAT_STRING_SIZE 57 +#define PROC_FORMAT_STRING_SIZE 227 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 1 + +typedef struct _chromoting_lib_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } chromoting_lib_MIDL_TYPE_FORMAT_STRING; + +typedef struct _chromoting_lib_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } chromoting_lib_MIDL_PROC_FORMAT_STRING; + +typedef struct _chromoting_lib_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } chromoting_lib_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + + +extern const chromoting_lib_MIDL_TYPE_FORMAT_STRING chromoting_lib__MIDL_TypeFormatString; +extern const chromoting_lib_MIDL_PROC_FORMAT_STRING chromoting_lib__MIDL_ProcFormatString; +extern const chromoting_lib_MIDL_EXPR_FORMAT_STRING chromoting_lib__MIDL_ExprFormatString; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IRdpDesktopSessionEventHandler_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IRdpDesktopSessionEventHandler_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IRdpDesktopSession_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IRdpDesktopSession_ProxyInfo; + + +extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ]; + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + +static const chromoting_lib_MIDL_PROC_FORMAT_STRING chromoting_lib__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure OnRdpConnected */ + + 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x3 ), /* 3 */ +/* 8 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 10 */ NdrFcShort( 0x0 ), /* 0 */ +/* 12 */ NdrFcShort( 0x8 ), /* 8 */ +/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 16 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 18 */ NdrFcShort( 0x0 ), /* 0 */ +/* 20 */ NdrFcShort( 0x0 ), /* 0 */ +/* 22 */ NdrFcShort( 0x0 ), /* 0 */ +/* 24 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 26 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 30 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure Disconnect */ + + + /* Procedure OnRdpClosed */ + +/* 32 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 34 */ NdrFcLong( 0x0 ), /* 0 */ +/* 38 */ NdrFcShort( 0x4 ), /* 4 */ +/* 40 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 42 */ NdrFcShort( 0x0 ), /* 0 */ +/* 44 */ NdrFcShort( 0x8 ), /* 8 */ +/* 46 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 48 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 50 */ NdrFcShort( 0x0 ), /* 0 */ +/* 52 */ NdrFcShort( 0x0 ), /* 0 */ +/* 54 */ NdrFcShort( 0x0 ), /* 0 */ +/* 56 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 58 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 60 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 62 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure Connect */ + +/* 64 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 66 */ NdrFcLong( 0x0 ), /* 0 */ +/* 70 */ NdrFcShort( 0x3 ), /* 3 */ +/* 72 */ NdrFcShort( 0x48 ), /* X64 Stack size/offset = 72 */ +/* 74 */ NdrFcShort( 0x28 ), /* 40 */ +/* 76 */ NdrFcShort( 0x8 ), /* 8 */ +/* 78 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x8, /* 8 */ +/* 80 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 82 */ NdrFcShort( 0x0 ), /* 0 */ +/* 84 */ NdrFcShort( 0x1 ), /* 1 */ +/* 86 */ NdrFcShort( 0x0 ), /* 0 */ +/* 88 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter width */ + +/* 90 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 92 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 94 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter height */ + +/* 96 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 98 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 100 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter dpi_x */ + +/* 102 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 104 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 106 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter dpi_y */ + +/* 108 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 110 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter terminal_id */ + +/* 114 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 116 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 118 */ NdrFcShort( 0x1c ), /* Type Offset=28 */ + + /* Parameter port_number */ + +/* 120 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 122 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 124 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter event_handler */ + +/* 126 */ NdrFcShort( 0xb ), /* Flags: must size, must free, in, */ +/* 128 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 130 */ NdrFcShort( 0x26 ), /* Type Offset=38 */ + + /* Return value */ + +/* 132 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 134 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 136 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure ChangeResolution */ + +/* 138 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 140 */ NdrFcLong( 0x0 ), /* 0 */ +/* 144 */ NdrFcShort( 0x5 ), /* 5 */ +/* 146 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 148 */ NdrFcShort( 0x20 ), /* 32 */ +/* 150 */ NdrFcShort( 0x8 ), /* 8 */ +/* 152 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x5, /* 5 */ +/* 154 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 156 */ NdrFcShort( 0x0 ), /* 0 */ +/* 158 */ NdrFcShort( 0x0 ), /* 0 */ +/* 160 */ NdrFcShort( 0x0 ), /* 0 */ +/* 162 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter width */ + +/* 164 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 166 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 168 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter height */ + +/* 170 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 172 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 174 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter dpi_x */ + +/* 176 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 178 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 180 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter dpi_y */ + +/* 182 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 184 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 186 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 188 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 190 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 192 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure InjectSas */ + +/* 194 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 196 */ NdrFcLong( 0x0 ), /* 0 */ +/* 200 */ NdrFcShort( 0x6 ), /* 6 */ +/* 202 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 206 */ NdrFcShort( 0x8 ), /* 8 */ +/* 208 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ +/* 210 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 212 */ NdrFcShort( 0x0 ), /* 0 */ +/* 214 */ NdrFcShort( 0x0 ), /* 0 */ +/* 216 */ NdrFcShort( 0x0 ), /* 0 */ +/* 218 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Return value */ + +/* 220 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 222 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 224 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const chromoting_lib_MIDL_TYPE_FORMAT_STRING chromoting_lib__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x12, 0x0, /* FC_UP */ +/* 4 */ NdrFcShort( 0xe ), /* Offset= 14 (18) */ +/* 6 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 8 */ NdrFcShort( 0x2 ), /* 2 */ +/* 10 */ 0x9, /* Corr desc: FC_ULONG */ + 0x0, /* */ +/* 12 */ NdrFcShort( 0xfffc ), /* -4 */ +/* 14 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 16 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 18 */ + 0x17, /* FC_CSTRUCT */ + 0x3, /* 3 */ +/* 20 */ NdrFcShort( 0x8 ), /* 8 */ +/* 22 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (6) */ +/* 24 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 26 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 28 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 30 */ NdrFcShort( 0x0 ), /* 0 */ +/* 32 */ NdrFcShort( 0x8 ), /* 8 */ +/* 34 */ NdrFcShort( 0x0 ), /* 0 */ +/* 36 */ NdrFcShort( 0xffde ), /* Offset= -34 (2) */ +/* 38 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 40 */ NdrFcLong( 0xb59b96da ), /* -1248094502 */ +/* 44 */ NdrFcShort( 0x83cb ), /* -31797 */ +/* 46 */ NdrFcShort( 0x40ee ), /* 16622 */ +/* 48 */ 0x9b, /* 155 */ + 0x91, /* 145 */ +/* 50 */ 0xc3, /* 195 */ + 0x77, /* 119 */ +/* 52 */ 0x40, /* 64 */ + 0xf, /* 15 */ +/* 54 */ 0xc3, /* 195 */ + 0xe3, /* 227 */ + + 0x0 + } + }; + +static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] = + { + + { + BSTR_UserSize + ,BSTR_UserMarshal + ,BSTR_UserUnmarshal + ,BSTR_UserFree + } + + }; + + + +/* Object interface: IUnknown, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IRdpDesktopSessionEventHandler, ver. 0.0, + GUID={0xb59b96da,0x83cb,0x40ee,{0x9b,0x91,0xc3,0x77,0x40,0x0f,0xc3,0xe3}} */ + +#pragma code_seg(".orpc") +static const unsigned short IRdpDesktopSessionEventHandler_FormatStringOffsetTable[] = + { + 0, + 32 + }; + +static const MIDL_STUBLESS_PROXY_INFO IRdpDesktopSessionEventHandler_ProxyInfo = + { + &Object_StubDesc, + chromoting_lib__MIDL_ProcFormatString.Format, + &IRdpDesktopSessionEventHandler_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IRdpDesktopSessionEventHandler_ServerInfo = + { + &Object_StubDesc, + 0, + chromoting_lib__MIDL_ProcFormatString.Format, + &IRdpDesktopSessionEventHandler_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(5) _IRdpDesktopSessionEventHandlerProxyVtbl = +{ + &IRdpDesktopSessionEventHandler_ProxyInfo, + &IID_IRdpDesktopSessionEventHandler, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IRdpDesktopSessionEventHandler::OnRdpConnected */ , + (void *) (INT_PTR) -1 /* IRdpDesktopSessionEventHandler::OnRdpClosed */ +}; + +const CInterfaceStubVtbl _IRdpDesktopSessionEventHandlerStubVtbl = +{ + &IID_IRdpDesktopSessionEventHandler, + &IRdpDesktopSessionEventHandler_ServerInfo, + 5, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IRdpDesktopSession, ver. 0.0, + GUID={0x6a7699f0,0xee43,0x43e7,{0xaa,0x30,0xa6,0x73,0x8f,0x9b,0xd4,0x70}} */ + +#pragma code_seg(".orpc") +static const unsigned short IRdpDesktopSession_FormatStringOffsetTable[] = + { + 64, + 32, + 138, + 194 + }; + +static const MIDL_STUBLESS_PROXY_INFO IRdpDesktopSession_ProxyInfo = + { + &Object_StubDesc, + chromoting_lib__MIDL_ProcFormatString.Format, + &IRdpDesktopSession_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IRdpDesktopSession_ServerInfo = + { + &Object_StubDesc, + 0, + chromoting_lib__MIDL_ProcFormatString.Format, + &IRdpDesktopSession_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(7) _IRdpDesktopSessionProxyVtbl = +{ + &IRdpDesktopSession_ProxyInfo, + &IID_IRdpDesktopSession, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IRdpDesktopSession::Connect */ , + (void *) (INT_PTR) -1 /* IRdpDesktopSession::Disconnect */ , + (void *) (INT_PTR) -1 /* IRdpDesktopSession::ChangeResolution */ , + (void *) (INT_PTR) -1 /* IRdpDesktopSession::InjectSas */ +}; + +const CInterfaceStubVtbl _IRdpDesktopSessionStubVtbl = +{ + &IID_IRdpDesktopSession, + &IRdpDesktopSession_ServerInfo, + 7, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + +static const MIDL_STUB_DESC Object_StubDesc = + { + 0, + NdrOleAllocate, + NdrOleFree, + 0, + 0, + 0, + 0, + 0, + chromoting_lib__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x50002, /* Ndr library version */ + 0, + 0x801026e, /* MIDL Version 8.1.622 */ + 0, + UserMarshalRoutines, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; + +const CInterfaceProxyVtbl * const _chromoting_lib_ProxyVtblList[] = +{ + ( CInterfaceProxyVtbl *) &_IRdpDesktopSessionEventHandlerProxyVtbl, + ( CInterfaceProxyVtbl *) &_IRdpDesktopSessionProxyVtbl, + 0 +}; + +const CInterfaceStubVtbl * const _chromoting_lib_StubVtblList[] = +{ + ( CInterfaceStubVtbl *) &_IRdpDesktopSessionEventHandlerStubVtbl, + ( CInterfaceStubVtbl *) &_IRdpDesktopSessionStubVtbl, + 0 +}; + +PCInterfaceName const _chromoting_lib_InterfaceNamesList[] = +{ + "IRdpDesktopSessionEventHandler", + "IRdpDesktopSession", + 0 +}; + + +#define _chromoting_lib_CHECK_IID(n) IID_GENERIC_CHECK_IID( _chromoting_lib, pIID, n) + +int __stdcall _chromoting_lib_IID_Lookup( const IID * pIID, int * pIndex ) +{ + IID_BS_LOOKUP_SETUP + + IID_BS_LOOKUP_INITIAL_TEST( _chromoting_lib, 2, 1 ) + IID_BS_LOOKUP_RETURN_RESULT( _chromoting_lib, 2, *pIndex ) + +} + +const ExtendedProxyFileInfo chromoting_lib_ProxyFileInfo = +{ + (PCInterfaceProxyVtblList *) & _chromoting_lib_ProxyVtblList, + (PCInterfaceStubVtblList *) & _chromoting_lib_StubVtblList, + (const PCInterfaceName * ) & _chromoting_lib_InterfaceNamesList, + 0, /* no delegation */ + & _chromoting_lib_IID_Lookup, + 2, + 2, + 0, /* table of [async_uuid] interfaces */ + 0, /* Filler1 */ + 0, /* Filler2 */ + 0 /* Filler3 */ +}; +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* defined(_M_AMD64)*/ +
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.dlldata.c b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.dlldata.c new file mode 100644 index 0000000..2475357 --- /dev/null +++ b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.dlldata.c
@@ -0,0 +1,38 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + +#define PROXY_DELEGATION + +#include <rpcproxy.h> + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( ia2_api_all ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( ia2_api_all ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.h b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.h new file mode 100644 index 0000000..7c8aaa2 --- /dev/null +++ b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.h
@@ -0,0 +1,4746 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../third_party/iaccessible2/ia2_api_all.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the <rpcndr.h> version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of <rpcndr.h> +#endif /* __RPCNDR_H_VERSION__ */ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __ia2_api_all_h__ +#define __ia2_api_all_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IAccessibleRelation_FWD_DEFINED__ +#define __IAccessibleRelation_FWD_DEFINED__ +typedef interface IAccessibleRelation IAccessibleRelation; + +#endif /* __IAccessibleRelation_FWD_DEFINED__ */ + + +#ifndef __IAccessibleAction_FWD_DEFINED__ +#define __IAccessibleAction_FWD_DEFINED__ +typedef interface IAccessibleAction IAccessibleAction; + +#endif /* __IAccessibleAction_FWD_DEFINED__ */ + + +#ifndef __IAccessible2_FWD_DEFINED__ +#define __IAccessible2_FWD_DEFINED__ +typedef interface IAccessible2 IAccessible2; + +#endif /* __IAccessible2_FWD_DEFINED__ */ + + +#ifndef __IAccessible2_2_FWD_DEFINED__ +#define __IAccessible2_2_FWD_DEFINED__ +typedef interface IAccessible2_2 IAccessible2_2; + +#endif /* __IAccessible2_2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleComponent_FWD_DEFINED__ +#define __IAccessibleComponent_FWD_DEFINED__ +typedef interface IAccessibleComponent IAccessibleComponent; + +#endif /* __IAccessibleComponent_FWD_DEFINED__ */ + + +#ifndef __IAccessibleValue_FWD_DEFINED__ +#define __IAccessibleValue_FWD_DEFINED__ +typedef interface IAccessibleValue IAccessibleValue; + +#endif /* __IAccessibleValue_FWD_DEFINED__ */ + + +#ifndef __IAccessibleText_FWD_DEFINED__ +#define __IAccessibleText_FWD_DEFINED__ +typedef interface IAccessibleText IAccessibleText; + +#endif /* __IAccessibleText_FWD_DEFINED__ */ + + +#ifndef __IAccessibleText2_FWD_DEFINED__ +#define __IAccessibleText2_FWD_DEFINED__ +typedef interface IAccessibleText2 IAccessibleText2; + +#endif /* __IAccessibleText2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleEditableText_FWD_DEFINED__ +#define __IAccessibleEditableText_FWD_DEFINED__ +typedef interface IAccessibleEditableText IAccessibleEditableText; + +#endif /* __IAccessibleEditableText_FWD_DEFINED__ */ + + +#ifndef __IAccessibleHyperlink_FWD_DEFINED__ +#define __IAccessibleHyperlink_FWD_DEFINED__ +typedef interface IAccessibleHyperlink IAccessibleHyperlink; + +#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */ + + +#ifndef __IAccessibleHypertext_FWD_DEFINED__ +#define __IAccessibleHypertext_FWD_DEFINED__ +typedef interface IAccessibleHypertext IAccessibleHypertext; + +#endif /* __IAccessibleHypertext_FWD_DEFINED__ */ + + +#ifndef __IAccessibleHypertext2_FWD_DEFINED__ +#define __IAccessibleHypertext2_FWD_DEFINED__ +typedef interface IAccessibleHypertext2 IAccessibleHypertext2; + +#endif /* __IAccessibleHypertext2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleTable_FWD_DEFINED__ +#define __IAccessibleTable_FWD_DEFINED__ +typedef interface IAccessibleTable IAccessibleTable; + +#endif /* __IAccessibleTable_FWD_DEFINED__ */ + + +#ifndef __IAccessibleTable2_FWD_DEFINED__ +#define __IAccessibleTable2_FWD_DEFINED__ +typedef interface IAccessibleTable2 IAccessibleTable2; + +#endif /* __IAccessibleTable2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleTableCell_FWD_DEFINED__ +#define __IAccessibleTableCell_FWD_DEFINED__ +typedef interface IAccessibleTableCell IAccessibleTableCell; + +#endif /* __IAccessibleTableCell_FWD_DEFINED__ */ + + +#ifndef __IAccessibleImage_FWD_DEFINED__ +#define __IAccessibleImage_FWD_DEFINED__ +typedef interface IAccessibleImage IAccessibleImage; + +#endif /* __IAccessibleImage_FWD_DEFINED__ */ + + +#ifndef __IAccessibleApplication_FWD_DEFINED__ +#define __IAccessibleApplication_FWD_DEFINED__ +typedef interface IAccessibleApplication IAccessibleApplication; + +#endif /* __IAccessibleApplication_FWD_DEFINED__ */ + + +#ifndef __IAccessibleDocument_FWD_DEFINED__ +#define __IAccessibleDocument_FWD_DEFINED__ +typedef interface IAccessibleDocument IAccessibleDocument; + +#endif /* __IAccessibleDocument_FWD_DEFINED__ */ + + +#ifndef __IAccessible2_FWD_DEFINED__ +#define __IAccessible2_FWD_DEFINED__ +typedef interface IAccessible2 IAccessible2; + +#endif /* __IAccessible2_FWD_DEFINED__ */ + + +#ifndef __IAccessible2_2_FWD_DEFINED__ +#define __IAccessible2_2_FWD_DEFINED__ +typedef interface IAccessible2_2 IAccessible2_2; + +#endif /* __IAccessible2_2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleAction_FWD_DEFINED__ +#define __IAccessibleAction_FWD_DEFINED__ +typedef interface IAccessibleAction IAccessibleAction; + +#endif /* __IAccessibleAction_FWD_DEFINED__ */ + + +#ifndef __IAccessibleApplication_FWD_DEFINED__ +#define __IAccessibleApplication_FWD_DEFINED__ +typedef interface IAccessibleApplication IAccessibleApplication; + +#endif /* __IAccessibleApplication_FWD_DEFINED__ */ + + +#ifndef __IAccessibleComponent_FWD_DEFINED__ +#define __IAccessibleComponent_FWD_DEFINED__ +typedef interface IAccessibleComponent IAccessibleComponent; + +#endif /* __IAccessibleComponent_FWD_DEFINED__ */ + + +#ifndef __IAccessibleDocument_FWD_DEFINED__ +#define __IAccessibleDocument_FWD_DEFINED__ +typedef interface IAccessibleDocument IAccessibleDocument; + +#endif /* __IAccessibleDocument_FWD_DEFINED__ */ + + +#ifndef __IAccessibleEditableText_FWD_DEFINED__ +#define __IAccessibleEditableText_FWD_DEFINED__ +typedef interface IAccessibleEditableText IAccessibleEditableText; + +#endif /* __IAccessibleEditableText_FWD_DEFINED__ */ + + +#ifndef __IAccessibleHyperlink_FWD_DEFINED__ +#define __IAccessibleHyperlink_FWD_DEFINED__ +typedef interface IAccessibleHyperlink IAccessibleHyperlink; + +#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */ + + +#ifndef __IAccessibleText_FWD_DEFINED__ +#define __IAccessibleText_FWD_DEFINED__ +typedef interface IAccessibleText IAccessibleText; + +#endif /* __IAccessibleText_FWD_DEFINED__ */ + + +#ifndef __IAccessibleHypertext_FWD_DEFINED__ +#define __IAccessibleHypertext_FWD_DEFINED__ +typedef interface IAccessibleHypertext IAccessibleHypertext; + +#endif /* __IAccessibleHypertext_FWD_DEFINED__ */ + + +#ifndef __IAccessibleHypertext2_FWD_DEFINED__ +#define __IAccessibleHypertext2_FWD_DEFINED__ +typedef interface IAccessibleHypertext2 IAccessibleHypertext2; + +#endif /* __IAccessibleHypertext2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleImage_FWD_DEFINED__ +#define __IAccessibleImage_FWD_DEFINED__ +typedef interface IAccessibleImage IAccessibleImage; + +#endif /* __IAccessibleImage_FWD_DEFINED__ */ + + +#ifndef __IAccessibleRelation_FWD_DEFINED__ +#define __IAccessibleRelation_FWD_DEFINED__ +typedef interface IAccessibleRelation IAccessibleRelation; + +#endif /* __IAccessibleRelation_FWD_DEFINED__ */ + + +#ifndef __IAccessibleTable_FWD_DEFINED__ +#define __IAccessibleTable_FWD_DEFINED__ +typedef interface IAccessibleTable IAccessibleTable; + +#endif /* __IAccessibleTable_FWD_DEFINED__ */ + + +#ifndef __IAccessibleTable2_FWD_DEFINED__ +#define __IAccessibleTable2_FWD_DEFINED__ +typedef interface IAccessibleTable2 IAccessibleTable2; + +#endif /* __IAccessibleTable2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleTableCell_FWD_DEFINED__ +#define __IAccessibleTableCell_FWD_DEFINED__ +typedef interface IAccessibleTableCell IAccessibleTableCell; + +#endif /* __IAccessibleTableCell_FWD_DEFINED__ */ + + +#ifndef __IAccessibleText2_FWD_DEFINED__ +#define __IAccessibleText2_FWD_DEFINED__ +typedef interface IAccessibleText2 IAccessibleText2; + +#endif /* __IAccessibleText2_FWD_DEFINED__ */ + + +#ifndef __IAccessibleValue_FWD_DEFINED__ +#define __IAccessibleValue_FWD_DEFINED__ +typedef interface IAccessibleValue IAccessibleValue; + +#endif /* __IAccessibleValue_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "objidl.h" +#include "oaidl.h" +#include "oleacc.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_ia2_api_all_0000_0000 */ +/* [local] */ + + +enum IA2ScrollType + { + IA2_SCROLL_TYPE_TOP_LEFT = 0, + IA2_SCROLL_TYPE_BOTTOM_RIGHT = ( IA2_SCROLL_TYPE_TOP_LEFT + 1 ) , + IA2_SCROLL_TYPE_TOP_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_RIGHT + 1 ) , + IA2_SCROLL_TYPE_BOTTOM_EDGE = ( IA2_SCROLL_TYPE_TOP_EDGE + 1 ) , + IA2_SCROLL_TYPE_LEFT_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_EDGE + 1 ) , + IA2_SCROLL_TYPE_RIGHT_EDGE = ( IA2_SCROLL_TYPE_LEFT_EDGE + 1 ) , + IA2_SCROLL_TYPE_ANYWHERE = ( IA2_SCROLL_TYPE_RIGHT_EDGE + 1 ) + } ; + +enum IA2CoordinateType + { + IA2_COORDTYPE_SCREEN_RELATIVE = 0, + IA2_COORDTYPE_PARENT_RELATIVE = ( IA2_COORDTYPE_SCREEN_RELATIVE + 1 ) + } ; + +enum IA2TextSpecialOffsets + { + IA2_TEXT_OFFSET_LENGTH = -1, + IA2_TEXT_OFFSET_CARET = -2 + } ; + +enum IA2TableModelChangeType + { + IA2_TABLE_MODEL_CHANGE_INSERT = 0, + IA2_TABLE_MODEL_CHANGE_DELETE = ( IA2_TABLE_MODEL_CHANGE_INSERT + 1 ) , + IA2_TABLE_MODEL_CHANGE_UPDATE = ( IA2_TABLE_MODEL_CHANGE_DELETE + 1 ) + } ; +typedef struct IA2TableModelChange + { + enum IA2TableModelChangeType type; + long firstRow; + long lastRow; + long firstColumn; + long lastColumn; + } IA2TableModelChange; + +#define IA2_RELATION_CONTAINING_APPLICATION ( L"containingApplication" ) + +#define IA2_RELATION_CONTAINING_DOCUMENT ( L"containingDocument" ) + +#define IA2_RELATION_CONTAINING_TAB_PANE ( L"containingTabPane" ) + +#define IA2_RELATION_CONTAINING_WINDOW ( L"containingWindow" ) + +#define IA2_RELATION_CONTROLLED_BY ( L"controlledBy" ) + +#define IA2_RELATION_CONTROLLER_FOR ( L"controllerFor" ) + +#define IA2_RELATION_DESCRIBED_BY ( L"describedBy" ) + +#define IA2_RELATION_DESCRIPTION_FOR ( L"descriptionFor" ) + +#define IA2_RELATION_EMBEDDED_BY ( L"embeddedBy" ) + +#define IA2_RELATION_EMBEDS ( L"embeds" ) + +#define IA2_RELATION_FLOWS_FROM ( L"flowsFrom" ) + +#define IA2_RELATION_FLOWS_TO ( L"flowsTo" ) + +#define IA2_RELATION_LABEL_FOR ( L"labelFor" ) + +#define IA2_RELATION_LABELED_BY ( L"labelledBy" ) + +#define IA2_RELATION_LABELLED_BY ( L"labelledBy" ) + +#define IA2_RELATION_MEMBER_OF ( L"memberOf" ) + +#define IA2_RELATION_NEXT_TABBABLE ( L"nextTabbable" ) + +#define IA2_RELATION_NODE_CHILD_OF ( L"nodeChildOf" ) + +#define IA2_RELATION_NODE_PARENT_OF ( L"nodeParentOf" ) + +#define IA2_RELATION_PARENT_WINDOW_OF ( L"parentWindowOf" ) + +#define IA2_RELATION_POPUP_FOR ( L"popupFor" ) + +#define IA2_RELATION_PREVIOUS_TABBABLE ( L"previousTabbable" ) + +#define IA2_RELATION_SUBWINDOW_OF ( L"subwindowOf" ) + + + +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0000_v0_0_s_ifspec; + +#ifndef __IAccessibleRelation_INTERFACE_DEFINED__ +#define __IAccessibleRelation_INTERFACE_DEFINED__ + +/* interface IAccessibleRelation */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleRelation; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7CDF86EE-C3DA-496a-BDA4-281B336E1FDC") + IAccessibleRelation : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationType( + /* [retval][out] */ BSTR *relationType) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedRelationType( + /* [retval][out] */ BSTR *localizedRelationType) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nTargets( + /* [retval][out] */ long *nTargets) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_target( + /* [in] */ long targetIndex, + /* [retval][out] */ IUnknown **target) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_targets( + /* [in] */ long maxTargets, + /* [length_is][size_is][out] */ IUnknown **targets, + /* [retval][out] */ long *nTargets) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleRelationVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleRelation * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleRelation * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleRelation * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationType )( + IAccessibleRelation * This, + /* [retval][out] */ BSTR *relationType); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedRelationType )( + IAccessibleRelation * This, + /* [retval][out] */ BSTR *localizedRelationType); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nTargets )( + IAccessibleRelation * This, + /* [retval][out] */ long *nTargets); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_target )( + IAccessibleRelation * This, + /* [in] */ long targetIndex, + /* [retval][out] */ IUnknown **target); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_targets )( + IAccessibleRelation * This, + /* [in] */ long maxTargets, + /* [length_is][size_is][out] */ IUnknown **targets, + /* [retval][out] */ long *nTargets); + + END_INTERFACE + } IAccessibleRelationVtbl; + + interface IAccessibleRelation + { + CONST_VTBL struct IAccessibleRelationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleRelation_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleRelation_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleRelation_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleRelation_get_relationType(This,relationType) \ + ( (This)->lpVtbl -> get_relationType(This,relationType) ) + +#define IAccessibleRelation_get_localizedRelationType(This,localizedRelationType) \ + ( (This)->lpVtbl -> get_localizedRelationType(This,localizedRelationType) ) + +#define IAccessibleRelation_get_nTargets(This,nTargets) \ + ( (This)->lpVtbl -> get_nTargets(This,nTargets) ) + +#define IAccessibleRelation_get_target(This,targetIndex,target) \ + ( (This)->lpVtbl -> get_target(This,targetIndex,target) ) + +#define IAccessibleRelation_get_targets(This,maxTargets,targets,nTargets) \ + ( (This)->lpVtbl -> get_targets(This,maxTargets,targets,nTargets) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleRelation_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0001 */ +/* [local] */ + + +enum IA2Actions + { + IA2_ACTION_OPEN = -1, + IA2_ACTION_COMPLETE = -2, + IA2_ACTION_CLOSE = -3 + } ; + + +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0001_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0001_v0_0_s_ifspec; + +#ifndef __IAccessibleAction_INTERFACE_DEFINED__ +#define __IAccessibleAction_INTERFACE_DEFINED__ + +/* interface IAccessibleAction */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleAction; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("B70D9F59-3B5A-4dba-AB9E-22012F607DF5") + IAccessibleAction : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE nActions( + /* [retval][out] */ long *nActions) = 0; + + virtual HRESULT STDMETHODCALLTYPE doAction( + /* [in] */ long actionIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description( + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *description) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_keyBinding( + /* [in] */ long actionIndex, + /* [in] */ long nMaxBindings, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings, + /* [retval][out] */ long *nBindings) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_name( + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *name) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedName( + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *localizedName) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleActionVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleAction * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleAction * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleAction * This); + + HRESULT ( STDMETHODCALLTYPE *nActions )( + IAccessibleAction * This, + /* [retval][out] */ long *nActions); + + HRESULT ( STDMETHODCALLTYPE *doAction )( + IAccessibleAction * This, + /* [in] */ long actionIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )( + IAccessibleAction * This, + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *description); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )( + IAccessibleAction * This, + /* [in] */ long actionIndex, + /* [in] */ long nMaxBindings, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings, + /* [retval][out] */ long *nBindings); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )( + IAccessibleAction * This, + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *name); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )( + IAccessibleAction * This, + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *localizedName); + + END_INTERFACE + } IAccessibleActionVtbl; + + interface IAccessibleAction + { + CONST_VTBL struct IAccessibleActionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleAction_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleAction_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleAction_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleAction_nActions(This,nActions) \ + ( (This)->lpVtbl -> nActions(This,nActions) ) + +#define IAccessibleAction_doAction(This,actionIndex) \ + ( (This)->lpVtbl -> doAction(This,actionIndex) ) + +#define IAccessibleAction_get_description(This,actionIndex,description) \ + ( (This)->lpVtbl -> get_description(This,actionIndex,description) ) + +#define IAccessibleAction_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \ + ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) ) + +#define IAccessibleAction_get_name(This,actionIndex,name) \ + ( (This)->lpVtbl -> get_name(This,actionIndex,name) ) + +#define IAccessibleAction_get_localizedName(This,actionIndex,localizedName) \ + ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleAction_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0002 */ +/* [local] */ + + +enum IA2Role + { + IA2_ROLE_UNKNOWN = 0, + IA2_ROLE_CANVAS = 0x401, + IA2_ROLE_CAPTION = ( IA2_ROLE_CANVAS + 1 ) , + IA2_ROLE_CHECK_MENU_ITEM = ( IA2_ROLE_CAPTION + 1 ) , + IA2_ROLE_COLOR_CHOOSER = ( IA2_ROLE_CHECK_MENU_ITEM + 1 ) , + IA2_ROLE_DATE_EDITOR = ( IA2_ROLE_COLOR_CHOOSER + 1 ) , + IA2_ROLE_DESKTOP_ICON = ( IA2_ROLE_DATE_EDITOR + 1 ) , + IA2_ROLE_DESKTOP_PANE = ( IA2_ROLE_DESKTOP_ICON + 1 ) , + IA2_ROLE_DIRECTORY_PANE = ( IA2_ROLE_DESKTOP_PANE + 1 ) , + IA2_ROLE_EDITBAR = ( IA2_ROLE_DIRECTORY_PANE + 1 ) , + IA2_ROLE_EMBEDDED_OBJECT = ( IA2_ROLE_EDITBAR + 1 ) , + IA2_ROLE_ENDNOTE = ( IA2_ROLE_EMBEDDED_OBJECT + 1 ) , + IA2_ROLE_FILE_CHOOSER = ( IA2_ROLE_ENDNOTE + 1 ) , + IA2_ROLE_FONT_CHOOSER = ( IA2_ROLE_FILE_CHOOSER + 1 ) , + IA2_ROLE_FOOTER = ( IA2_ROLE_FONT_CHOOSER + 1 ) , + IA2_ROLE_FOOTNOTE = ( IA2_ROLE_FOOTER + 1 ) , + IA2_ROLE_FORM = ( IA2_ROLE_FOOTNOTE + 1 ) , + IA2_ROLE_FRAME = ( IA2_ROLE_FORM + 1 ) , + IA2_ROLE_GLASS_PANE = ( IA2_ROLE_FRAME + 1 ) , + IA2_ROLE_HEADER = ( IA2_ROLE_GLASS_PANE + 1 ) , + IA2_ROLE_HEADING = ( IA2_ROLE_HEADER + 1 ) , + IA2_ROLE_ICON = ( IA2_ROLE_HEADING + 1 ) , + IA2_ROLE_IMAGE_MAP = ( IA2_ROLE_ICON + 1 ) , + IA2_ROLE_INPUT_METHOD_WINDOW = ( IA2_ROLE_IMAGE_MAP + 1 ) , + IA2_ROLE_INTERNAL_FRAME = ( IA2_ROLE_INPUT_METHOD_WINDOW + 1 ) , + IA2_ROLE_LABEL = ( IA2_ROLE_INTERNAL_FRAME + 1 ) , + IA2_ROLE_LAYERED_PANE = ( IA2_ROLE_LABEL + 1 ) , + IA2_ROLE_NOTE = ( IA2_ROLE_LAYERED_PANE + 1 ) , + IA2_ROLE_OPTION_PANE = ( IA2_ROLE_NOTE + 1 ) , + IA2_ROLE_PAGE = ( IA2_ROLE_OPTION_PANE + 1 ) , + IA2_ROLE_PARAGRAPH = ( IA2_ROLE_PAGE + 1 ) , + IA2_ROLE_RADIO_MENU_ITEM = ( IA2_ROLE_PARAGRAPH + 1 ) , + IA2_ROLE_REDUNDANT_OBJECT = ( IA2_ROLE_RADIO_MENU_ITEM + 1 ) , + IA2_ROLE_ROOT_PANE = ( IA2_ROLE_REDUNDANT_OBJECT + 1 ) , + IA2_ROLE_RULER = ( IA2_ROLE_ROOT_PANE + 1 ) , + IA2_ROLE_SCROLL_PANE = ( IA2_ROLE_RULER + 1 ) , + IA2_ROLE_SECTION = ( IA2_ROLE_SCROLL_PANE + 1 ) , + IA2_ROLE_SHAPE = ( IA2_ROLE_SECTION + 1 ) , + IA2_ROLE_SPLIT_PANE = ( IA2_ROLE_SHAPE + 1 ) , + IA2_ROLE_TEAR_OFF_MENU = ( IA2_ROLE_SPLIT_PANE + 1 ) , + IA2_ROLE_TERMINAL = ( IA2_ROLE_TEAR_OFF_MENU + 1 ) , + IA2_ROLE_TEXT_FRAME = ( IA2_ROLE_TERMINAL + 1 ) , + IA2_ROLE_TOGGLE_BUTTON = ( IA2_ROLE_TEXT_FRAME + 1 ) , + IA2_ROLE_VIEW_PORT = ( IA2_ROLE_TOGGLE_BUTTON + 1 ) , + IA2_ROLE_COMPLEMENTARY_CONTENT = ( IA2_ROLE_VIEW_PORT + 1 ) + } ; +typedef long AccessibleStates; + + +enum IA2States + { + IA2_STATE_ACTIVE = 0x1, + IA2_STATE_ARMED = 0x2, + IA2_STATE_DEFUNCT = 0x4, + IA2_STATE_EDITABLE = 0x8, + IA2_STATE_HORIZONTAL = 0x10, + IA2_STATE_ICONIFIED = 0x20, + IA2_STATE_INVALID_ENTRY = 0x40, + IA2_STATE_MANAGES_DESCENDANTS = 0x80, + IA2_STATE_MODAL = 0x100, + IA2_STATE_MULTI_LINE = 0x200, + IA2_STATE_OPAQUE = 0x400, + IA2_STATE_REQUIRED = 0x800, + IA2_STATE_SELECTABLE_TEXT = 0x1000, + IA2_STATE_SINGLE_LINE = 0x2000, + IA2_STATE_STALE = 0x4000, + IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000, + IA2_STATE_TRANSIENT = 0x10000, + IA2_STATE_VERTICAL = 0x20000, + IA2_STATE_CHECKABLE = 0x40000, + IA2_STATE_PINNED = 0x80000 + } ; +typedef struct IA2Locale + { + BSTR language; + BSTR country; + BSTR variant; + } IA2Locale; + + + +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0002_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0002_v0_0_s_ifspec; + +#ifndef __IAccessible2_INTERFACE_DEFINED__ +#define __IAccessible2_INTERFACE_DEFINED__ + +/* interface IAccessible2 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessible2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("E89F726E-C4F4-4c19-BB19-B647D7FA8478") + IAccessible2 : public IAccessible + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRelations( + /* [retval][out] */ long *nRelations) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relation( + /* [in] */ long relationIndex, + /* [retval][out] */ IAccessibleRelation **relation) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relations( + /* [in] */ long maxRelations, + /* [length_is][size_is][out] */ IAccessibleRelation **relations, + /* [retval][out] */ long *nRelations) = 0; + + virtual HRESULT STDMETHODCALLTYPE role( + /* [retval][out] */ long *role) = 0; + + virtual HRESULT STDMETHODCALLTYPE scrollTo( + /* [in] */ enum IA2ScrollType scrollType) = 0; + + virtual HRESULT STDMETHODCALLTYPE scrollToPoint( + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_groupPosition( + /* [out] */ long *groupLevel, + /* [out] */ long *similarItemsInGroup, + /* [retval][out] */ long *positionInGroup) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_states( + /* [retval][out] */ AccessibleStates *states) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedRole( + /* [retval][out] */ BSTR *extendedRole) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedRole( + /* [retval][out] */ BSTR *localizedExtendedRole) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nExtendedStates( + /* [retval][out] */ long *nExtendedStates) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedStates( + /* [in] */ long maxExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates, + /* [retval][out] */ long *nExtendedStates) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedStates( + /* [in] */ long maxLocalizedExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates, + /* [retval][out] */ long *nLocalizedExtendedStates) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_uniqueID( + /* [retval][out] */ long *uniqueID) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_windowHandle( + /* [retval][out] */ HWND *windowHandle) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_indexInParent( + /* [retval][out] */ long *indexInParent) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locale( + /* [retval][out] */ IA2Locale *locale) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes( + /* [retval][out] */ BSTR *attributes) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessible2Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessible2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessible2 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessible2 * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAccessible2 * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAccessible2 * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAccessible2 * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAccessible2 * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( + IAccessible2 * This, + /* [retval][out] */ IDispatch **ppdispParent); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( + IAccessible2 * This, + /* [retval][out] */ long *pcountChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( + IAccessible2 * This, + /* [in] */ VARIANT varChild, + /* [retval][out] */ IDispatch **ppdispChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszName); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszValue); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDescription); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarRole); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarState); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszHelp); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( + IAccessible2 * This, + /* [out] */ BSTR *pszHelpFile, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ long *pidTopic); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszKeyboardShortcut); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( + IAccessible2 * This, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( + IAccessible2 * This, + /* [retval][out] */ VARIANT *pvarChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDefaultAction); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( + IAccessible2 * This, + /* [in] */ long flagsSelect, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( + IAccessible2 * This, + /* [out] */ long *pxLeft, + /* [out] */ long *pyTop, + /* [out] */ long *pcxWidth, + /* [out] */ long *pcyHeight, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( + IAccessible2 * This, + /* [in] */ long navDir, + /* [optional][in] */ VARIANT varStart, + /* [retval][out] */ VARIANT *pvarEndUpAt); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( + IAccessible2 * This, + /* [in] */ long xLeft, + /* [in] */ long yTop, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szName); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( + IAccessible2 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szValue); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )( + IAccessible2 * This, + /* [retval][out] */ long *nRelations); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )( + IAccessible2 * This, + /* [in] */ long relationIndex, + /* [retval][out] */ IAccessibleRelation **relation); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )( + IAccessible2 * This, + /* [in] */ long maxRelations, + /* [length_is][size_is][out] */ IAccessibleRelation **relations, + /* [retval][out] */ long *nRelations); + + HRESULT ( STDMETHODCALLTYPE *role )( + IAccessible2 * This, + /* [retval][out] */ long *role); + + HRESULT ( STDMETHODCALLTYPE *scrollTo )( + IAccessible2 * This, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( + IAccessible2 * This, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )( + IAccessible2 * This, + /* [out] */ long *groupLevel, + /* [out] */ long *similarItemsInGroup, + /* [retval][out] */ long *positionInGroup); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )( + IAccessible2 * This, + /* [retval][out] */ AccessibleStates *states); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )( + IAccessible2 * This, + /* [retval][out] */ BSTR *extendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )( + IAccessible2 * This, + /* [retval][out] */ BSTR *localizedExtendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )( + IAccessible2 * This, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )( + IAccessible2 * This, + /* [in] */ long maxExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )( + IAccessible2 * This, + /* [in] */ long maxLocalizedExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates, + /* [retval][out] */ long *nLocalizedExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )( + IAccessible2 * This, + /* [retval][out] */ long *uniqueID); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )( + IAccessible2 * This, + /* [retval][out] */ HWND *windowHandle); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )( + IAccessible2 * This, + /* [retval][out] */ long *indexInParent); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )( + IAccessible2 * This, + /* [retval][out] */ IA2Locale *locale); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessible2 * This, + /* [retval][out] */ BSTR *attributes); + + END_INTERFACE + } IAccessible2Vtbl; + + interface IAccessible2 + { + CONST_VTBL struct IAccessible2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessible2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessible2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessible2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessible2_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAccessible2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAccessible2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAccessible2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAccessible2_get_accParent(This,ppdispParent) \ + ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) + +#define IAccessible2_get_accChildCount(This,pcountChildren) \ + ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) + +#define IAccessible2_get_accChild(This,varChild,ppdispChild) \ + ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) + +#define IAccessible2_get_accName(This,varChild,pszName) \ + ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) + +#define IAccessible2_get_accValue(This,varChild,pszValue) \ + ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) + +#define IAccessible2_get_accDescription(This,varChild,pszDescription) \ + ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) + +#define IAccessible2_get_accRole(This,varChild,pvarRole) \ + ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) + +#define IAccessible2_get_accState(This,varChild,pvarState) \ + ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) + +#define IAccessible2_get_accHelp(This,varChild,pszHelp) \ + ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) + +#define IAccessible2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \ + ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) + +#define IAccessible2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \ + ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) + +#define IAccessible2_get_accFocus(This,pvarChild) \ + ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) + +#define IAccessible2_get_accSelection(This,pvarChildren) \ + ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) + +#define IAccessible2_get_accDefaultAction(This,varChild,pszDefaultAction) \ + ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) + +#define IAccessible2_accSelect(This,flagsSelect,varChild) \ + ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) + +#define IAccessible2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \ + ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) + +#define IAccessible2_accNavigate(This,navDir,varStart,pvarEndUpAt) \ + ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) + +#define IAccessible2_accHitTest(This,xLeft,yTop,pvarChild) \ + ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) + +#define IAccessible2_accDoDefaultAction(This,varChild) \ + ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) + +#define IAccessible2_put_accName(This,varChild,szName) \ + ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) + +#define IAccessible2_put_accValue(This,varChild,szValue) \ + ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) + + +#define IAccessible2_get_nRelations(This,nRelations) \ + ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) + +#define IAccessible2_get_relation(This,relationIndex,relation) \ + ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) + +#define IAccessible2_get_relations(This,maxRelations,relations,nRelations) \ + ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) + +#define IAccessible2_role(This,role) \ + ( (This)->lpVtbl -> role(This,role) ) + +#define IAccessible2_scrollTo(This,scrollType) \ + ( (This)->lpVtbl -> scrollTo(This,scrollType) ) + +#define IAccessible2_scrollToPoint(This,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) + +#define IAccessible2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \ + ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) + +#define IAccessible2_get_states(This,states) \ + ( (This)->lpVtbl -> get_states(This,states) ) + +#define IAccessible2_get_extendedRole(This,extendedRole) \ + ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) + +#define IAccessible2_get_localizedExtendedRole(This,localizedExtendedRole) \ + ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) + +#define IAccessible2_get_nExtendedStates(This,nExtendedStates) \ + ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) + +#define IAccessible2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \ + ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) + +#define IAccessible2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \ + ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) + +#define IAccessible2_get_uniqueID(This,uniqueID) \ + ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) + +#define IAccessible2_get_windowHandle(This,windowHandle) \ + ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) + +#define IAccessible2_get_indexInParent(This,indexInParent) \ + ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) + +#define IAccessible2_get_locale(This,locale) \ + ( (This)->lpVtbl -> get_locale(This,locale) ) + +#define IAccessible2_get_attributes(This,attributes) \ + ( (This)->lpVtbl -> get_attributes(This,attributes) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessible2_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessible2_2_INTERFACE_DEFINED__ +#define __IAccessible2_2_INTERFACE_DEFINED__ + +/* interface IAccessible2_2 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessible2_2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6C9430E9-299D-4E6F-BD01-A82A1E88D3FF") + IAccessible2_2 : public IAccessible2 + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attribute( + /* [in] */ BSTR name, + /* [retval][out] */ VARIANT *attribute) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleWithCaret( + /* [out] */ IUnknown **accessible, + /* [retval][out] */ long *caretOffset) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationTargetsOfType( + /* [in] */ BSTR type, + /* [in] */ long maxTargets, + /* [size_is][size_is][out] */ IUnknown ***targets, + /* [retval][out] */ long *nTargets) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessible2_2Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessible2_2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessible2_2 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessible2_2 * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAccessible2_2 * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAccessible2_2 * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAccessible2_2 * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAccessible2_2 * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( + IAccessible2_2 * This, + /* [retval][out] */ IDispatch **ppdispParent); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( + IAccessible2_2 * This, + /* [retval][out] */ long *pcountChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( + IAccessible2_2 * This, + /* [in] */ VARIANT varChild, + /* [retval][out] */ IDispatch **ppdispChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszName); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszValue); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDescription); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarRole); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarState); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszHelp); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( + IAccessible2_2 * This, + /* [out] */ BSTR *pszHelpFile, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ long *pidTopic); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszKeyboardShortcut); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( + IAccessible2_2 * This, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( + IAccessible2_2 * This, + /* [retval][out] */ VARIANT *pvarChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDefaultAction); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( + IAccessible2_2 * This, + /* [in] */ long flagsSelect, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( + IAccessible2_2 * This, + /* [out] */ long *pxLeft, + /* [out] */ long *pyTop, + /* [out] */ long *pcxWidth, + /* [out] */ long *pcyHeight, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( + IAccessible2_2 * This, + /* [in] */ long navDir, + /* [optional][in] */ VARIANT varStart, + /* [retval][out] */ VARIANT *pvarEndUpAt); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( + IAccessible2_2 * This, + /* [in] */ long xLeft, + /* [in] */ long yTop, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szName); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( + IAccessible2_2 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szValue); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )( + IAccessible2_2 * This, + /* [retval][out] */ long *nRelations); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )( + IAccessible2_2 * This, + /* [in] */ long relationIndex, + /* [retval][out] */ IAccessibleRelation **relation); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )( + IAccessible2_2 * This, + /* [in] */ long maxRelations, + /* [length_is][size_is][out] */ IAccessibleRelation **relations, + /* [retval][out] */ long *nRelations); + + HRESULT ( STDMETHODCALLTYPE *role )( + IAccessible2_2 * This, + /* [retval][out] */ long *role); + + HRESULT ( STDMETHODCALLTYPE *scrollTo )( + IAccessible2_2 * This, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( + IAccessible2_2 * This, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )( + IAccessible2_2 * This, + /* [out] */ long *groupLevel, + /* [out] */ long *similarItemsInGroup, + /* [retval][out] */ long *positionInGroup); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )( + IAccessible2_2 * This, + /* [retval][out] */ AccessibleStates *states); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )( + IAccessible2_2 * This, + /* [retval][out] */ BSTR *extendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )( + IAccessible2_2 * This, + /* [retval][out] */ BSTR *localizedExtendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )( + IAccessible2_2 * This, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )( + IAccessible2_2 * This, + /* [in] */ long maxExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )( + IAccessible2_2 * This, + /* [in] */ long maxLocalizedExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates, + /* [retval][out] */ long *nLocalizedExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )( + IAccessible2_2 * This, + /* [retval][out] */ long *uniqueID); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )( + IAccessible2_2 * This, + /* [retval][out] */ HWND *windowHandle); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )( + IAccessible2_2 * This, + /* [retval][out] */ long *indexInParent); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )( + IAccessible2_2 * This, + /* [retval][out] */ IA2Locale *locale); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessible2_2 * This, + /* [retval][out] */ BSTR *attributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )( + IAccessible2_2 * This, + /* [in] */ BSTR name, + /* [retval][out] */ VARIANT *attribute); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )( + IAccessible2_2 * This, + /* [out] */ IUnknown **accessible, + /* [retval][out] */ long *caretOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )( + IAccessible2_2 * This, + /* [in] */ BSTR type, + /* [in] */ long maxTargets, + /* [size_is][size_is][out] */ IUnknown ***targets, + /* [retval][out] */ long *nTargets); + + END_INTERFACE + } IAccessible2_2Vtbl; + + interface IAccessible2_2 + { + CONST_VTBL struct IAccessible2_2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessible2_2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessible2_2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessible2_2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessible2_2_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAccessible2_2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAccessible2_2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAccessible2_2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAccessible2_2_get_accParent(This,ppdispParent) \ + ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) + +#define IAccessible2_2_get_accChildCount(This,pcountChildren) \ + ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) + +#define IAccessible2_2_get_accChild(This,varChild,ppdispChild) \ + ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) + +#define IAccessible2_2_get_accName(This,varChild,pszName) \ + ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) + +#define IAccessible2_2_get_accValue(This,varChild,pszValue) \ + ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) + +#define IAccessible2_2_get_accDescription(This,varChild,pszDescription) \ + ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) + +#define IAccessible2_2_get_accRole(This,varChild,pvarRole) \ + ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) + +#define IAccessible2_2_get_accState(This,varChild,pvarState) \ + ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) + +#define IAccessible2_2_get_accHelp(This,varChild,pszHelp) \ + ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) + +#define IAccessible2_2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \ + ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) + +#define IAccessible2_2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \ + ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) + +#define IAccessible2_2_get_accFocus(This,pvarChild) \ + ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) + +#define IAccessible2_2_get_accSelection(This,pvarChildren) \ + ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) + +#define IAccessible2_2_get_accDefaultAction(This,varChild,pszDefaultAction) \ + ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) + +#define IAccessible2_2_accSelect(This,flagsSelect,varChild) \ + ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) + +#define IAccessible2_2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \ + ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) + +#define IAccessible2_2_accNavigate(This,navDir,varStart,pvarEndUpAt) \ + ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) + +#define IAccessible2_2_accHitTest(This,xLeft,yTop,pvarChild) \ + ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) + +#define IAccessible2_2_accDoDefaultAction(This,varChild) \ + ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) + +#define IAccessible2_2_put_accName(This,varChild,szName) \ + ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) + +#define IAccessible2_2_put_accValue(This,varChild,szValue) \ + ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) + + +#define IAccessible2_2_get_nRelations(This,nRelations) \ + ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) + +#define IAccessible2_2_get_relation(This,relationIndex,relation) \ + ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) + +#define IAccessible2_2_get_relations(This,maxRelations,relations,nRelations) \ + ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) + +#define IAccessible2_2_role(This,role) \ + ( (This)->lpVtbl -> role(This,role) ) + +#define IAccessible2_2_scrollTo(This,scrollType) \ + ( (This)->lpVtbl -> scrollTo(This,scrollType) ) + +#define IAccessible2_2_scrollToPoint(This,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) + +#define IAccessible2_2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \ + ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) + +#define IAccessible2_2_get_states(This,states) \ + ( (This)->lpVtbl -> get_states(This,states) ) + +#define IAccessible2_2_get_extendedRole(This,extendedRole) \ + ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) + +#define IAccessible2_2_get_localizedExtendedRole(This,localizedExtendedRole) \ + ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) + +#define IAccessible2_2_get_nExtendedStates(This,nExtendedStates) \ + ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) + +#define IAccessible2_2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \ + ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) + +#define IAccessible2_2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \ + ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) + +#define IAccessible2_2_get_uniqueID(This,uniqueID) \ + ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) + +#define IAccessible2_2_get_windowHandle(This,windowHandle) \ + ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) + +#define IAccessible2_2_get_indexInParent(This,indexInParent) \ + ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) + +#define IAccessible2_2_get_locale(This,locale) \ + ( (This)->lpVtbl -> get_locale(This,locale) ) + +#define IAccessible2_2_get_attributes(This,attributes) \ + ( (This)->lpVtbl -> get_attributes(This,attributes) ) + + +#define IAccessible2_2_get_attribute(This,name,attribute) \ + ( (This)->lpVtbl -> get_attribute(This,name,attribute) ) + +#define IAccessible2_2_get_accessibleWithCaret(This,accessible,caretOffset) \ + ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) ) + +#define IAccessible2_2_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) \ + ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessible2_2_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0004 */ +/* [local] */ + +typedef long IA2Color; + + + +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0004_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0004_v0_0_s_ifspec; + +#ifndef __IAccessibleComponent_INTERFACE_DEFINED__ +#define __IAccessibleComponent_INTERFACE_DEFINED__ + +/* interface IAccessibleComponent */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleComponent; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("1546D4B0-4C98-4bda-89AE-9A64748BDDE4") + IAccessibleComponent : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locationInParent( + /* [out] */ long *x, + /* [retval][out] */ long *y) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_foreground( + /* [retval][out] */ IA2Color *foreground) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_background( + /* [retval][out] */ IA2Color *background) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleComponentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleComponent * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleComponent * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleComponent * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locationInParent )( + IAccessibleComponent * This, + /* [out] */ long *x, + /* [retval][out] */ long *y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_foreground )( + IAccessibleComponent * This, + /* [retval][out] */ IA2Color *foreground); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_background )( + IAccessibleComponent * This, + /* [retval][out] */ IA2Color *background); + + END_INTERFACE + } IAccessibleComponentVtbl; + + interface IAccessibleComponent + { + CONST_VTBL struct IAccessibleComponentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleComponent_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleComponent_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleComponent_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleComponent_get_locationInParent(This,x,y) \ + ( (This)->lpVtbl -> get_locationInParent(This,x,y) ) + +#define IAccessibleComponent_get_foreground(This,foreground) \ + ( (This)->lpVtbl -> get_foreground(This,foreground) ) + +#define IAccessibleComponent_get_background(This,background) \ + ( (This)->lpVtbl -> get_background(This,background) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleComponent_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleValue_INTERFACE_DEFINED__ +#define __IAccessibleValue_INTERFACE_DEFINED__ + +/* interface IAccessibleValue */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleValue; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("35855B5B-C566-4fd0-A7B1-E65465600394") + IAccessibleValue : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentValue( + /* [retval][out] */ VARIANT *currentValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE setCurrentValue( + /* [in] */ VARIANT value) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_maximumValue( + /* [retval][out] */ VARIANT *maximumValue) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_minimumValue( + /* [retval][out] */ VARIANT *minimumValue) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleValueVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleValue * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleValue * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleValue * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentValue )( + IAccessibleValue * This, + /* [retval][out] */ VARIANT *currentValue); + + HRESULT ( STDMETHODCALLTYPE *setCurrentValue )( + IAccessibleValue * This, + /* [in] */ VARIANT value); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_maximumValue )( + IAccessibleValue * This, + /* [retval][out] */ VARIANT *maximumValue); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_minimumValue )( + IAccessibleValue * This, + /* [retval][out] */ VARIANT *minimumValue); + + END_INTERFACE + } IAccessibleValueVtbl; + + interface IAccessibleValue + { + CONST_VTBL struct IAccessibleValueVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleValue_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleValue_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleValue_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleValue_get_currentValue(This,currentValue) \ + ( (This)->lpVtbl -> get_currentValue(This,currentValue) ) + +#define IAccessibleValue_setCurrentValue(This,value) \ + ( (This)->lpVtbl -> setCurrentValue(This,value) ) + +#define IAccessibleValue_get_maximumValue(This,maximumValue) \ + ( (This)->lpVtbl -> get_maximumValue(This,maximumValue) ) + +#define IAccessibleValue_get_minimumValue(This,minimumValue) \ + ( (This)->lpVtbl -> get_minimumValue(This,minimumValue) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleValue_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0006 */ +/* [local] */ + +typedef struct IA2TextSegment + { + BSTR text; + long start; + long end; + } IA2TextSegment; + + +enum IA2TextBoundaryType + { + IA2_TEXT_BOUNDARY_CHAR = 0, + IA2_TEXT_BOUNDARY_WORD = ( IA2_TEXT_BOUNDARY_CHAR + 1 ) , + IA2_TEXT_BOUNDARY_SENTENCE = ( IA2_TEXT_BOUNDARY_WORD + 1 ) , + IA2_TEXT_BOUNDARY_PARAGRAPH = ( IA2_TEXT_BOUNDARY_SENTENCE + 1 ) , + IA2_TEXT_BOUNDARY_LINE = ( IA2_TEXT_BOUNDARY_PARAGRAPH + 1 ) , + IA2_TEXT_BOUNDARY_ALL = ( IA2_TEXT_BOUNDARY_LINE + 1 ) + } ; + + +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec; + +#ifndef __IAccessibleText_INTERFACE_DEFINED__ +#define __IAccessibleText_INTERFACE_DEFINED__ + +/* interface IAccessibleText */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleText; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B") + IAccessibleText : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE addSelection( + /* [in] */ long startOffset, + /* [in] */ long endOffset) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes( + /* [in] */ long offset, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *textAttributes) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caretOffset( + /* [retval][out] */ long *offset) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_characterExtents( + /* [in] */ long offset, + /* [in] */ enum IA2CoordinateType coordType, + /* [out] */ long *x, + /* [out] */ long *y, + /* [out] */ long *width, + /* [retval][out] */ long *height) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelections( + /* [retval][out] */ long *nSelections) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_offsetAtPoint( + /* [in] */ long x, + /* [in] */ long y, + /* [in] */ enum IA2CoordinateType coordType, + /* [retval][out] */ long *offset) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selection( + /* [in] */ long selectionIndex, + /* [out] */ long *startOffset, + /* [retval][out] */ long *endOffset) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_text( + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [retval][out] */ BSTR *text) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textBeforeOffset( + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAfterOffset( + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAtOffset( + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text) = 0; + + virtual HRESULT STDMETHODCALLTYPE removeSelection( + /* [in] */ long selectionIndex) = 0; + + virtual HRESULT STDMETHODCALLTYPE setCaretOffset( + /* [in] */ long offset) = 0; + + virtual HRESULT STDMETHODCALLTYPE setSelection( + /* [in] */ long selectionIndex, + /* [in] */ long startOffset, + /* [in] */ long endOffset) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nCharacters( + /* [retval][out] */ long *nCharacters) = 0; + + virtual HRESULT STDMETHODCALLTYPE scrollSubstringTo( + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2ScrollType scrollType) = 0; + + virtual HRESULT STDMETHODCALLTYPE scrollSubstringToPoint( + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_newText( + /* [retval][out] */ IA2TextSegment *newText) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_oldText( + /* [retval][out] */ IA2TextSegment *oldText) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleTextVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleText * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleText * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleText * This); + + HRESULT ( STDMETHODCALLTYPE *addSelection )( + IAccessibleText * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessibleText * This, + /* [in] */ long offset, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *textAttributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )( + IAccessibleText * This, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )( + IAccessibleText * This, + /* [in] */ long offset, + /* [in] */ enum IA2CoordinateType coordType, + /* [out] */ long *x, + /* [out] */ long *y, + /* [out] */ long *width, + /* [retval][out] */ long *height); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )( + IAccessibleText * This, + /* [retval][out] */ long *nSelections); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )( + IAccessibleText * This, + /* [in] */ long x, + /* [in] */ long y, + /* [in] */ enum IA2CoordinateType coordType, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )( + IAccessibleText * This, + /* [in] */ long selectionIndex, + /* [out] */ long *startOffset, + /* [retval][out] */ long *endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )( + IAccessibleText * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )( + IAccessibleText * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )( + IAccessibleText * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )( + IAccessibleText * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + HRESULT ( STDMETHODCALLTYPE *removeSelection )( + IAccessibleText * This, + /* [in] */ long selectionIndex); + + HRESULT ( STDMETHODCALLTYPE *setCaretOffset )( + IAccessibleText * This, + /* [in] */ long offset); + + HRESULT ( STDMETHODCALLTYPE *setSelection )( + IAccessibleText * This, + /* [in] */ long selectionIndex, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )( + IAccessibleText * This, + /* [retval][out] */ long *nCharacters); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )( + IAccessibleText * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )( + IAccessibleText * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )( + IAccessibleText * This, + /* [retval][out] */ IA2TextSegment *newText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )( + IAccessibleText * This, + /* [retval][out] */ IA2TextSegment *oldText); + + END_INTERFACE + } IAccessibleTextVtbl; + + interface IAccessibleText + { + CONST_VTBL struct IAccessibleTextVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleText_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleText_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleText_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleText_addSelection(This,startOffset,endOffset) \ + ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) ) + +#define IAccessibleText_get_attributes(This,offset,startOffset,endOffset,textAttributes) \ + ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) ) + +#define IAccessibleText_get_caretOffset(This,offset) \ + ( (This)->lpVtbl -> get_caretOffset(This,offset) ) + +#define IAccessibleText_get_characterExtents(This,offset,coordType,x,y,width,height) \ + ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) ) + +#define IAccessibleText_get_nSelections(This,nSelections) \ + ( (This)->lpVtbl -> get_nSelections(This,nSelections) ) + +#define IAccessibleText_get_offsetAtPoint(This,x,y,coordType,offset) \ + ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) ) + +#define IAccessibleText_get_selection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleText_get_text(This,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) ) + +#define IAccessibleText_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleText_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleText_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleText_removeSelection(This,selectionIndex) \ + ( (This)->lpVtbl -> removeSelection(This,selectionIndex) ) + +#define IAccessibleText_setCaretOffset(This,offset) \ + ( (This)->lpVtbl -> setCaretOffset(This,offset) ) + +#define IAccessibleText_setSelection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleText_get_nCharacters(This,nCharacters) \ + ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) ) + +#define IAccessibleText_scrollSubstringTo(This,startIndex,endIndex,scrollType) \ + ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) ) + +#define IAccessibleText_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) ) + +#define IAccessibleText_get_newText(This,newText) \ + ( (This)->lpVtbl -> get_newText(This,newText) ) + +#define IAccessibleText_get_oldText(This,oldText) \ + ( (This)->lpVtbl -> get_oldText(This,oldText) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleText_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleText2_INTERFACE_DEFINED__ +#define __IAccessibleText2_INTERFACE_DEFINED__ + +/* interface IAccessibleText2 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleText2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("9690A9CC-5C80-4DF5-852E-2D5AE4189A54") + IAccessibleText2 : public IAccessibleText + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributeRange( + /* [in] */ long offset, + /* [in] */ BSTR filter, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *attributeValues) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleText2Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleText2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleText2 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleText2 * This); + + HRESULT ( STDMETHODCALLTYPE *addSelection )( + IAccessibleText2 * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessibleText2 * This, + /* [in] */ long offset, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *textAttributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )( + IAccessibleText2 * This, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )( + IAccessibleText2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2CoordinateType coordType, + /* [out] */ long *x, + /* [out] */ long *y, + /* [out] */ long *width, + /* [retval][out] */ long *height); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )( + IAccessibleText2 * This, + /* [retval][out] */ long *nSelections); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )( + IAccessibleText2 * This, + /* [in] */ long x, + /* [in] */ long y, + /* [in] */ enum IA2CoordinateType coordType, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )( + IAccessibleText2 * This, + /* [in] */ long selectionIndex, + /* [out] */ long *startOffset, + /* [retval][out] */ long *endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )( + IAccessibleText2 * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )( + IAccessibleText2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )( + IAccessibleText2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )( + IAccessibleText2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + HRESULT ( STDMETHODCALLTYPE *removeSelection )( + IAccessibleText2 * This, + /* [in] */ long selectionIndex); + + HRESULT ( STDMETHODCALLTYPE *setCaretOffset )( + IAccessibleText2 * This, + /* [in] */ long offset); + + HRESULT ( STDMETHODCALLTYPE *setSelection )( + IAccessibleText2 * This, + /* [in] */ long selectionIndex, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )( + IAccessibleText2 * This, + /* [retval][out] */ long *nCharacters); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )( + IAccessibleText2 * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )( + IAccessibleText2 * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )( + IAccessibleText2 * This, + /* [retval][out] */ IA2TextSegment *newText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )( + IAccessibleText2 * This, + /* [retval][out] */ IA2TextSegment *oldText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributeRange )( + IAccessibleText2 * This, + /* [in] */ long offset, + /* [in] */ BSTR filter, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *attributeValues); + + END_INTERFACE + } IAccessibleText2Vtbl; + + interface IAccessibleText2 + { + CONST_VTBL struct IAccessibleText2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleText2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleText2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleText2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleText2_addSelection(This,startOffset,endOffset) \ + ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) ) + +#define IAccessibleText2_get_attributes(This,offset,startOffset,endOffset,textAttributes) \ + ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) ) + +#define IAccessibleText2_get_caretOffset(This,offset) \ + ( (This)->lpVtbl -> get_caretOffset(This,offset) ) + +#define IAccessibleText2_get_characterExtents(This,offset,coordType,x,y,width,height) \ + ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) ) + +#define IAccessibleText2_get_nSelections(This,nSelections) \ + ( (This)->lpVtbl -> get_nSelections(This,nSelections) ) + +#define IAccessibleText2_get_offsetAtPoint(This,x,y,coordType,offset) \ + ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) ) + +#define IAccessibleText2_get_selection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleText2_get_text(This,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) ) + +#define IAccessibleText2_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleText2_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleText2_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleText2_removeSelection(This,selectionIndex) \ + ( (This)->lpVtbl -> removeSelection(This,selectionIndex) ) + +#define IAccessibleText2_setCaretOffset(This,offset) \ + ( (This)->lpVtbl -> setCaretOffset(This,offset) ) + +#define IAccessibleText2_setSelection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleText2_get_nCharacters(This,nCharacters) \ + ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) ) + +#define IAccessibleText2_scrollSubstringTo(This,startIndex,endIndex,scrollType) \ + ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) ) + +#define IAccessibleText2_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) ) + +#define IAccessibleText2_get_newText(This,newText) \ + ( (This)->lpVtbl -> get_newText(This,newText) ) + +#define IAccessibleText2_get_oldText(This,oldText) \ + ( (This)->lpVtbl -> get_oldText(This,oldText) ) + + +#define IAccessibleText2_get_attributeRange(This,offset,filter,startOffset,endOffset,attributeValues) \ + ( (This)->lpVtbl -> get_attributeRange(This,offset,filter,startOffset,endOffset,attributeValues) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleText2_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleEditableText_INTERFACE_DEFINED__ +#define __IAccessibleEditableText_INTERFACE_DEFINED__ + +/* interface IAccessibleEditableText */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleEditableText; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("A59AA09A-7011-4b65-939D-32B1FB5547E3") + IAccessibleEditableText : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE copyText( + /* [in] */ long startOffset, + /* [in] */ long endOffset) = 0; + + virtual HRESULT STDMETHODCALLTYPE deleteText( + /* [in] */ long startOffset, + /* [in] */ long endOffset) = 0; + + virtual HRESULT STDMETHODCALLTYPE insertText( + /* [in] */ long offset, + /* [in] */ BSTR *text) = 0; + + virtual HRESULT STDMETHODCALLTYPE cutText( + /* [in] */ long startOffset, + /* [in] */ long endOffset) = 0; + + virtual HRESULT STDMETHODCALLTYPE pasteText( + /* [in] */ long offset) = 0; + + virtual HRESULT STDMETHODCALLTYPE replaceText( + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [in] */ BSTR *text) = 0; + + virtual HRESULT STDMETHODCALLTYPE setAttributes( + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [in] */ BSTR *attributes) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleEditableTextVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleEditableText * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleEditableText * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleEditableText * This); + + HRESULT ( STDMETHODCALLTYPE *copyText )( + IAccessibleEditableText * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + HRESULT ( STDMETHODCALLTYPE *deleteText )( + IAccessibleEditableText * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + HRESULT ( STDMETHODCALLTYPE *insertText )( + IAccessibleEditableText * This, + /* [in] */ long offset, + /* [in] */ BSTR *text); + + HRESULT ( STDMETHODCALLTYPE *cutText )( + IAccessibleEditableText * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + HRESULT ( STDMETHODCALLTYPE *pasteText )( + IAccessibleEditableText * This, + /* [in] */ long offset); + + HRESULT ( STDMETHODCALLTYPE *replaceText )( + IAccessibleEditableText * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [in] */ BSTR *text); + + HRESULT ( STDMETHODCALLTYPE *setAttributes )( + IAccessibleEditableText * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [in] */ BSTR *attributes); + + END_INTERFACE + } IAccessibleEditableTextVtbl; + + interface IAccessibleEditableText + { + CONST_VTBL struct IAccessibleEditableTextVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleEditableText_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleEditableText_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleEditableText_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleEditableText_copyText(This,startOffset,endOffset) \ + ( (This)->lpVtbl -> copyText(This,startOffset,endOffset) ) + +#define IAccessibleEditableText_deleteText(This,startOffset,endOffset) \ + ( (This)->lpVtbl -> deleteText(This,startOffset,endOffset) ) + +#define IAccessibleEditableText_insertText(This,offset,text) \ + ( (This)->lpVtbl -> insertText(This,offset,text) ) + +#define IAccessibleEditableText_cutText(This,startOffset,endOffset) \ + ( (This)->lpVtbl -> cutText(This,startOffset,endOffset) ) + +#define IAccessibleEditableText_pasteText(This,offset) \ + ( (This)->lpVtbl -> pasteText(This,offset) ) + +#define IAccessibleEditableText_replaceText(This,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> replaceText(This,startOffset,endOffset,text) ) + +#define IAccessibleEditableText_setAttributes(This,startOffset,endOffset,attributes) \ + ( (This)->lpVtbl -> setAttributes(This,startOffset,endOffset,attributes) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleEditableText_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleHyperlink_INTERFACE_DEFINED__ +#define __IAccessibleHyperlink_INTERFACE_DEFINED__ + +/* interface IAccessibleHyperlink */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleHyperlink; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("01C20F2B-3DD2-400f-949F-AD00BDAB1D41") + IAccessibleHyperlink : public IAccessibleAction + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchor( + /* [in] */ long index, + /* [retval][out] */ VARIANT *anchor) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget( + /* [in] */ long index, + /* [retval][out] */ VARIANT *anchorTarget) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_startIndex( + /* [retval][out] */ long *index) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_endIndex( + /* [retval][out] */ long *index) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_valid( + /* [retval][out] */ boolean *valid) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleHyperlinkVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleHyperlink * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleHyperlink * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleHyperlink * This); + + HRESULT ( STDMETHODCALLTYPE *nActions )( + IAccessibleHyperlink * This, + /* [retval][out] */ long *nActions); + + HRESULT ( STDMETHODCALLTYPE *doAction )( + IAccessibleHyperlink * This, + /* [in] */ long actionIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )( + IAccessibleHyperlink * This, + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *description); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )( + IAccessibleHyperlink * This, + /* [in] */ long actionIndex, + /* [in] */ long nMaxBindings, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings, + /* [retval][out] */ long *nBindings); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )( + IAccessibleHyperlink * This, + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *name); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )( + IAccessibleHyperlink * This, + /* [in] */ long actionIndex, + /* [retval][out] */ BSTR *localizedName); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchor )( + IAccessibleHyperlink * This, + /* [in] */ long index, + /* [retval][out] */ VARIANT *anchor); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )( + IAccessibleHyperlink * This, + /* [in] */ long index, + /* [retval][out] */ VARIANT *anchorTarget); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_startIndex )( + IAccessibleHyperlink * This, + /* [retval][out] */ long *index); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_endIndex )( + IAccessibleHyperlink * This, + /* [retval][out] */ long *index); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_valid )( + IAccessibleHyperlink * This, + /* [retval][out] */ boolean *valid); + + END_INTERFACE + } IAccessibleHyperlinkVtbl; + + interface IAccessibleHyperlink + { + CONST_VTBL struct IAccessibleHyperlinkVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleHyperlink_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleHyperlink_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleHyperlink_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleHyperlink_nActions(This,nActions) \ + ( (This)->lpVtbl -> nActions(This,nActions) ) + +#define IAccessibleHyperlink_doAction(This,actionIndex) \ + ( (This)->lpVtbl -> doAction(This,actionIndex) ) + +#define IAccessibleHyperlink_get_description(This,actionIndex,description) \ + ( (This)->lpVtbl -> get_description(This,actionIndex,description) ) + +#define IAccessibleHyperlink_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \ + ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) ) + +#define IAccessibleHyperlink_get_name(This,actionIndex,name) \ + ( (This)->lpVtbl -> get_name(This,actionIndex,name) ) + +#define IAccessibleHyperlink_get_localizedName(This,actionIndex,localizedName) \ + ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) ) + + +#define IAccessibleHyperlink_get_anchor(This,index,anchor) \ + ( (This)->lpVtbl -> get_anchor(This,index,anchor) ) + +#define IAccessibleHyperlink_get_anchorTarget(This,index,anchorTarget) \ + ( (This)->lpVtbl -> get_anchorTarget(This,index,anchorTarget) ) + +#define IAccessibleHyperlink_get_startIndex(This,index) \ + ( (This)->lpVtbl -> get_startIndex(This,index) ) + +#define IAccessibleHyperlink_get_endIndex(This,index) \ + ( (This)->lpVtbl -> get_endIndex(This,index) ) + +#define IAccessibleHyperlink_get_valid(This,valid) \ + ( (This)->lpVtbl -> get_valid(This,valid) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleHyperlink_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleHypertext_INTERFACE_DEFINED__ +#define __IAccessibleHypertext_INTERFACE_DEFINED__ + +/* interface IAccessibleHypertext */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleHypertext; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6B4F8BBF-F1F2-418a-B35E-A195BC4103B9") + IAccessibleHypertext : public IAccessibleText + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nHyperlinks( + /* [retval][out] */ long *hyperlinkCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlink( + /* [in] */ long index, + /* [retval][out] */ IAccessibleHyperlink **hyperlink) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinkIndex( + /* [in] */ long charIndex, + /* [retval][out] */ long *hyperlinkIndex) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleHypertextVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleHypertext * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleHypertext * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleHypertext * This); + + HRESULT ( STDMETHODCALLTYPE *addSelection )( + IAccessibleHypertext * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessibleHypertext * This, + /* [in] */ long offset, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *textAttributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )( + IAccessibleHypertext * This, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )( + IAccessibleHypertext * This, + /* [in] */ long offset, + /* [in] */ enum IA2CoordinateType coordType, + /* [out] */ long *x, + /* [out] */ long *y, + /* [out] */ long *width, + /* [retval][out] */ long *height); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )( + IAccessibleHypertext * This, + /* [retval][out] */ long *nSelections); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )( + IAccessibleHypertext * This, + /* [in] */ long x, + /* [in] */ long y, + /* [in] */ enum IA2CoordinateType coordType, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )( + IAccessibleHypertext * This, + /* [in] */ long selectionIndex, + /* [out] */ long *startOffset, + /* [retval][out] */ long *endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )( + IAccessibleHypertext * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )( + IAccessibleHypertext * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )( + IAccessibleHypertext * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )( + IAccessibleHypertext * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + HRESULT ( STDMETHODCALLTYPE *removeSelection )( + IAccessibleHypertext * This, + /* [in] */ long selectionIndex); + + HRESULT ( STDMETHODCALLTYPE *setCaretOffset )( + IAccessibleHypertext * This, + /* [in] */ long offset); + + HRESULT ( STDMETHODCALLTYPE *setSelection )( + IAccessibleHypertext * This, + /* [in] */ long selectionIndex, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )( + IAccessibleHypertext * This, + /* [retval][out] */ long *nCharacters); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )( + IAccessibleHypertext * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )( + IAccessibleHypertext * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )( + IAccessibleHypertext * This, + /* [retval][out] */ IA2TextSegment *newText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )( + IAccessibleHypertext * This, + /* [retval][out] */ IA2TextSegment *oldText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )( + IAccessibleHypertext * This, + /* [retval][out] */ long *hyperlinkCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )( + IAccessibleHypertext * This, + /* [in] */ long index, + /* [retval][out] */ IAccessibleHyperlink **hyperlink); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )( + IAccessibleHypertext * This, + /* [in] */ long charIndex, + /* [retval][out] */ long *hyperlinkIndex); + + END_INTERFACE + } IAccessibleHypertextVtbl; + + interface IAccessibleHypertext + { + CONST_VTBL struct IAccessibleHypertextVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleHypertext_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleHypertext_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleHypertext_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleHypertext_addSelection(This,startOffset,endOffset) \ + ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) ) + +#define IAccessibleHypertext_get_attributes(This,offset,startOffset,endOffset,textAttributes) \ + ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) ) + +#define IAccessibleHypertext_get_caretOffset(This,offset) \ + ( (This)->lpVtbl -> get_caretOffset(This,offset) ) + +#define IAccessibleHypertext_get_characterExtents(This,offset,coordType,x,y,width,height) \ + ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) ) + +#define IAccessibleHypertext_get_nSelections(This,nSelections) \ + ( (This)->lpVtbl -> get_nSelections(This,nSelections) ) + +#define IAccessibleHypertext_get_offsetAtPoint(This,x,y,coordType,offset) \ + ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) ) + +#define IAccessibleHypertext_get_selection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleHypertext_get_text(This,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) ) + +#define IAccessibleHypertext_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleHypertext_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleHypertext_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleHypertext_removeSelection(This,selectionIndex) \ + ( (This)->lpVtbl -> removeSelection(This,selectionIndex) ) + +#define IAccessibleHypertext_setCaretOffset(This,offset) \ + ( (This)->lpVtbl -> setCaretOffset(This,offset) ) + +#define IAccessibleHypertext_setSelection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleHypertext_get_nCharacters(This,nCharacters) \ + ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) ) + +#define IAccessibleHypertext_scrollSubstringTo(This,startIndex,endIndex,scrollType) \ + ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) ) + +#define IAccessibleHypertext_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) ) + +#define IAccessibleHypertext_get_newText(This,newText) \ + ( (This)->lpVtbl -> get_newText(This,newText) ) + +#define IAccessibleHypertext_get_oldText(This,oldText) \ + ( (This)->lpVtbl -> get_oldText(This,oldText) ) + + +#define IAccessibleHypertext_get_nHyperlinks(This,hyperlinkCount) \ + ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) ) + +#define IAccessibleHypertext_get_hyperlink(This,index,hyperlink) \ + ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) ) + +#define IAccessibleHypertext_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \ + ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleHypertext_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleHypertext2_INTERFACE_DEFINED__ +#define __IAccessibleHypertext2_INTERFACE_DEFINED__ + +/* interface IAccessibleHypertext2 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleHypertext2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("CF64D89F-8287-4B44-8501-A827453A6077") + IAccessibleHypertext2 : public IAccessibleHypertext + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinks( + /* [size_is][size_is][out] */ IAccessibleHyperlink ***hyperlinks, + /* [retval][out] */ long *nHyperlinks) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleHypertext2Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleHypertext2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleHypertext2 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleHypertext2 * This); + + HRESULT ( STDMETHODCALLTYPE *addSelection )( + IAccessibleHypertext2 * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessibleHypertext2 * This, + /* [in] */ long offset, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *textAttributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )( + IAccessibleHypertext2 * This, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )( + IAccessibleHypertext2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2CoordinateType coordType, + /* [out] */ long *x, + /* [out] */ long *y, + /* [out] */ long *width, + /* [retval][out] */ long *height); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )( + IAccessibleHypertext2 * This, + /* [retval][out] */ long *nSelections); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )( + IAccessibleHypertext2 * This, + /* [in] */ long x, + /* [in] */ long y, + /* [in] */ enum IA2CoordinateType coordType, + /* [retval][out] */ long *offset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )( + IAccessibleHypertext2 * This, + /* [in] */ long selectionIndex, + /* [out] */ long *startOffset, + /* [retval][out] */ long *endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )( + IAccessibleHypertext2 * This, + /* [in] */ long startOffset, + /* [in] */ long endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )( + IAccessibleHypertext2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )( + IAccessibleHypertext2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )( + IAccessibleHypertext2 * This, + /* [in] */ long offset, + /* [in] */ enum IA2TextBoundaryType boundaryType, + /* [out] */ long *startOffset, + /* [out] */ long *endOffset, + /* [retval][out] */ BSTR *text); + + HRESULT ( STDMETHODCALLTYPE *removeSelection )( + IAccessibleHypertext2 * This, + /* [in] */ long selectionIndex); + + HRESULT ( STDMETHODCALLTYPE *setCaretOffset )( + IAccessibleHypertext2 * This, + /* [in] */ long offset); + + HRESULT ( STDMETHODCALLTYPE *setSelection )( + IAccessibleHypertext2 * This, + /* [in] */ long selectionIndex, + /* [in] */ long startOffset, + /* [in] */ long endOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )( + IAccessibleHypertext2 * This, + /* [retval][out] */ long *nCharacters); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )( + IAccessibleHypertext2 * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )( + IAccessibleHypertext2 * This, + /* [in] */ long startIndex, + /* [in] */ long endIndex, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )( + IAccessibleHypertext2 * This, + /* [retval][out] */ IA2TextSegment *newText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )( + IAccessibleHypertext2 * This, + /* [retval][out] */ IA2TextSegment *oldText); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )( + IAccessibleHypertext2 * This, + /* [retval][out] */ long *hyperlinkCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )( + IAccessibleHypertext2 * This, + /* [in] */ long index, + /* [retval][out] */ IAccessibleHyperlink **hyperlink); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )( + IAccessibleHypertext2 * This, + /* [in] */ long charIndex, + /* [retval][out] */ long *hyperlinkIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinks )( + IAccessibleHypertext2 * This, + /* [size_is][size_is][out] */ IAccessibleHyperlink ***hyperlinks, + /* [retval][out] */ long *nHyperlinks); + + END_INTERFACE + } IAccessibleHypertext2Vtbl; + + interface IAccessibleHypertext2 + { + CONST_VTBL struct IAccessibleHypertext2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleHypertext2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleHypertext2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleHypertext2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleHypertext2_addSelection(This,startOffset,endOffset) \ + ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) ) + +#define IAccessibleHypertext2_get_attributes(This,offset,startOffset,endOffset,textAttributes) \ + ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) ) + +#define IAccessibleHypertext2_get_caretOffset(This,offset) \ + ( (This)->lpVtbl -> get_caretOffset(This,offset) ) + +#define IAccessibleHypertext2_get_characterExtents(This,offset,coordType,x,y,width,height) \ + ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) ) + +#define IAccessibleHypertext2_get_nSelections(This,nSelections) \ + ( (This)->lpVtbl -> get_nSelections(This,nSelections) ) + +#define IAccessibleHypertext2_get_offsetAtPoint(This,x,y,coordType,offset) \ + ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) ) + +#define IAccessibleHypertext2_get_selection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleHypertext2_get_text(This,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) ) + +#define IAccessibleHypertext2_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleHypertext2_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleHypertext2_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \ + ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) ) + +#define IAccessibleHypertext2_removeSelection(This,selectionIndex) \ + ( (This)->lpVtbl -> removeSelection(This,selectionIndex) ) + +#define IAccessibleHypertext2_setCaretOffset(This,offset) \ + ( (This)->lpVtbl -> setCaretOffset(This,offset) ) + +#define IAccessibleHypertext2_setSelection(This,selectionIndex,startOffset,endOffset) \ + ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) ) + +#define IAccessibleHypertext2_get_nCharacters(This,nCharacters) \ + ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) ) + +#define IAccessibleHypertext2_scrollSubstringTo(This,startIndex,endIndex,scrollType) \ + ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) ) + +#define IAccessibleHypertext2_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) ) + +#define IAccessibleHypertext2_get_newText(This,newText) \ + ( (This)->lpVtbl -> get_newText(This,newText) ) + +#define IAccessibleHypertext2_get_oldText(This,oldText) \ + ( (This)->lpVtbl -> get_oldText(This,oldText) ) + + +#define IAccessibleHypertext2_get_nHyperlinks(This,hyperlinkCount) \ + ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) ) + +#define IAccessibleHypertext2_get_hyperlink(This,index,hyperlink) \ + ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) ) + +#define IAccessibleHypertext2_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \ + ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) ) + + +#define IAccessibleHypertext2_get_hyperlinks(This,hyperlinks,nHyperlinks) \ + ( (This)->lpVtbl -> get_hyperlinks(This,hyperlinks,nHyperlinks) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleHypertext2_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleTable_INTERFACE_DEFINED__ +#define __IAccessibleTable_INTERFACE_DEFINED__ + +/* interface IAccessibleTable */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleTable; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("35AD8070-C20C-4fb4-B094-F4F7275DD469") + IAccessibleTable : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleAt( + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ IUnknown **accessible) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption( + /* [retval][out] */ IUnknown **accessible) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_childIndex( + /* [in] */ long rowIndex, + /* [in] */ long columnIndex, + /* [retval][out] */ long *cellIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription( + /* [in] */ long column, + /* [retval][out] */ BSTR *description) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtentAt( + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ long *nColumnsSpanned) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeader( + /* [out] */ IAccessibleTable **accessibleTable, + /* [retval][out] */ long *startingRowIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex( + /* [in] */ long cellIndex, + /* [retval][out] */ long *columnIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns( + /* [retval][out] */ long *columnCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows( + /* [retval][out] */ long *rowCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedChildren( + /* [retval][out] */ long *cellCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns( + /* [retval][out] */ long *columnCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows( + /* [retval][out] */ long *rowCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription( + /* [in] */ long row, + /* [retval][out] */ BSTR *description) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtentAt( + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ long *nRowsSpanned) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeader( + /* [out] */ IAccessibleTable **accessibleTable, + /* [retval][out] */ long *startingColumnIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex( + /* [in] */ long cellIndex, + /* [retval][out] */ long *rowIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedChildren( + /* [in] */ long maxChildren, + /* [length_is][length_is][size_is][size_is][out] */ long **children, + /* [retval][out] */ long *nChildren) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns( + /* [in] */ long maxColumns, + /* [length_is][length_is][size_is][size_is][out] */ long **columns, + /* [retval][out] */ long *nColumns) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows( + /* [in] */ long maxRows, + /* [length_is][length_is][size_is][size_is][out] */ long **rows, + /* [retval][out] */ long *nRows) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary( + /* [retval][out] */ IUnknown **accessible) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected( + /* [in] */ long column, + /* [retval][out] */ boolean *isSelected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected( + /* [in] */ long row, + /* [retval][out] */ boolean *isSelected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected( + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ boolean *isSelected) = 0; + + virtual HRESULT STDMETHODCALLTYPE selectRow( + /* [in] */ long row) = 0; + + virtual HRESULT STDMETHODCALLTYPE selectColumn( + /* [in] */ long column) = 0; + + virtual HRESULT STDMETHODCALLTYPE unselectRow( + /* [in] */ long row) = 0; + + virtual HRESULT STDMETHODCALLTYPE unselectColumn( + /* [in] */ long column) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtentsAtIndex( + /* [in] */ long index, + /* [out] */ long *row, + /* [out] */ long *column, + /* [out] */ long *rowExtents, + /* [out] */ long *columnExtents, + /* [retval][out] */ boolean *isSelected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange( + /* [retval][out] */ IA2TableModelChange *modelChange) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleTableVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleTable * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleTable * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleTable * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleAt )( + IAccessibleTable * This, + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ IUnknown **accessible); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )( + IAccessibleTable * This, + /* [retval][out] */ IUnknown **accessible); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_childIndex )( + IAccessibleTable * This, + /* [in] */ long rowIndex, + /* [in] */ long columnIndex, + /* [retval][out] */ long *cellIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )( + IAccessibleTable * This, + /* [in] */ long column, + /* [retval][out] */ BSTR *description); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtentAt )( + IAccessibleTable * This, + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ long *nColumnsSpanned); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeader )( + IAccessibleTable * This, + /* [out] */ IAccessibleTable **accessibleTable, + /* [retval][out] */ long *startingRowIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )( + IAccessibleTable * This, + /* [in] */ long cellIndex, + /* [retval][out] */ long *columnIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )( + IAccessibleTable * This, + /* [retval][out] */ long *columnCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )( + IAccessibleTable * This, + /* [retval][out] */ long *rowCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedChildren )( + IAccessibleTable * This, + /* [retval][out] */ long *cellCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )( + IAccessibleTable * This, + /* [retval][out] */ long *columnCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )( + IAccessibleTable * This, + /* [retval][out] */ long *rowCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )( + IAccessibleTable * This, + /* [in] */ long row, + /* [retval][out] */ BSTR *description); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtentAt )( + IAccessibleTable * This, + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ long *nRowsSpanned); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeader )( + IAccessibleTable * This, + /* [out] */ IAccessibleTable **accessibleTable, + /* [retval][out] */ long *startingColumnIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )( + IAccessibleTable * This, + /* [in] */ long cellIndex, + /* [retval][out] */ long *rowIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedChildren )( + IAccessibleTable * This, + /* [in] */ long maxChildren, + /* [length_is][length_is][size_is][size_is][out] */ long **children, + /* [retval][out] */ long *nChildren); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )( + IAccessibleTable * This, + /* [in] */ long maxColumns, + /* [length_is][length_is][size_is][size_is][out] */ long **columns, + /* [retval][out] */ long *nColumns); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )( + IAccessibleTable * This, + /* [in] */ long maxRows, + /* [length_is][length_is][size_is][size_is][out] */ long **rows, + /* [retval][out] */ long *nRows); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )( + IAccessibleTable * This, + /* [retval][out] */ IUnknown **accessible); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )( + IAccessibleTable * This, + /* [in] */ long column, + /* [retval][out] */ boolean *isSelected); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )( + IAccessibleTable * This, + /* [in] */ long row, + /* [retval][out] */ boolean *isSelected); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )( + IAccessibleTable * This, + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ boolean *isSelected); + + HRESULT ( STDMETHODCALLTYPE *selectRow )( + IAccessibleTable * This, + /* [in] */ long row); + + HRESULT ( STDMETHODCALLTYPE *selectColumn )( + IAccessibleTable * This, + /* [in] */ long column); + + HRESULT ( STDMETHODCALLTYPE *unselectRow )( + IAccessibleTable * This, + /* [in] */ long row); + + HRESULT ( STDMETHODCALLTYPE *unselectColumn )( + IAccessibleTable * This, + /* [in] */ long column); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtentsAtIndex )( + IAccessibleTable * This, + /* [in] */ long index, + /* [out] */ long *row, + /* [out] */ long *column, + /* [out] */ long *rowExtents, + /* [out] */ long *columnExtents, + /* [retval][out] */ boolean *isSelected); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )( + IAccessibleTable * This, + /* [retval][out] */ IA2TableModelChange *modelChange); + + END_INTERFACE + } IAccessibleTableVtbl; + + interface IAccessibleTable + { + CONST_VTBL struct IAccessibleTableVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleTable_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleTable_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleTable_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleTable_get_accessibleAt(This,row,column,accessible) \ + ( (This)->lpVtbl -> get_accessibleAt(This,row,column,accessible) ) + +#define IAccessibleTable_get_caption(This,accessible) \ + ( (This)->lpVtbl -> get_caption(This,accessible) ) + +#define IAccessibleTable_get_childIndex(This,rowIndex,columnIndex,cellIndex) \ + ( (This)->lpVtbl -> get_childIndex(This,rowIndex,columnIndex,cellIndex) ) + +#define IAccessibleTable_get_columnDescription(This,column,description) \ + ( (This)->lpVtbl -> get_columnDescription(This,column,description) ) + +#define IAccessibleTable_get_columnExtentAt(This,row,column,nColumnsSpanned) \ + ( (This)->lpVtbl -> get_columnExtentAt(This,row,column,nColumnsSpanned) ) + +#define IAccessibleTable_get_columnHeader(This,accessibleTable,startingRowIndex) \ + ( (This)->lpVtbl -> get_columnHeader(This,accessibleTable,startingRowIndex) ) + +#define IAccessibleTable_get_columnIndex(This,cellIndex,columnIndex) \ + ( (This)->lpVtbl -> get_columnIndex(This,cellIndex,columnIndex) ) + +#define IAccessibleTable_get_nColumns(This,columnCount) \ + ( (This)->lpVtbl -> get_nColumns(This,columnCount) ) + +#define IAccessibleTable_get_nRows(This,rowCount) \ + ( (This)->lpVtbl -> get_nRows(This,rowCount) ) + +#define IAccessibleTable_get_nSelectedChildren(This,cellCount) \ + ( (This)->lpVtbl -> get_nSelectedChildren(This,cellCount) ) + +#define IAccessibleTable_get_nSelectedColumns(This,columnCount) \ + ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) ) + +#define IAccessibleTable_get_nSelectedRows(This,rowCount) \ + ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) ) + +#define IAccessibleTable_get_rowDescription(This,row,description) \ + ( (This)->lpVtbl -> get_rowDescription(This,row,description) ) + +#define IAccessibleTable_get_rowExtentAt(This,row,column,nRowsSpanned) \ + ( (This)->lpVtbl -> get_rowExtentAt(This,row,column,nRowsSpanned) ) + +#define IAccessibleTable_get_rowHeader(This,accessibleTable,startingColumnIndex) \ + ( (This)->lpVtbl -> get_rowHeader(This,accessibleTable,startingColumnIndex) ) + +#define IAccessibleTable_get_rowIndex(This,cellIndex,rowIndex) \ + ( (This)->lpVtbl -> get_rowIndex(This,cellIndex,rowIndex) ) + +#define IAccessibleTable_get_selectedChildren(This,maxChildren,children,nChildren) \ + ( (This)->lpVtbl -> get_selectedChildren(This,maxChildren,children,nChildren) ) + +#define IAccessibleTable_get_selectedColumns(This,maxColumns,columns,nColumns) \ + ( (This)->lpVtbl -> get_selectedColumns(This,maxColumns,columns,nColumns) ) + +#define IAccessibleTable_get_selectedRows(This,maxRows,rows,nRows) \ + ( (This)->lpVtbl -> get_selectedRows(This,maxRows,rows,nRows) ) + +#define IAccessibleTable_get_summary(This,accessible) \ + ( (This)->lpVtbl -> get_summary(This,accessible) ) + +#define IAccessibleTable_get_isColumnSelected(This,column,isSelected) \ + ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) ) + +#define IAccessibleTable_get_isRowSelected(This,row,isSelected) \ + ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) ) + +#define IAccessibleTable_get_isSelected(This,row,column,isSelected) \ + ( (This)->lpVtbl -> get_isSelected(This,row,column,isSelected) ) + +#define IAccessibleTable_selectRow(This,row) \ + ( (This)->lpVtbl -> selectRow(This,row) ) + +#define IAccessibleTable_selectColumn(This,column) \ + ( (This)->lpVtbl -> selectColumn(This,column) ) + +#define IAccessibleTable_unselectRow(This,row) \ + ( (This)->lpVtbl -> unselectRow(This,row) ) + +#define IAccessibleTable_unselectColumn(This,column) \ + ( (This)->lpVtbl -> unselectColumn(This,column) ) + +#define IAccessibleTable_get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) \ + ( (This)->lpVtbl -> get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) ) + +#define IAccessibleTable_get_modelChange(This,modelChange) \ + ( (This)->lpVtbl -> get_modelChange(This,modelChange) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleTable_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleTable2_INTERFACE_DEFINED__ +#define __IAccessibleTable2_INTERFACE_DEFINED__ + +/* interface IAccessibleTable2 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleTable2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("6167f295-06f0-4cdd-a1fa-02e25153d869") + IAccessibleTable2 : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_cellAt( + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ IUnknown **cell) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption( + /* [retval][out] */ IUnknown **accessible) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription( + /* [in] */ long column, + /* [retval][out] */ BSTR *description) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns( + /* [retval][out] */ long *columnCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows( + /* [retval][out] */ long *rowCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedCells( + /* [retval][out] */ long *cellCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns( + /* [retval][out] */ long *columnCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows( + /* [retval][out] */ long *rowCount) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription( + /* [in] */ long row, + /* [retval][out] */ BSTR *description) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedCells( + /* [size_is][size_is][out] */ IUnknown ***cells, + /* [retval][out] */ long *nSelectedCells) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns( + /* [size_is][size_is][out] */ long **selectedColumns, + /* [retval][out] */ long *nColumns) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows( + /* [size_is][size_is][out] */ long **selectedRows, + /* [retval][out] */ long *nRows) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary( + /* [retval][out] */ IUnknown **accessible) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected( + /* [in] */ long column, + /* [retval][out] */ boolean *isSelected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected( + /* [in] */ long row, + /* [retval][out] */ boolean *isSelected) = 0; + + virtual HRESULT STDMETHODCALLTYPE selectRow( + /* [in] */ long row) = 0; + + virtual HRESULT STDMETHODCALLTYPE selectColumn( + /* [in] */ long column) = 0; + + virtual HRESULT STDMETHODCALLTYPE unselectRow( + /* [in] */ long row) = 0; + + virtual HRESULT STDMETHODCALLTYPE unselectColumn( + /* [in] */ long column) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange( + /* [retval][out] */ IA2TableModelChange *modelChange) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleTable2Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleTable2 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleTable2 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleTable2 * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_cellAt )( + IAccessibleTable2 * This, + /* [in] */ long row, + /* [in] */ long column, + /* [retval][out] */ IUnknown **cell); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )( + IAccessibleTable2 * This, + /* [retval][out] */ IUnknown **accessible); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )( + IAccessibleTable2 * This, + /* [in] */ long column, + /* [retval][out] */ BSTR *description); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )( + IAccessibleTable2 * This, + /* [retval][out] */ long *columnCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )( + IAccessibleTable2 * This, + /* [retval][out] */ long *rowCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedCells )( + IAccessibleTable2 * This, + /* [retval][out] */ long *cellCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )( + IAccessibleTable2 * This, + /* [retval][out] */ long *columnCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )( + IAccessibleTable2 * This, + /* [retval][out] */ long *rowCount); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )( + IAccessibleTable2 * This, + /* [in] */ long row, + /* [retval][out] */ BSTR *description); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedCells )( + IAccessibleTable2 * This, + /* [size_is][size_is][out] */ IUnknown ***cells, + /* [retval][out] */ long *nSelectedCells); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )( + IAccessibleTable2 * This, + /* [size_is][size_is][out] */ long **selectedColumns, + /* [retval][out] */ long *nColumns); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )( + IAccessibleTable2 * This, + /* [size_is][size_is][out] */ long **selectedRows, + /* [retval][out] */ long *nRows); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )( + IAccessibleTable2 * This, + /* [retval][out] */ IUnknown **accessible); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )( + IAccessibleTable2 * This, + /* [in] */ long column, + /* [retval][out] */ boolean *isSelected); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )( + IAccessibleTable2 * This, + /* [in] */ long row, + /* [retval][out] */ boolean *isSelected); + + HRESULT ( STDMETHODCALLTYPE *selectRow )( + IAccessibleTable2 * This, + /* [in] */ long row); + + HRESULT ( STDMETHODCALLTYPE *selectColumn )( + IAccessibleTable2 * This, + /* [in] */ long column); + + HRESULT ( STDMETHODCALLTYPE *unselectRow )( + IAccessibleTable2 * This, + /* [in] */ long row); + + HRESULT ( STDMETHODCALLTYPE *unselectColumn )( + IAccessibleTable2 * This, + /* [in] */ long column); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )( + IAccessibleTable2 * This, + /* [retval][out] */ IA2TableModelChange *modelChange); + + END_INTERFACE + } IAccessibleTable2Vtbl; + + interface IAccessibleTable2 + { + CONST_VTBL struct IAccessibleTable2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleTable2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleTable2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleTable2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleTable2_get_cellAt(This,row,column,cell) \ + ( (This)->lpVtbl -> get_cellAt(This,row,column,cell) ) + +#define IAccessibleTable2_get_caption(This,accessible) \ + ( (This)->lpVtbl -> get_caption(This,accessible) ) + +#define IAccessibleTable2_get_columnDescription(This,column,description) \ + ( (This)->lpVtbl -> get_columnDescription(This,column,description) ) + +#define IAccessibleTable2_get_nColumns(This,columnCount) \ + ( (This)->lpVtbl -> get_nColumns(This,columnCount) ) + +#define IAccessibleTable2_get_nRows(This,rowCount) \ + ( (This)->lpVtbl -> get_nRows(This,rowCount) ) + +#define IAccessibleTable2_get_nSelectedCells(This,cellCount) \ + ( (This)->lpVtbl -> get_nSelectedCells(This,cellCount) ) + +#define IAccessibleTable2_get_nSelectedColumns(This,columnCount) \ + ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) ) + +#define IAccessibleTable2_get_nSelectedRows(This,rowCount) \ + ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) ) + +#define IAccessibleTable2_get_rowDescription(This,row,description) \ + ( (This)->lpVtbl -> get_rowDescription(This,row,description) ) + +#define IAccessibleTable2_get_selectedCells(This,cells,nSelectedCells) \ + ( (This)->lpVtbl -> get_selectedCells(This,cells,nSelectedCells) ) + +#define IAccessibleTable2_get_selectedColumns(This,selectedColumns,nColumns) \ + ( (This)->lpVtbl -> get_selectedColumns(This,selectedColumns,nColumns) ) + +#define IAccessibleTable2_get_selectedRows(This,selectedRows,nRows) \ + ( (This)->lpVtbl -> get_selectedRows(This,selectedRows,nRows) ) + +#define IAccessibleTable2_get_summary(This,accessible) \ + ( (This)->lpVtbl -> get_summary(This,accessible) ) + +#define IAccessibleTable2_get_isColumnSelected(This,column,isSelected) \ + ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) ) + +#define IAccessibleTable2_get_isRowSelected(This,row,isSelected) \ + ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) ) + +#define IAccessibleTable2_selectRow(This,row) \ + ( (This)->lpVtbl -> selectRow(This,row) ) + +#define IAccessibleTable2_selectColumn(This,column) \ + ( (This)->lpVtbl -> selectColumn(This,column) ) + +#define IAccessibleTable2_unselectRow(This,row) \ + ( (This)->lpVtbl -> unselectRow(This,row) ) + +#define IAccessibleTable2_unselectColumn(This,column) \ + ( (This)->lpVtbl -> unselectColumn(This,column) ) + +#define IAccessibleTable2_get_modelChange(This,modelChange) \ + ( (This)->lpVtbl -> get_modelChange(This,modelChange) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleTable2_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleTableCell_INTERFACE_DEFINED__ +#define __IAccessibleTableCell_INTERFACE_DEFINED__ + +/* interface IAccessibleTableCell */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleTableCell; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("594116B1-C99F-4847-AD06-0A7A86ECE645") + IAccessibleTableCell : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtent( + /* [retval][out] */ long *nColumnsSpanned) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeaderCells( + /* [size_is][size_is][out] */ IUnknown ***cellAccessibles, + /* [retval][out] */ long *nColumnHeaderCells) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex( + /* [retval][out] */ long *columnIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtent( + /* [retval][out] */ long *nRowsSpanned) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeaderCells( + /* [size_is][size_is][out] */ IUnknown ***cellAccessibles, + /* [retval][out] */ long *nRowHeaderCells) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex( + /* [retval][out] */ long *rowIndex) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected( + /* [retval][out] */ boolean *isSelected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtents( + /* [out] */ long *row, + /* [out] */ long *column, + /* [out] */ long *rowExtents, + /* [out] */ long *columnExtents, + /* [retval][out] */ boolean *isSelected) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_table( + /* [retval][out] */ IUnknown **table) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleTableCellVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleTableCell * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleTableCell * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleTableCell * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtent )( + IAccessibleTableCell * This, + /* [retval][out] */ long *nColumnsSpanned); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeaderCells )( + IAccessibleTableCell * This, + /* [size_is][size_is][out] */ IUnknown ***cellAccessibles, + /* [retval][out] */ long *nColumnHeaderCells); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )( + IAccessibleTableCell * This, + /* [retval][out] */ long *columnIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtent )( + IAccessibleTableCell * This, + /* [retval][out] */ long *nRowsSpanned); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeaderCells )( + IAccessibleTableCell * This, + /* [size_is][size_is][out] */ IUnknown ***cellAccessibles, + /* [retval][out] */ long *nRowHeaderCells); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )( + IAccessibleTableCell * This, + /* [retval][out] */ long *rowIndex); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )( + IAccessibleTableCell * This, + /* [retval][out] */ boolean *isSelected); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtents )( + IAccessibleTableCell * This, + /* [out] */ long *row, + /* [out] */ long *column, + /* [out] */ long *rowExtents, + /* [out] */ long *columnExtents, + /* [retval][out] */ boolean *isSelected); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_table )( + IAccessibleTableCell * This, + /* [retval][out] */ IUnknown **table); + + END_INTERFACE + } IAccessibleTableCellVtbl; + + interface IAccessibleTableCell + { + CONST_VTBL struct IAccessibleTableCellVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleTableCell_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleTableCell_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleTableCell_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleTableCell_get_columnExtent(This,nColumnsSpanned) \ + ( (This)->lpVtbl -> get_columnExtent(This,nColumnsSpanned) ) + +#define IAccessibleTableCell_get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) \ + ( (This)->lpVtbl -> get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) ) + +#define IAccessibleTableCell_get_columnIndex(This,columnIndex) \ + ( (This)->lpVtbl -> get_columnIndex(This,columnIndex) ) + +#define IAccessibleTableCell_get_rowExtent(This,nRowsSpanned) \ + ( (This)->lpVtbl -> get_rowExtent(This,nRowsSpanned) ) + +#define IAccessibleTableCell_get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) \ + ( (This)->lpVtbl -> get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) ) + +#define IAccessibleTableCell_get_rowIndex(This,rowIndex) \ + ( (This)->lpVtbl -> get_rowIndex(This,rowIndex) ) + +#define IAccessibleTableCell_get_isSelected(This,isSelected) \ + ( (This)->lpVtbl -> get_isSelected(This,isSelected) ) + +#define IAccessibleTableCell_get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) \ + ( (This)->lpVtbl -> get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) ) + +#define IAccessibleTableCell_get_table(This,table) \ + ( (This)->lpVtbl -> get_table(This,table) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleTableCell_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleImage_INTERFACE_DEFINED__ +#define __IAccessibleImage_INTERFACE_DEFINED__ + +/* interface IAccessibleImage */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleImage; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE") + IAccessibleImage : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description( + /* [retval][out] */ BSTR *description) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imagePosition( + /* [in] */ enum IA2CoordinateType coordinateType, + /* [out] */ long *x, + /* [retval][out] */ long *y) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imageSize( + /* [out] */ long *height, + /* [retval][out] */ long *width) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleImageVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleImage * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleImage * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleImage * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )( + IAccessibleImage * This, + /* [retval][out] */ BSTR *description); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imagePosition )( + IAccessibleImage * This, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [out] */ long *x, + /* [retval][out] */ long *y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imageSize )( + IAccessibleImage * This, + /* [out] */ long *height, + /* [retval][out] */ long *width); + + END_INTERFACE + } IAccessibleImageVtbl; + + interface IAccessibleImage + { + CONST_VTBL struct IAccessibleImageVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleImage_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleImage_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleImage_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleImage_get_description(This,description) \ + ( (This)->lpVtbl -> get_description(This,description) ) + +#define IAccessibleImage_get_imagePosition(This,coordinateType,x,y) \ + ( (This)->lpVtbl -> get_imagePosition(This,coordinateType,x,y) ) + +#define IAccessibleImage_get_imageSize(This,height,width) \ + ( (This)->lpVtbl -> get_imageSize(This,height,width) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleImage_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0016 */ +/* [local] */ + + +enum IA2EventID + { + IA2_EVENT_ACTION_CHANGED = 0x101, + IA2_EVENT_ACTIVE_DECENDENT_CHANGED = ( IA2_EVENT_ACTION_CHANGED + 1 ) , + IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED, + IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED = ( IA2_EVENT_ACTIVE_DESCENDANT_CHANGED + 1 ) , + IA2_EVENT_DOCUMENT_CONTENT_CHANGED = ( IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED + 1 ) , + IA2_EVENT_DOCUMENT_LOAD_COMPLETE = ( IA2_EVENT_DOCUMENT_CONTENT_CHANGED + 1 ) , + IA2_EVENT_DOCUMENT_LOAD_STOPPED = ( IA2_EVENT_DOCUMENT_LOAD_COMPLETE + 1 ) , + IA2_EVENT_DOCUMENT_RELOAD = ( IA2_EVENT_DOCUMENT_LOAD_STOPPED + 1 ) , + IA2_EVENT_HYPERLINK_END_INDEX_CHANGED = ( IA2_EVENT_DOCUMENT_RELOAD + 1 ) , + IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED = ( IA2_EVENT_HYPERLINK_END_INDEX_CHANGED + 1 ) , + IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED = ( IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED + 1 ) , + IA2_EVENT_HYPERTEXT_LINK_ACTIVATED = ( IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED + 1 ) , + IA2_EVENT_HYPERTEXT_LINK_SELECTED = ( IA2_EVENT_HYPERTEXT_LINK_ACTIVATED + 1 ) , + IA2_EVENT_HYPERLINK_START_INDEX_CHANGED = ( IA2_EVENT_HYPERTEXT_LINK_SELECTED + 1 ) , + IA2_EVENT_HYPERTEXT_CHANGED = ( IA2_EVENT_HYPERLINK_START_INDEX_CHANGED + 1 ) , + IA2_EVENT_HYPERTEXT_NLINKS_CHANGED = ( IA2_EVENT_HYPERTEXT_CHANGED + 1 ) , + IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED = ( IA2_EVENT_HYPERTEXT_NLINKS_CHANGED + 1 ) , + IA2_EVENT_PAGE_CHANGED = ( IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED + 1 ) , + IA2_EVENT_SECTION_CHANGED = ( IA2_EVENT_PAGE_CHANGED + 1 ) , + IA2_EVENT_TABLE_CAPTION_CHANGED = ( IA2_EVENT_SECTION_CHANGED + 1 ) , + IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_CAPTION_CHANGED + 1 ) , + IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED = ( IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED + 1 ) , + IA2_EVENT_TABLE_MODEL_CHANGED = ( IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED + 1 ) , + IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_MODEL_CHANGED + 1 ) , + IA2_EVENT_TABLE_ROW_HEADER_CHANGED = ( IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED + 1 ) , + IA2_EVENT_TABLE_SUMMARY_CHANGED = ( IA2_EVENT_TABLE_ROW_HEADER_CHANGED + 1 ) , + IA2_EVENT_TEXT_ATTRIBUTE_CHANGED = ( IA2_EVENT_TABLE_SUMMARY_CHANGED + 1 ) , + IA2_EVENT_TEXT_CARET_MOVED = ( IA2_EVENT_TEXT_ATTRIBUTE_CHANGED + 1 ) , + IA2_EVENT_TEXT_CHANGED = ( IA2_EVENT_TEXT_CARET_MOVED + 1 ) , + IA2_EVENT_TEXT_COLUMN_CHANGED = ( IA2_EVENT_TEXT_CHANGED + 1 ) , + IA2_EVENT_TEXT_INSERTED = ( IA2_EVENT_TEXT_COLUMN_CHANGED + 1 ) , + IA2_EVENT_TEXT_REMOVED = ( IA2_EVENT_TEXT_INSERTED + 1 ) , + IA2_EVENT_TEXT_UPDATED = ( IA2_EVENT_TEXT_REMOVED + 1 ) , + IA2_EVENT_TEXT_SELECTION_CHANGED = ( IA2_EVENT_TEXT_UPDATED + 1 ) , + IA2_EVENT_VISIBLE_DATA_CHANGED = ( IA2_EVENT_TEXT_SELECTION_CHANGED + 1 ) + } ; + + +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0016_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0016_v0_0_s_ifspec; + +#ifndef __IAccessibleApplication_INTERFACE_DEFINED__ +#define __IAccessibleApplication_INTERFACE_DEFINED__ + +/* interface IAccessibleApplication */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleApplication; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("D49DED83-5B25-43F4-9B95-93B44595979E") + IAccessibleApplication : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appName( + /* [retval][out] */ BSTR *name) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appVersion( + /* [retval][out] */ BSTR *version) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitName( + /* [retval][out] */ BSTR *name) = 0; + + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitVersion( + /* [retval][out] */ BSTR *version) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleApplicationVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleApplication * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleApplication * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleApplication * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appName )( + IAccessibleApplication * This, + /* [retval][out] */ BSTR *name); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appVersion )( + IAccessibleApplication * This, + /* [retval][out] */ BSTR *version); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitName )( + IAccessibleApplication * This, + /* [retval][out] */ BSTR *name); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitVersion )( + IAccessibleApplication * This, + /* [retval][out] */ BSTR *version); + + END_INTERFACE + } IAccessibleApplicationVtbl; + + interface IAccessibleApplication + { + CONST_VTBL struct IAccessibleApplicationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleApplication_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleApplication_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleApplication_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleApplication_get_appName(This,name) \ + ( (This)->lpVtbl -> get_appName(This,name) ) + +#define IAccessibleApplication_get_appVersion(This,version) \ + ( (This)->lpVtbl -> get_appVersion(This,version) ) + +#define IAccessibleApplication_get_toolkitName(This,name) \ + ( (This)->lpVtbl -> get_toolkitName(This,name) ) + +#define IAccessibleApplication_get_toolkitVersion(This,version) \ + ( (This)->lpVtbl -> get_toolkitVersion(This,version) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleApplication_INTERFACE_DEFINED__ */ + + +#ifndef __IAccessibleDocument_INTERFACE_DEFINED__ +#define __IAccessibleDocument_INTERFACE_DEFINED__ + +/* interface IAccessibleDocument */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessibleDocument; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C48C7FCF-4AB5-4056-AFA6-902D6E1D1149") + IAccessibleDocument : public IUnknown + { + public: + virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget( + /* [retval][out] */ IUnknown **accessible) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessibleDocumentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessibleDocument * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessibleDocument * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessibleDocument * This); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )( + IAccessibleDocument * This, + /* [retval][out] */ IUnknown **accessible); + + END_INTERFACE + } IAccessibleDocumentVtbl; + + interface IAccessibleDocument + { + CONST_VTBL struct IAccessibleDocumentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessibleDocument_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessibleDocument_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessibleDocument_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessibleDocument_get_anchorTarget(This,accessible) \ + ( (This)->lpVtbl -> get_anchorTarget(This,accessible) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessibleDocument_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0018 */ +/* [local] */ + + +// Type Library Definitions + + + +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec; + + +#ifndef __IAccessible2Lib_LIBRARY_DEFINED__ +#define __IAccessible2Lib_LIBRARY_DEFINED__ + +/* library IAccessible2Lib */ +/* [hidden][version][helpstring][uuid] */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +EXTERN_C const IID LIBID_IAccessible2Lib; +#endif /* __IAccessible2Lib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); + +unsigned long __RPC_USER HWND_UserSize( unsigned long *, unsigned long , HWND * ); +unsigned char * __RPC_USER HWND_UserMarshal( unsigned long *, unsigned char *, HWND * ); +unsigned char * __RPC_USER HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * ); +void __RPC_USER HWND_UserFree( unsigned long *, HWND * ); + +unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * ); +void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * ); + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + +
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.tlb b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.tlb new file mode 100644 index 0000000..ed6f95c9 --- /dev/null +++ b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all.tlb Binary files differ
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all_i.c b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all_i.c new file mode 100644 index 0000000..4b94cdb --- /dev/null +++ b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all_i.c
@@ -0,0 +1,133 @@ + + +/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../third_party/iaccessible2/ia2_api_all.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#ifdef __cplusplus +extern "C"{ +#endif + + +#include <rpc.h> +#include <rpcndr.h> + +#ifdef _MIDL_USE_GUIDDEF_ + +#ifndef INITGUID +#define INITGUID +#include <guiddef.h> +#undef INITGUID +#else +#include <guiddef.h> +#endif + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) + +#else // !_MIDL_USE_GUIDDEF_ + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + EXTERN_C __declspec(selectany) const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + +#endif // !_MIDL_USE_GUIDDEF_ + +MIDL_DEFINE_GUID(IID, IID_IAccessibleRelation,0x7CDF86EE,0xC3DA,0x496a,0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleAction,0xB70D9F59,0x3B5A,0x4dba,0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5); + + +MIDL_DEFINE_GUID(IID, IID_IAccessible2,0xE89F726E,0xC4F4,0x4c19,0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78); + + +MIDL_DEFINE_GUID(IID, IID_IAccessible2_2,0x6C9430E9,0x299D,0x4E6F,0xBD,0x01,0xA8,0x2A,0x1E,0x88,0xD3,0xFF); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleValue,0x35855B5B,0xC566,0x4fd0,0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleText,0x24FD2FFB,0x3AAD,0x4a08,0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleText2,0x9690A9CC,0x5C80,0x4DF5,0x85,0x2E,0x2D,0x5A,0xE4,0x18,0x9A,0x54); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleEditableText,0xA59AA09A,0x7011,0x4b65,0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleHyperlink,0x01C20F2B,0x3DD2,0x400f,0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext,0x6B4F8BBF,0xF1F2,0x418a,0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext2,0xCF64D89F,0x8287,0x4B44,0x85,0x01,0xA8,0x27,0x45,0x3A,0x60,0x77); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleTable,0x35AD8070,0xC20C,0x4fb4,0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleTable2,0x6167f295,0x06f0,0x4cdd,0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleTableCell,0x594116B1,0xC99F,0x4847,0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleImage,0xFE5ABB3D,0x615E,0x4f7b,0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleApplication,0xD49DED83,0x5B25,0x43F4,0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E); + + +MIDL_DEFINE_GUID(IID, IID_IAccessibleDocument,0xC48C7FCF,0x4AB5,0x4056,0xAF,0xA6,0x90,0x2D,0x6E,0x1D,0x11,0x49); + + +MIDL_DEFINE_GUID(IID, LIBID_IAccessible2Lib,0xCE3F726E,0xD1D3,0x44FE,0xB9,0x95,0xFF,0x1D,0xB3,0xB4,0x8B,0x2B); + +#undef MIDL_DEFINE_GUID + +#ifdef __cplusplus +} +#endif + + +
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all_p.c b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all_p.c new file mode 100644 index 0000000..15a8b961 --- /dev/null +++ b/third_party/win_build_output/midl/third_party/iaccessible2/ia2_api_all_p.c
@@ -0,0 +1,7867 @@ + + +/* this ALWAYS GENERATED file contains the proxy stub code */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../third_party/iaccessible2/ia2_api_all.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */ + +#define USE_STUBLESS_PROXY + + +/* verify that the <rpcproxy.h> version is high enough to compile this file*/ +#ifndef __REDQ_RPCPROXY_H_VERSION__ +#define __REQUIRED_RPCPROXY_H_VERSION__ 475 +#endif + + +#include "rpcproxy.h" +#ifndef __RPCPROXY_H_VERSION__ +#error this stub requires an updated version of <rpcproxy.h> +#endif /* __RPCPROXY_H_VERSION__ */ + + +#include "ia2_api_all.h" + +#define TYPE_FORMAT_STRING_SIZE 1467 +#define PROC_FORMAT_STRING_SIZE 5445 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 3 + +typedef struct _ia2_api_all_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } ia2_api_all_MIDL_TYPE_FORMAT_STRING; + +typedef struct _ia2_api_all_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } ia2_api_all_MIDL_PROC_FORMAT_STRING; + +typedef struct _ia2_api_all_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } ia2_api_all_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + + +extern const ia2_api_all_MIDL_TYPE_FORMAT_STRING ia2_api_all__MIDL_TypeFormatString; +extern const ia2_api_all_MIDL_PROC_FORMAT_STRING ia2_api_all__MIDL_ProcFormatString; +extern const ia2_api_all_MIDL_EXPR_FORMAT_STRING ia2_api_all__MIDL_ExprFormatString; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleAction_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessible2_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessible2_2_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_2_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleValue_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleText_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleText2_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleHypertext2_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleTable_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleImage_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IAccessibleDocument_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo; + + +extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ]; + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + +static const ia2_api_all_MIDL_PROC_FORMAT_STRING ia2_api_all__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure get_appName */ + + + /* Procedure get_description */ + + + /* Procedure get_relationType */ + + 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x3 ), /* 3 */ +/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 10 */ NdrFcShort( 0x0 ), /* 0 */ +/* 12 */ NdrFcShort( 0x8 ), /* 8 */ +/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 16 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 18 */ NdrFcShort( 0x1 ), /* 1 */ +/* 20 */ NdrFcShort( 0x0 ), /* 0 */ +/* 22 */ NdrFcShort( 0x0 ), /* 0 */ +/* 24 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter name */ + + + /* Parameter description */ + + + /* Parameter relationType */ + +/* 26 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 30 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + +/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 36 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_appVersion */ + + + /* Procedure get_localizedRelationType */ + +/* 38 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 40 */ NdrFcLong( 0x0 ), /* 0 */ +/* 44 */ NdrFcShort( 0x4 ), /* 4 */ +/* 46 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 48 */ NdrFcShort( 0x0 ), /* 0 */ +/* 50 */ NdrFcShort( 0x8 ), /* 8 */ +/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 54 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 56 */ NdrFcShort( 0x1 ), /* 1 */ +/* 58 */ NdrFcShort( 0x0 ), /* 0 */ +/* 60 */ NdrFcShort( 0x0 ), /* 0 */ +/* 62 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter version */ + + + /* Parameter localizedRelationType */ + +/* 64 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 68 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + + + /* Return value */ + +/* 70 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 74 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnIndex */ + + + /* Procedure get_caretOffset */ + + + /* Procedure get_background */ + + + /* Procedure get_nTargets */ + +/* 76 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 78 */ NdrFcLong( 0x0 ), /* 0 */ +/* 82 */ NdrFcShort( 0x5 ), /* 5 */ +/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 86 */ NdrFcShort( 0x0 ), /* 0 */ +/* 88 */ NdrFcShort( 0x24 ), /* 36 */ +/* 90 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 92 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 94 */ NdrFcShort( 0x0 ), /* 0 */ +/* 96 */ NdrFcShort( 0x0 ), /* 0 */ +/* 98 */ NdrFcShort( 0x0 ), /* 0 */ +/* 100 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter columnIndex */ + + + /* Parameter offset */ + + + /* Parameter background */ + + + /* Parameter nTargets */ + +/* 102 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 106 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + + + /* Return value */ + +/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 110 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_target */ + +/* 114 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 116 */ NdrFcLong( 0x0 ), /* 0 */ +/* 120 */ NdrFcShort( 0x6 ), /* 6 */ +/* 122 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 124 */ NdrFcShort( 0x8 ), /* 8 */ +/* 126 */ NdrFcShort( 0x8 ), /* 8 */ +/* 128 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 130 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 132 */ NdrFcShort( 0x0 ), /* 0 */ +/* 134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 136 */ NdrFcShort( 0x0 ), /* 0 */ +/* 138 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter targetIndex */ + +/* 140 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 142 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 144 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter target */ + +/* 146 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 150 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Return value */ + +/* 152 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 154 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 156 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_targets */ + +/* 158 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 160 */ NdrFcLong( 0x0 ), /* 0 */ +/* 164 */ NdrFcShort( 0x7 ), /* 7 */ +/* 166 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 168 */ NdrFcShort( 0x8 ), /* 8 */ +/* 170 */ NdrFcShort( 0x24 ), /* 36 */ +/* 172 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 174 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 176 */ NdrFcShort( 0x1 ), /* 1 */ +/* 178 */ NdrFcShort( 0x0 ), /* 0 */ +/* 180 */ NdrFcShort( 0x0 ), /* 0 */ +/* 182 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxTargets */ + +/* 184 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 188 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter targets */ + +/* 190 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */ +/* 192 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 194 */ NdrFcShort( 0x48 ), /* Type Offset=72 */ + + /* Parameter nTargets */ + +/* 196 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 198 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 200 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 204 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 206 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnExtent */ + + + /* Procedure nActions */ + +/* 208 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 210 */ NdrFcLong( 0x0 ), /* 0 */ +/* 214 */ NdrFcShort( 0x3 ), /* 3 */ +/* 216 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 218 */ NdrFcShort( 0x0 ), /* 0 */ +/* 220 */ NdrFcShort( 0x24 ), /* 36 */ +/* 222 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 224 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 226 */ NdrFcShort( 0x0 ), /* 0 */ +/* 228 */ NdrFcShort( 0x0 ), /* 0 */ +/* 230 */ NdrFcShort( 0x0 ), /* 0 */ +/* 232 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter nColumnsSpanned */ + + + /* Parameter nActions */ + +/* 234 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 236 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 238 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 240 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 242 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 244 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure doAction */ + +/* 246 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 248 */ NdrFcLong( 0x0 ), /* 0 */ +/* 252 */ NdrFcShort( 0x4 ), /* 4 */ +/* 254 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 256 */ NdrFcShort( 0x8 ), /* 8 */ +/* 258 */ NdrFcShort( 0x8 ), /* 8 */ +/* 260 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 262 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 264 */ NdrFcShort( 0x0 ), /* 0 */ +/* 266 */ NdrFcShort( 0x0 ), /* 0 */ +/* 268 */ NdrFcShort( 0x0 ), /* 0 */ +/* 270 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter actionIndex */ + +/* 272 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 274 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 276 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 278 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 280 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 282 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnDescription */ + + + /* Procedure get_description */ + +/* 284 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 286 */ NdrFcLong( 0x0 ), /* 0 */ +/* 290 */ NdrFcShort( 0x5 ), /* 5 */ +/* 292 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 294 */ NdrFcShort( 0x8 ), /* 8 */ +/* 296 */ NdrFcShort( 0x8 ), /* 8 */ +/* 298 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 300 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 302 */ NdrFcShort( 0x1 ), /* 1 */ +/* 304 */ NdrFcShort( 0x0 ), /* 0 */ +/* 306 */ NdrFcShort( 0x0 ), /* 0 */ +/* 308 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + + + /* Parameter actionIndex */ + +/* 310 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 312 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 314 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter description */ + + + /* Parameter description */ + +/* 316 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 318 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 320 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + + + /* Return value */ + +/* 322 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 324 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 326 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_keyBinding */ + +/* 328 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 330 */ NdrFcLong( 0x0 ), /* 0 */ +/* 334 */ NdrFcShort( 0x6 ), /* 6 */ +/* 336 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 338 */ NdrFcShort( 0x10 ), /* 16 */ +/* 340 */ NdrFcShort( 0x24 ), /* 36 */ +/* 342 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x5, /* 5 */ +/* 344 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 346 */ NdrFcShort( 0x1 ), /* 1 */ +/* 348 */ NdrFcShort( 0x0 ), /* 0 */ +/* 350 */ NdrFcShort( 0x0 ), /* 0 */ +/* 352 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter actionIndex */ + +/* 354 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 356 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 358 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter nMaxBindings */ + +/* 360 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 362 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 364 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter keyBindings */ + +/* 366 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 368 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 370 */ NdrFcShort( 0x5e ), /* Type Offset=94 */ + + /* Parameter nBindings */ + +/* 372 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 374 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 376 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 378 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 380 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 382 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_name */ + +/* 384 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 386 */ NdrFcLong( 0x0 ), /* 0 */ +/* 390 */ NdrFcShort( 0x7 ), /* 7 */ +/* 392 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 394 */ NdrFcShort( 0x8 ), /* 8 */ +/* 396 */ NdrFcShort( 0x8 ), /* 8 */ +/* 398 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 400 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 402 */ NdrFcShort( 0x1 ), /* 1 */ +/* 404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 406 */ NdrFcShort( 0x0 ), /* 0 */ +/* 408 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter actionIndex */ + +/* 410 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 412 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 414 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter name */ + +/* 416 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 418 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 420 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 422 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 424 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 426 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_localizedName */ + +/* 428 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 430 */ NdrFcLong( 0x0 ), /* 0 */ +/* 434 */ NdrFcShort( 0x8 ), /* 8 */ +/* 436 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 438 */ NdrFcShort( 0x8 ), /* 8 */ +/* 440 */ NdrFcShort( 0x8 ), /* 8 */ +/* 442 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 444 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 446 */ NdrFcShort( 0x1 ), /* 1 */ +/* 448 */ NdrFcShort( 0x0 ), /* 0 */ +/* 450 */ NdrFcShort( 0x0 ), /* 0 */ +/* 452 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter actionIndex */ + +/* 454 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 456 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 458 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter localizedName */ + +/* 460 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 462 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 464 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 466 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 468 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 470 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nRelations */ + +/* 472 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 474 */ NdrFcLong( 0x0 ), /* 0 */ +/* 478 */ NdrFcShort( 0x1c ), /* 28 */ +/* 480 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 482 */ NdrFcShort( 0x0 ), /* 0 */ +/* 484 */ NdrFcShort( 0x24 ), /* 36 */ +/* 486 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 488 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 490 */ NdrFcShort( 0x0 ), /* 0 */ +/* 492 */ NdrFcShort( 0x0 ), /* 0 */ +/* 494 */ NdrFcShort( 0x0 ), /* 0 */ +/* 496 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter nRelations */ + +/* 498 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 500 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 502 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 504 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 506 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 508 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_relation */ + +/* 510 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 512 */ NdrFcLong( 0x0 ), /* 0 */ +/* 516 */ NdrFcShort( 0x1d ), /* 29 */ +/* 518 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 520 */ NdrFcShort( 0x8 ), /* 8 */ +/* 522 */ NdrFcShort( 0x8 ), /* 8 */ +/* 524 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 526 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 528 */ NdrFcShort( 0x0 ), /* 0 */ +/* 530 */ NdrFcShort( 0x0 ), /* 0 */ +/* 532 */ NdrFcShort( 0x0 ), /* 0 */ +/* 534 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter relationIndex */ + +/* 536 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 538 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 540 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter relation */ + +/* 542 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 544 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 546 */ NdrFcShort( 0x7c ), /* Type Offset=124 */ + + /* Return value */ + +/* 548 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 550 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 552 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_relations */ + +/* 554 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 556 */ NdrFcLong( 0x0 ), /* 0 */ +/* 560 */ NdrFcShort( 0x1e ), /* 30 */ +/* 562 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 564 */ NdrFcShort( 0x8 ), /* 8 */ +/* 566 */ NdrFcShort( 0x24 ), /* 36 */ +/* 568 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 570 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 572 */ NdrFcShort( 0x1 ), /* 1 */ +/* 574 */ NdrFcShort( 0x0 ), /* 0 */ +/* 576 */ NdrFcShort( 0x0 ), /* 0 */ +/* 578 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxRelations */ + +/* 580 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 582 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 584 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter relations */ + +/* 586 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */ +/* 588 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 590 */ NdrFcShort( 0x96 ), /* Type Offset=150 */ + + /* Parameter nRelations */ + +/* 592 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 594 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 596 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 598 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 600 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 602 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure role */ + +/* 604 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 606 */ NdrFcLong( 0x0 ), /* 0 */ +/* 610 */ NdrFcShort( 0x1f ), /* 31 */ +/* 612 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 614 */ NdrFcShort( 0x0 ), /* 0 */ +/* 616 */ NdrFcShort( 0x24 ), /* 36 */ +/* 618 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 620 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 622 */ NdrFcShort( 0x0 ), /* 0 */ +/* 624 */ NdrFcShort( 0x0 ), /* 0 */ +/* 626 */ NdrFcShort( 0x0 ), /* 0 */ +/* 628 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter role */ + +/* 630 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 632 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 634 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 636 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 638 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 640 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure scrollTo */ + +/* 642 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 644 */ NdrFcLong( 0x0 ), /* 0 */ +/* 648 */ NdrFcShort( 0x20 ), /* 32 */ +/* 650 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 652 */ NdrFcShort( 0x6 ), /* 6 */ +/* 654 */ NdrFcShort( 0x8 ), /* 8 */ +/* 656 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 658 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 660 */ NdrFcShort( 0x0 ), /* 0 */ +/* 662 */ NdrFcShort( 0x0 ), /* 0 */ +/* 664 */ NdrFcShort( 0x0 ), /* 0 */ +/* 666 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter scrollType */ + +/* 668 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 670 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 672 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Return value */ + +/* 674 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 676 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 678 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure scrollToPoint */ + +/* 680 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 682 */ NdrFcLong( 0x0 ), /* 0 */ +/* 686 */ NdrFcShort( 0x21 ), /* 33 */ +/* 688 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 690 */ NdrFcShort( 0x16 ), /* 22 */ +/* 692 */ NdrFcShort( 0x8 ), /* 8 */ +/* 694 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 696 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 698 */ NdrFcShort( 0x0 ), /* 0 */ +/* 700 */ NdrFcShort( 0x0 ), /* 0 */ +/* 702 */ NdrFcShort( 0x0 ), /* 0 */ +/* 704 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter coordinateType */ + +/* 706 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 708 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 710 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter x */ + +/* 712 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 714 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 716 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter y */ + +/* 718 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 720 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 722 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 724 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 726 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 728 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_groupPosition */ + +/* 730 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 732 */ NdrFcLong( 0x0 ), /* 0 */ +/* 736 */ NdrFcShort( 0x22 ), /* 34 */ +/* 738 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 740 */ NdrFcShort( 0x0 ), /* 0 */ +/* 742 */ NdrFcShort( 0x5c ), /* 92 */ +/* 744 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 746 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 748 */ NdrFcShort( 0x0 ), /* 0 */ +/* 750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 754 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter groupLevel */ + +/* 756 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 758 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 760 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter similarItemsInGroup */ + +/* 762 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 764 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 766 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter positionInGroup */ + +/* 768 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 770 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 772 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 774 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 776 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 778 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_states */ + +/* 780 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 782 */ NdrFcLong( 0x0 ), /* 0 */ +/* 786 */ NdrFcShort( 0x23 ), /* 35 */ +/* 788 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 790 */ NdrFcShort( 0x0 ), /* 0 */ +/* 792 */ NdrFcShort( 0x24 ), /* 36 */ +/* 794 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 796 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 798 */ NdrFcShort( 0x0 ), /* 0 */ +/* 800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 802 */ NdrFcShort( 0x0 ), /* 0 */ +/* 804 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter states */ + +/* 806 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 808 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 810 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 812 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 814 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 816 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_extendedRole */ + +/* 818 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 820 */ NdrFcLong( 0x0 ), /* 0 */ +/* 824 */ NdrFcShort( 0x24 ), /* 36 */ +/* 826 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 828 */ NdrFcShort( 0x0 ), /* 0 */ +/* 830 */ NdrFcShort( 0x8 ), /* 8 */ +/* 832 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 834 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 836 */ NdrFcShort( 0x1 ), /* 1 */ +/* 838 */ NdrFcShort( 0x0 ), /* 0 */ +/* 840 */ NdrFcShort( 0x0 ), /* 0 */ +/* 842 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter extendedRole */ + +/* 844 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 846 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 848 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 850 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 852 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 854 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_localizedExtendedRole */ + +/* 856 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 858 */ NdrFcLong( 0x0 ), /* 0 */ +/* 862 */ NdrFcShort( 0x25 ), /* 37 */ +/* 864 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 866 */ NdrFcShort( 0x0 ), /* 0 */ +/* 868 */ NdrFcShort( 0x8 ), /* 8 */ +/* 870 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 872 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 874 */ NdrFcShort( 0x1 ), /* 1 */ +/* 876 */ NdrFcShort( 0x0 ), /* 0 */ +/* 878 */ NdrFcShort( 0x0 ), /* 0 */ +/* 880 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter localizedExtendedRole */ + +/* 882 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 884 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 886 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 888 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 890 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 892 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nExtendedStates */ + +/* 894 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 896 */ NdrFcLong( 0x0 ), /* 0 */ +/* 900 */ NdrFcShort( 0x26 ), /* 38 */ +/* 902 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 904 */ NdrFcShort( 0x0 ), /* 0 */ +/* 906 */ NdrFcShort( 0x24 ), /* 36 */ +/* 908 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 910 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 912 */ NdrFcShort( 0x0 ), /* 0 */ +/* 914 */ NdrFcShort( 0x0 ), /* 0 */ +/* 916 */ NdrFcShort( 0x0 ), /* 0 */ +/* 918 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter nExtendedStates */ + +/* 920 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 922 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 924 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 926 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 928 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 930 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_extendedStates */ + +/* 932 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 934 */ NdrFcLong( 0x0 ), /* 0 */ +/* 938 */ NdrFcShort( 0x27 ), /* 39 */ +/* 940 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 942 */ NdrFcShort( 0x8 ), /* 8 */ +/* 944 */ NdrFcShort( 0x24 ), /* 36 */ +/* 946 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 948 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 950 */ NdrFcShort( 0x1 ), /* 1 */ +/* 952 */ NdrFcShort( 0x0 ), /* 0 */ +/* 954 */ NdrFcShort( 0x0 ), /* 0 */ +/* 956 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxExtendedStates */ + +/* 958 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 960 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 962 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter extendedStates */ + +/* 964 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 966 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 968 */ NdrFcShort( 0xac ), /* Type Offset=172 */ + + /* Parameter nExtendedStates */ + +/* 970 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 972 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 974 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 976 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 978 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 980 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_localizedExtendedStates */ + +/* 982 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 984 */ NdrFcLong( 0x0 ), /* 0 */ +/* 988 */ NdrFcShort( 0x28 ), /* 40 */ +/* 990 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 992 */ NdrFcShort( 0x8 ), /* 8 */ +/* 994 */ NdrFcShort( 0x24 ), /* 36 */ +/* 996 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 998 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1000 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1002 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1004 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1006 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxLocalizedExtendedStates */ + +/* 1008 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1010 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1012 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter localizedExtendedStates */ + +/* 1014 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 1016 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1018 */ NdrFcShort( 0xac ), /* Type Offset=172 */ + + /* Parameter nLocalizedExtendedStates */ + +/* 1020 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1022 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1024 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1026 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1028 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1030 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_uniqueID */ + +/* 1032 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1034 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1038 */ NdrFcShort( 0x29 ), /* 41 */ +/* 1040 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1042 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1044 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1046 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 1048 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1050 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1052 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1054 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1056 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter uniqueID */ + +/* 1058 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1060 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1062 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1064 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1066 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1068 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_windowHandle */ + +/* 1070 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1072 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1076 */ NdrFcShort( 0x2a ), /* 42 */ +/* 1078 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1080 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1082 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1084 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1086 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1088 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1090 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1092 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1094 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter windowHandle */ + +/* 1096 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1098 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1100 */ NdrFcShort( 0xe6 ), /* Type Offset=230 */ + + /* Return value */ + +/* 1102 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1104 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1106 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_indexInParent */ + +/* 1108 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1110 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1114 */ NdrFcShort( 0x2b ), /* 43 */ +/* 1116 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1118 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1120 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1122 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 1124 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1126 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1128 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1130 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1132 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter indexInParent */ + +/* 1134 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1136 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1138 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1142 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1144 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_locale */ + +/* 1146 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1148 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1152 */ NdrFcShort( 0x2c ), /* 44 */ +/* 1154 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1156 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1158 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1160 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1162 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1164 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1166 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1168 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1170 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter locale */ + +/* 1172 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1174 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1176 */ NdrFcShort( 0xf4 ), /* Type Offset=244 */ + + /* Return value */ + +/* 1178 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1180 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1182 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_attributes */ + +/* 1184 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1186 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1190 */ NdrFcShort( 0x2d ), /* 45 */ +/* 1192 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1194 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1196 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1198 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1200 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1202 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1208 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter attributes */ + +/* 1210 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1212 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1214 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 1216 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1218 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1220 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_attribute */ + +/* 1222 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1224 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1228 */ NdrFcShort( 0x2e ), /* 46 */ +/* 1230 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1232 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1234 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1236 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 1238 */ 0xa, /* 10 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 1240 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1242 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1244 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1246 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter name */ + +/* 1248 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1250 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1252 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ + + /* Parameter attribute */ + +/* 1254 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1256 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1258 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 1260 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1262 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1264 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_accessibleWithCaret */ + +/* 1266 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1268 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1272 */ NdrFcShort( 0x2f ), /* 47 */ +/* 1274 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1276 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1278 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1280 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 1282 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1284 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1286 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1288 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1290 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter accessible */ + +/* 1292 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 1294 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1296 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Parameter caretOffset */ + +/* 1298 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1300 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1302 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1304 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1306 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1308 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_relationTargetsOfType */ + +/* 1310 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1312 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1316 */ NdrFcShort( 0x30 ), /* 48 */ +/* 1318 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 1320 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1322 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1324 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 1326 */ 0xa, /* 10 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 1328 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1330 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1332 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1334 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter type */ + +/* 1336 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1338 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1340 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ + + /* Parameter maxTargets */ + +/* 1342 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1344 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1346 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter targets */ + +/* 1348 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 1350 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1352 */ NdrFcShort( 0x4c6 ), /* Type Offset=1222 */ + + /* Parameter nTargets */ + +/* 1354 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1356 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1358 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1362 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1364 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_locationInParent */ + +/* 1366 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1368 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1372 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1374 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1376 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1378 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1380 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 1382 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1384 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1386 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1388 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1390 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter x */ + +/* 1392 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1394 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1396 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter y */ + +/* 1398 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1400 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1402 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1404 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1406 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1408 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_foreground */ + +/* 1410 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1412 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1416 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1418 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1420 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1422 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1424 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 1426 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1428 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1430 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1432 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1434 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter foreground */ + +/* 1436 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1438 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1440 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1442 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1444 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1446 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentValue */ + +/* 1448 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1450 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1454 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1456 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1458 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1460 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1462 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1464 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1466 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1468 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1470 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1472 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter currentValue */ + +/* 1474 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1476 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1478 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 1480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1482 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1484 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure setCurrentValue */ + +/* 1486 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1488 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1492 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1494 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1496 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1498 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1500 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1502 */ 0xa, /* 10 */ + 0x85, /* Ext Flags: new corr desc, srv corr check, has big byval param */ +/* 1504 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1506 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1508 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1510 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter value */ + +/* 1512 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 1514 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1516 */ NdrFcShort( 0x4ec ), /* Type Offset=1260 */ + + /* Return value */ + +/* 1518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1520 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1522 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_maximumValue */ + +/* 1524 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1526 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1530 */ NdrFcShort( 0x5 ), /* 5 */ +/* 1532 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1534 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1536 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1538 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1540 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1542 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1544 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1546 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1548 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maximumValue */ + +/* 1550 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1552 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1554 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 1556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1558 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1560 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_minimumValue */ + +/* 1562 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1564 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1568 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1570 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1572 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1574 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1576 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1578 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1580 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1584 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1586 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter minimumValue */ + +/* 1588 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1592 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 1594 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1598 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure copyText */ + + + /* Procedure addSelection */ + +/* 1600 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1602 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1606 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1608 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1610 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1612 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1614 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 1616 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1618 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1620 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1622 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1624 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + + + /* Parameter startOffset */ + +/* 1626 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1628 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1630 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + + + /* Parameter endOffset */ + +/* 1632 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1634 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1636 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 1638 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1640 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1642 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_attributes */ + +/* 1644 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1646 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1650 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1652 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 1654 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1656 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1658 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x5, /* 5 */ +/* 1660 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1662 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1664 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1666 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1668 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 1670 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1672 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1674 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 1676 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1678 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1680 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 1682 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1684 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1686 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter textAttributes */ + +/* 1688 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1690 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1692 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 1694 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1696 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1698 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_characterExtents */ + +/* 1700 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1702 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1706 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1708 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 1710 */ NdrFcShort( 0xe ), /* 14 */ +/* 1712 */ NdrFcShort( 0x78 ), /* 120 */ +/* 1714 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x7, /* 7 */ +/* 1716 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1718 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1720 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1722 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1724 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 1726 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1728 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1730 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter coordType */ + +/* 1732 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1734 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1736 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter x */ + +/* 1738 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1740 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1742 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter y */ + +/* 1744 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1746 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1748 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter width */ + +/* 1750 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1752 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1754 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter height */ + +/* 1756 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1758 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 1760 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1762 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1764 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 1766 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nRows */ + + + /* Procedure get_nSelections */ + +/* 1768 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1770 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1774 */ NdrFcShort( 0x7 ), /* 7 */ +/* 1776 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1778 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1780 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1782 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 1784 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1786 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1788 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1790 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1792 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowCount */ + + + /* Parameter nSelections */ + +/* 1794 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1796 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1798 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 1800 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1802 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1804 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_offsetAtPoint */ + +/* 1806 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1808 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1812 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1814 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 1816 */ NdrFcShort( 0x16 ), /* 22 */ +/* 1818 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1820 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x5, /* 5 */ +/* 1822 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1824 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1826 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1828 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1830 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter x */ + +/* 1832 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1834 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1836 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter y */ + +/* 1838 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1840 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1842 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter coordType */ + +/* 1844 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1846 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1848 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter offset */ + +/* 1850 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1852 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1854 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1856 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1858 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1860 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selection */ + +/* 1862 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1864 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1868 */ NdrFcShort( 0x9 ), /* 9 */ +/* 1870 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1872 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1874 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1876 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 1878 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1880 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1882 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1884 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1886 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter selectionIndex */ + +/* 1888 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1890 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1892 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 1894 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1896 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1898 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 1900 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1902 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1904 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1906 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1908 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1910 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_text */ + +/* 1912 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1914 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1918 */ NdrFcShort( 0xa ), /* 10 */ +/* 1920 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1922 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1924 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1926 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 1928 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1930 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1932 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1934 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1936 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + +/* 1938 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1940 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1942 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 1944 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1946 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1948 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter text */ + +/* 1950 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1952 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1954 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 1956 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1958 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1960 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_textBeforeOffset */ + +/* 1962 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1964 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1968 */ NdrFcShort( 0xb ), /* 11 */ +/* 1970 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 1972 */ NdrFcShort( 0xe ), /* 14 */ +/* 1974 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1976 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x6, /* 6 */ +/* 1978 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1980 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1982 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1984 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1986 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 1988 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1990 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1992 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter boundaryType */ + +/* 1994 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1996 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1998 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 2000 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2002 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2004 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2006 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2008 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2010 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter text */ + +/* 2012 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2014 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2016 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 2018 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2020 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2022 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_textAfterOffset */ + +/* 2024 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2026 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2030 */ NdrFcShort( 0xc ), /* 12 */ +/* 2032 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2034 */ NdrFcShort( 0xe ), /* 14 */ +/* 2036 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2038 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x6, /* 6 */ +/* 2040 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2042 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2044 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2046 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2048 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2050 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2052 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2054 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter boundaryType */ + +/* 2056 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2058 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2060 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 2062 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2064 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2066 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2068 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2070 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2072 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter text */ + +/* 2074 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2076 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2078 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 2080 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2082 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2084 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_textAtOffset */ + +/* 2086 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2088 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2092 */ NdrFcShort( 0xd ), /* 13 */ +/* 2094 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2096 */ NdrFcShort( 0xe ), /* 14 */ +/* 2098 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2100 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x6, /* 6 */ +/* 2102 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2104 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2106 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2108 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2110 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2112 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2114 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2116 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter boundaryType */ + +/* 2118 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2120 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2122 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 2124 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2126 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2128 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2130 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2132 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2134 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter text */ + +/* 2136 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2138 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2140 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 2142 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2144 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2146 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure removeSelection */ + +/* 2148 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2150 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2154 */ NdrFcShort( 0xe ), /* 14 */ +/* 2156 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2158 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2160 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2162 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2164 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2166 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2168 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2170 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2172 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter selectionIndex */ + +/* 2174 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2176 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2178 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2180 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2182 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2184 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure setCaretOffset */ + +/* 2186 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2188 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2192 */ NdrFcShort( 0xf ), /* 15 */ +/* 2194 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2196 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2198 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2200 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2202 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2208 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2210 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2212 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2214 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2216 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2218 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2220 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2222 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure setSelection */ + +/* 2224 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2226 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2230 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2232 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2234 */ NdrFcShort( 0x18 ), /* 24 */ +/* 2236 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2238 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 2240 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2242 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2244 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2246 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2248 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter selectionIndex */ + +/* 2250 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2252 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2254 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 2256 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2258 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2260 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2262 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2264 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2266 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2268 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2270 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2272 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nCharacters */ + +/* 2274 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2276 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2280 */ NdrFcShort( 0x11 ), /* 17 */ +/* 2282 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2284 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2286 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2288 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2290 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2294 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2296 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2298 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter nCharacters */ + +/* 2300 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2302 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2304 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2306 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2308 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2310 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure scrollSubstringTo */ + +/* 2312 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2314 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2318 */ NdrFcShort( 0x12 ), /* 18 */ +/* 2320 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2322 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2324 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2326 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 2328 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2330 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2332 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2334 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2336 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startIndex */ + +/* 2338 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2340 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2342 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endIndex */ + +/* 2344 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2346 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2348 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter scrollType */ + +/* 2350 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2352 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2354 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2356 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2358 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2360 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure scrollSubstringToPoint */ + +/* 2362 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2364 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2368 */ NdrFcShort( 0x13 ), /* 19 */ +/* 2370 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2372 */ NdrFcShort( 0x26 ), /* 38 */ +/* 2374 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2376 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x6, /* 6 */ +/* 2378 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2380 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2382 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2384 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2386 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startIndex */ + +/* 2388 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2390 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2392 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endIndex */ + +/* 2394 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2396 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2398 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter coordinateType */ + +/* 2400 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2402 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2404 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter x */ + +/* 2406 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2408 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2410 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter y */ + +/* 2412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2414 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2416 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2418 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2420 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2422 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_newText */ + +/* 2424 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2426 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2430 */ NdrFcShort( 0x14 ), /* 20 */ +/* 2432 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2434 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2436 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2438 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2440 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2442 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2444 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2446 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2448 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter newText */ + +/* 2450 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2452 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2454 */ NdrFcShort( 0x4fa ), /* Type Offset=1274 */ + + /* Return value */ + +/* 2456 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2458 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2460 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_oldText */ + +/* 2462 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2464 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2468 */ NdrFcShort( 0x15 ), /* 21 */ +/* 2470 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2472 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2474 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2476 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 2478 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2480 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2482 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2484 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2486 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter oldText */ + +/* 2488 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2490 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2492 */ NdrFcShort( 0x4fa ), /* Type Offset=1274 */ + + /* Return value */ + +/* 2494 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2496 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2498 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_attributeRange */ + +/* 2500 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2502 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2506 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2508 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2510 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2512 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2514 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x6, /* 6 */ +/* 2516 */ 0xa, /* 10 */ + 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ +/* 2518 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2520 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2522 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2524 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2526 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2528 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2530 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter filter */ + +/* 2532 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2534 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2536 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ + + /* Parameter startOffset */ + +/* 2538 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2540 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2542 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2544 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2546 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2548 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter attributeValues */ + +/* 2550 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2552 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2554 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 2556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2558 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2560 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure deleteText */ + +/* 2562 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2564 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2568 */ NdrFcShort( 0x4 ), /* 4 */ +/* 2570 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2572 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2574 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2576 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 2578 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2580 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2584 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2586 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + +/* 2588 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2592 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2594 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2598 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2602 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2604 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure insertText */ + +/* 2606 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2608 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2612 */ NdrFcShort( 0x5 ), /* 5 */ +/* 2614 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2616 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2618 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2620 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 2622 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2624 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2626 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2628 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2630 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2632 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2636 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter text */ + +/* 2638 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2642 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ + + /* Return value */ + +/* 2644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2646 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2648 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure cutText */ + +/* 2650 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2652 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2656 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2658 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2660 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2662 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2664 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 2666 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2668 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2672 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2674 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + +/* 2676 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2680 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2686 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2688 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2690 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2692 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure pasteText */ + +/* 2694 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2696 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2700 */ NdrFcShort( 0x7 ), /* 7 */ +/* 2702 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2704 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2706 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2708 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2710 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2712 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2714 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2716 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2718 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2720 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2722 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2724 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2728 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2730 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure replaceText */ + +/* 2732 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2734 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2738 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2740 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2742 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2744 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2746 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x4, /* 4 */ +/* 2748 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2752 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2756 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + +/* 2758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2762 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2764 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2766 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2768 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter text */ + +/* 2770 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2772 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2774 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ + + /* Return value */ + +/* 2776 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2778 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2780 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure setAttributes */ + +/* 2782 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2784 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2788 */ NdrFcShort( 0x9 ), /* 9 */ +/* 2790 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2792 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2794 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2796 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x4, /* 4 */ +/* 2798 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 2800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2802 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2804 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2806 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + +/* 2808 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2810 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2812 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2814 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2816 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2818 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter attributes */ + +/* 2820 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2822 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2824 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ + + /* Return value */ + +/* 2826 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2828 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2830 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_anchor */ + +/* 2832 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2834 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2838 */ NdrFcShort( 0x9 ), /* 9 */ +/* 2840 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2842 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2844 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2846 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 2848 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2850 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2852 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2854 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2856 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 2858 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2860 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2862 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter anchor */ + +/* 2864 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 2866 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2868 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 2870 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2872 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2874 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_anchorTarget */ + +/* 2876 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2878 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2882 */ NdrFcShort( 0xa ), /* 10 */ +/* 2884 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2886 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2888 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2890 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 2892 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2894 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2896 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2898 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2900 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 2902 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2904 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2906 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter anchorTarget */ + +/* 2908 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 2910 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2912 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 2914 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2916 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2918 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nRows */ + + + /* Procedure get_startIndex */ + +/* 2920 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2922 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2926 */ NdrFcShort( 0xb ), /* 11 */ +/* 2928 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2930 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2932 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2934 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2936 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2938 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2940 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2942 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2944 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowCount */ + + + /* Parameter index */ + +/* 2946 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2948 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2950 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 2952 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2954 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2956 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedChildren */ + + + /* Procedure get_endIndex */ + +/* 2958 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2960 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2964 */ NdrFcShort( 0xc ), /* 12 */ +/* 2966 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2968 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2970 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2972 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2974 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2976 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2978 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2980 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2982 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter cellCount */ + + + /* Parameter index */ + +/* 2984 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2986 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2988 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 2990 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2992 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2994 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_valid */ + +/* 2996 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2998 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3002 */ NdrFcShort( 0xd ), /* 13 */ +/* 3004 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3006 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3008 */ NdrFcShort( 0x21 ), /* 33 */ +/* 3010 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3012 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3014 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3016 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3018 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3020 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter valid */ + +/* 3022 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3024 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3026 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3028 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3030 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3032 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nHyperlinks */ + +/* 3034 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3036 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3040 */ NdrFcShort( 0x16 ), /* 22 */ +/* 3042 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3044 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3046 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3048 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3050 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3052 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3054 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3056 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3058 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter hyperlinkCount */ + +/* 3060 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3062 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3064 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3066 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3068 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3070 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_hyperlink */ + +/* 3072 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3074 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3078 */ NdrFcShort( 0x17 ), /* 23 */ +/* 3080 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3082 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3084 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3086 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3088 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3090 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3092 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3094 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3096 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 3098 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3100 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3102 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter hyperlink */ + +/* 3104 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3106 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3108 */ NdrFcShort( 0x512 ), /* Type Offset=1298 */ + + /* Return value */ + +/* 3110 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3112 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3114 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_hyperlinkIndex */ + +/* 3116 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3118 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3122 */ NdrFcShort( 0x18 ), /* 24 */ +/* 3124 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3126 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3128 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3130 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 3132 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3136 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3138 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3140 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter charIndex */ + +/* 3142 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3144 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3146 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter hyperlinkIndex */ + +/* 3148 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3150 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3152 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3154 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3156 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3158 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_hyperlinks */ + +/* 3160 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3162 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3166 */ NdrFcShort( 0x19 ), /* 25 */ +/* 3168 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3170 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3172 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3174 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3176 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3178 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3180 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3182 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3184 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter hyperlinks */ + +/* 3186 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3188 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3190 */ NdrFcShort( 0x528 ), /* Type Offset=1320 */ + + /* Parameter nHyperlinks */ + +/* 3192 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3194 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3196 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3198 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3200 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3202 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_cellAt */ + + + /* Procedure get_accessibleAt */ + +/* 3204 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3206 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3210 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3212 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3214 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3216 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3218 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 3220 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3222 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3224 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3226 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3228 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + + + /* Parameter row */ + +/* 3230 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3232 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3234 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + + + /* Parameter column */ + +/* 3236 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3238 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3240 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter cell */ + + + /* Parameter accessible */ + +/* 3242 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3244 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3246 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Return value */ + + + /* Return value */ + +/* 3248 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3250 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3252 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_caption */ + + + /* Procedure get_caption */ + +/* 3254 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3256 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3260 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3262 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3264 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3266 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3268 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 3270 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3272 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3274 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3276 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3278 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter accessible */ + + + /* Parameter accessible */ + +/* 3280 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3282 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3284 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Return value */ + + + /* Return value */ + +/* 3286 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3288 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3290 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_childIndex */ + +/* 3292 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3294 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3298 */ NdrFcShort( 0x5 ), /* 5 */ +/* 3300 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3302 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3304 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3306 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3308 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3310 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3312 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3314 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3316 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowIndex */ + +/* 3318 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3320 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3322 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter columnIndex */ + +/* 3324 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3326 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3328 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter cellIndex */ + +/* 3330 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3332 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3334 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3336 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3338 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3340 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnDescription */ + +/* 3342 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3344 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3348 */ NdrFcShort( 0x6 ), /* 6 */ +/* 3350 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3352 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3354 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3356 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3358 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3360 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3362 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3364 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3366 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + +/* 3368 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3370 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3372 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter description */ + +/* 3374 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 3376 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3378 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 3380 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3382 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3384 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnExtentAt */ + +/* 3386 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3388 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3392 */ NdrFcShort( 0x7 ), /* 7 */ +/* 3394 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3396 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3398 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3400 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3402 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3406 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3408 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3410 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 3412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3414 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3416 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 3418 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3420 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3422 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter nColumnsSpanned */ + +/* 3424 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3426 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3428 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3430 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3432 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3434 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnHeader */ + +/* 3436 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3438 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3442 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3444 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3446 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3448 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3450 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3452 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3454 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3456 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3458 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3460 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter accessibleTable */ + +/* 3462 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3464 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3466 */ NdrFcShort( 0x546 ), /* Type Offset=1350 */ + + /* Parameter startingRowIndex */ + +/* 3468 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3470 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3472 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3474 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3476 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3478 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnIndex */ + +/* 3480 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3482 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3486 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3488 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3490 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3492 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3494 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 3496 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3498 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3500 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3502 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3504 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter cellIndex */ + +/* 3506 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3508 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3510 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter columnIndex */ + +/* 3512 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3514 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3516 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3520 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3522 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedRows */ + + + /* Procedure get_nColumns */ + +/* 3524 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3526 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3530 */ NdrFcShort( 0xa ), /* 10 */ +/* 3532 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3534 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3536 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3538 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3540 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3542 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3544 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3546 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3548 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowCount */ + + + /* Parameter columnCount */ + +/* 3550 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3552 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3554 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 3556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3558 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3560 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedColumns */ + +/* 3562 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3564 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3568 */ NdrFcShort( 0xd ), /* 13 */ +/* 3570 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3572 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3574 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3576 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3578 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3580 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3584 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3586 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter columnCount */ + +/* 3588 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3592 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3594 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3598 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedRows */ + +/* 3600 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3602 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3606 */ NdrFcShort( 0xe ), /* 14 */ +/* 3608 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3610 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3612 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3614 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3616 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3618 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3620 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3622 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3624 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowCount */ + +/* 3626 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3628 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3630 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3632 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3634 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3636 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowDescription */ + +/* 3638 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3640 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3644 */ NdrFcShort( 0xf ), /* 15 */ +/* 3646 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3648 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3650 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3652 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3654 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3656 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3658 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3660 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3662 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 3664 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3666 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3668 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter description */ + +/* 3670 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 3672 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3674 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 3676 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3678 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3680 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowExtentAt */ + +/* 3682 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3684 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3688 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3690 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3692 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3694 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3696 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3698 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3700 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3702 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3704 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3706 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 3708 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3710 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3712 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 3714 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3716 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3718 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter nRowsSpanned */ + +/* 3720 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3722 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3724 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3728 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3730 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowHeader */ + +/* 3732 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3734 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3738 */ NdrFcShort( 0x11 ), /* 17 */ +/* 3740 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3742 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3744 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3746 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3748 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3756 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter accessibleTable */ + +/* 3758 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3762 */ NdrFcShort( 0x546 ), /* Type Offset=1350 */ + + /* Parameter startingColumnIndex */ + +/* 3764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3766 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3768 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3772 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3774 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowIndex */ + +/* 3776 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3778 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3782 */ NdrFcShort( 0x12 ), /* 18 */ +/* 3784 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3786 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3788 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3790 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 3792 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3794 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3796 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3798 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3800 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter cellIndex */ + +/* 3802 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3806 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter rowIndex */ + +/* 3808 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3812 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3816 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3818 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selectedChildren */ + +/* 3820 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3822 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3826 */ NdrFcShort( 0x13 ), /* 19 */ +/* 3828 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3830 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3832 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3834 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 3836 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3838 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3840 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3842 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3844 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxChildren */ + +/* 3846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3848 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3850 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter children */ + +/* 3852 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3854 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3856 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */ + + /* Parameter nChildren */ + +/* 3858 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3860 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3862 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3864 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3866 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3868 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selectedColumns */ + +/* 3870 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3872 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3876 */ NdrFcShort( 0x14 ), /* 20 */ +/* 3878 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3880 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3882 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3884 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 3886 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3888 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3890 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3892 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3894 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxColumns */ + +/* 3896 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3898 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3900 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter columns */ + +/* 3902 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3904 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3906 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */ + + /* Parameter nColumns */ + +/* 3908 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3910 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3912 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3914 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3916 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3918 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selectedRows */ + +/* 3920 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3922 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3926 */ NdrFcShort( 0x15 ), /* 21 */ +/* 3928 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3930 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3932 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3934 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 3936 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3938 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3940 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3942 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3944 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxRows */ + +/* 3946 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3948 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3950 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter rows */ + +/* 3952 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3954 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3956 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */ + + /* Parameter nRows */ + +/* 3958 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3960 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3962 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3964 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3966 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3968 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_summary */ + +/* 3970 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3972 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3976 */ NdrFcShort( 0x16 ), /* 22 */ +/* 3978 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3980 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3982 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3984 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 3986 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3988 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3990 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3992 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3994 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter accessible */ + +/* 3996 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3998 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4000 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Return value */ + +/* 4002 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4004 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4006 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isColumnSelected */ + +/* 4008 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4010 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4014 */ NdrFcShort( 0x17 ), /* 23 */ +/* 4016 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4018 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4020 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4022 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 4024 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4026 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4028 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4030 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4032 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + +/* 4034 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4036 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4038 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4040 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4042 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4044 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4046 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4048 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4050 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isRowSelected */ + +/* 4052 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4054 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4058 */ NdrFcShort( 0x18 ), /* 24 */ +/* 4060 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4062 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4064 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4066 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 4068 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4070 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4072 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4074 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4076 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4078 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4080 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4082 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4084 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4086 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4088 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4090 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4092 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4094 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 4096 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4098 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4102 */ NdrFcShort( 0x19 ), /* 25 */ +/* 4104 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4106 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4108 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4110 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 4112 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4114 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4116 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4118 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4120 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4122 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4124 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4126 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 4128 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4130 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4132 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4134 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4136 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4138 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4142 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4144 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure selectRow */ + +/* 4146 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4148 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4152 */ NdrFcShort( 0x1a ), /* 26 */ +/* 4154 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4156 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4158 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4160 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4162 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4164 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4166 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4168 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4170 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4172 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4174 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4176 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4178 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4180 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4182 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure selectColumn */ + +/* 4184 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4186 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4190 */ NdrFcShort( 0x1b ), /* 27 */ +/* 4192 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4194 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4196 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4198 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4200 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4202 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4208 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + +/* 4210 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4212 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4214 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4216 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4218 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4220 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure unselectRow */ + +/* 4222 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4224 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4228 */ NdrFcShort( 0x1c ), /* 28 */ +/* 4230 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4232 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4234 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4236 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4238 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4240 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4242 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4244 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4246 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4248 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4250 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4252 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4254 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4256 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4258 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure unselectColumn */ + +/* 4260 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4262 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4266 */ NdrFcShort( 0x1d ), /* 29 */ +/* 4268 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4270 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4272 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4274 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4276 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4278 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4280 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4282 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4284 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + +/* 4286 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4288 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4290 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4292 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4294 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4296 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowColumnExtentsAtIndex */ + +/* 4298 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4300 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4304 */ NdrFcShort( 0x1e ), /* 30 */ +/* 4306 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 4308 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4310 */ NdrFcShort( 0x91 ), /* 145 */ +/* 4312 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x7, /* 7 */ +/* 4314 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4316 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4318 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4320 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4322 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 4324 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4326 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4328 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter row */ + +/* 4330 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4332 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4334 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 4336 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4338 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4340 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter rowExtents */ + +/* 4342 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4344 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4346 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter columnExtents */ + +/* 4348 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4350 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4352 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4354 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4356 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 4358 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4362 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 4364 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_modelChange */ + +/* 4366 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4368 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4372 */ NdrFcShort( 0x1f ), /* 31 */ +/* 4374 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4376 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4378 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4380 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4382 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4384 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4386 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4388 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4390 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter modelChange */ + +/* 4392 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 4394 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4396 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */ + + /* Return value */ + +/* 4398 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4400 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4402 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowExtent */ + + + /* Procedure get_nColumns */ + +/* 4404 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4406 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4410 */ NdrFcShort( 0x6 ), /* 6 */ +/* 4412 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4414 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4416 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4418 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4420 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4422 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4424 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4426 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4428 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter nRowsSpanned */ + + + /* Parameter columnCount */ + +/* 4430 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4432 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4434 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 4436 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4438 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4440 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowIndex */ + + + /* Procedure get_nSelectedCells */ + +/* 4442 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4444 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4448 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4450 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4452 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4454 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4456 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4458 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4460 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4462 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4464 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4466 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowIndex */ + + + /* Parameter cellCount */ + +/* 4468 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4470 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4472 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + + + /* Return value */ + +/* 4474 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4476 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4478 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedColumns */ + +/* 4480 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4482 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4486 */ NdrFcShort( 0x9 ), /* 9 */ +/* 4488 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4490 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4492 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4494 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4496 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4498 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4500 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4502 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4504 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter columnCount */ + +/* 4506 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4508 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4510 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4512 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4514 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4516 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowDescription */ + +/* 4518 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4520 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4524 */ NdrFcShort( 0xb ), /* 11 */ +/* 4526 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4528 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4530 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4532 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4534 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4536 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4538 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4540 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4542 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4544 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4546 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4548 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter description */ + +/* 4550 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 4552 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4554 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 4556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4558 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4560 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selectedCells */ + +/* 4562 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4564 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4568 */ NdrFcShort( 0xc ), /* 12 */ +/* 4570 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4572 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4574 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4576 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4578 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4580 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4584 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4586 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter cells */ + +/* 4588 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4592 */ NdrFcShort( 0x588 ), /* Type Offset=1416 */ + + /* Parameter nSelectedCells */ + +/* 4594 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4598 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4602 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4604 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selectedColumns */ + +/* 4606 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4608 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4612 */ NdrFcShort( 0xd ), /* 13 */ +/* 4614 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4616 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4618 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4620 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4622 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4624 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4626 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4628 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4630 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter selectedColumns */ + +/* 4632 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4636 */ NdrFcShort( 0x5a6 ), /* Type Offset=1446 */ + + /* Parameter nColumns */ + +/* 4638 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4642 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4646 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4648 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selectedRows */ + +/* 4650 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4652 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4656 */ NdrFcShort( 0xe ), /* 14 */ +/* 4658 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4660 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4662 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4664 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4666 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4668 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4672 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4674 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter selectedRows */ + +/* 4676 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4680 */ NdrFcShort( 0x5a6 ), /* Type Offset=1446 */ + + /* Parameter nRows */ + +/* 4682 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4686 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4688 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4690 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4692 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_summary */ + +/* 4694 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4696 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4700 */ NdrFcShort( 0xf ), /* 15 */ +/* 4702 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4704 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4706 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4708 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4710 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4712 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4714 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4716 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4718 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter accessible */ + +/* 4720 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4722 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4724 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Return value */ + +/* 4726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4728 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4730 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isColumnSelected */ + +/* 4732 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4734 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4738 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4740 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4742 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4744 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4746 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 4748 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4756 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + +/* 4758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4762 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4766 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4768 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4772 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4774 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isRowSelected */ + +/* 4776 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4778 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4782 */ NdrFcShort( 0x11 ), /* 17 */ +/* 4784 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4786 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4788 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4790 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 4792 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4794 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4796 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4798 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4800 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4802 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4806 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4808 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4812 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4816 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4818 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure selectRow */ + +/* 4820 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4822 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4826 */ NdrFcShort( 0x12 ), /* 18 */ +/* 4828 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4830 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4832 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4834 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4836 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4838 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4840 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4842 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4844 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4848 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4850 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4852 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4854 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4856 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure selectColumn */ + +/* 4858 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4860 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4864 */ NdrFcShort( 0x13 ), /* 19 */ +/* 4866 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4868 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4870 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4872 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4874 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4876 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4878 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4880 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4882 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + +/* 4884 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4886 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4888 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4890 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4892 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4894 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure unselectRow */ + +/* 4896 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4898 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4902 */ NdrFcShort( 0x14 ), /* 20 */ +/* 4904 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4906 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4908 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4910 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4912 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4914 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4916 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4918 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4920 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4922 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4924 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4926 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4928 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4930 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4932 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure unselectColumn */ + +/* 4934 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4936 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4940 */ NdrFcShort( 0x15 ), /* 21 */ +/* 4942 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4944 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4946 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4948 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4950 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4952 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4954 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4956 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4958 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter column */ + +/* 4960 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4962 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4964 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4966 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4968 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4970 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_modelChange */ + +/* 4972 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4974 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4978 */ NdrFcShort( 0x16 ), /* 22 */ +/* 4980 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4982 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4984 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4986 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4988 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4990 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4992 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4994 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4996 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter modelChange */ + +/* 4998 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 5000 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5002 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */ + + /* Return value */ + +/* 5004 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5006 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5008 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnHeaderCells */ + +/* 5010 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5012 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5016 */ NdrFcShort( 0x4 ), /* 4 */ +/* 5018 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5020 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5022 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5024 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 5026 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5028 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5030 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5032 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5034 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter cellAccessibles */ + +/* 5036 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 5038 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5040 */ NdrFcShort( 0x588 ), /* Type Offset=1416 */ + + /* Parameter nColumnHeaderCells */ + +/* 5042 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5044 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5046 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5048 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5050 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5052 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowHeaderCells */ + +/* 5054 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5056 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5060 */ NdrFcShort( 0x7 ), /* 7 */ +/* 5062 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5066 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5068 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 5070 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5072 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5074 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5076 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5078 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter cellAccessibles */ + +/* 5080 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 5082 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5084 */ NdrFcShort( 0x588 ), /* Type Offset=1416 */ + + /* Parameter nRowHeaderCells */ + +/* 5086 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5088 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5090 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5092 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5094 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5096 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 5098 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5100 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5104 */ NdrFcShort( 0x9 ), /* 9 */ +/* 5106 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5108 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5110 */ NdrFcShort( 0x21 ), /* 33 */ +/* 5112 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 5114 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5116 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5118 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5120 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5122 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter isSelected */ + +/* 5124 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5126 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5128 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5130 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5132 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5134 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowColumnExtents */ + +/* 5136 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5138 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5142 */ NdrFcShort( 0xa ), /* 10 */ +/* 5144 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 5146 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5148 */ NdrFcShort( 0x91 ), /* 145 */ +/* 5150 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x6, /* 6 */ +/* 5152 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5154 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5156 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5158 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5160 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 5162 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5164 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5166 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 5168 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5170 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5172 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter rowExtents */ + +/* 5174 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5176 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5178 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter columnExtents */ + +/* 5180 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5182 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5184 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 5186 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5188 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 5190 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5194 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 5196 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_table */ + +/* 5198 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5200 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5204 */ NdrFcShort( 0xb ), /* 11 */ +/* 5206 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5208 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5210 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5212 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 5214 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5216 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5218 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5220 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5222 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter table */ + +/* 5224 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5226 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5228 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Return value */ + +/* 5230 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5232 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5234 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_imagePosition */ + +/* 5236 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5238 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5242 */ NdrFcShort( 0x4 ), /* 4 */ +/* 5244 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 5246 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5248 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5250 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 5252 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5254 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5256 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5258 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5260 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter coordinateType */ + +/* 5262 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5264 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5266 */ 0xd, /* FC_ENUM16 */ + 0x0, /* 0 */ + + /* Parameter x */ + +/* 5268 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5270 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5272 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter y */ + +/* 5274 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5276 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5278 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5280 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5282 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5284 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_imageSize */ + +/* 5286 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5288 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5292 */ NdrFcShort( 0x5 ), /* 5 */ +/* 5294 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5296 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5298 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5300 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 5302 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5304 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5306 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5308 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5310 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter height */ + +/* 5312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5314 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5316 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter width */ + +/* 5318 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5320 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5322 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5324 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5326 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5328 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_toolkitName */ + +/* 5330 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5332 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5336 */ NdrFcShort( 0x5 ), /* 5 */ +/* 5338 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5340 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5342 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5344 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 5346 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5348 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5350 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5352 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5354 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter name */ + +/* 5356 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5358 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5360 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 5362 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5364 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5366 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_toolkitVersion */ + +/* 5368 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5370 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5374 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5376 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5378 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5380 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5382 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 5384 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5386 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5388 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5390 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5392 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter version */ + +/* 5394 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5396 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5398 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 5400 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5402 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5404 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_anchorTarget */ + +/* 5406 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5408 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5412 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5414 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5416 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5418 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5420 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 5422 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5424 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5426 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5428 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5430 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter accessible */ + +/* 5432 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5434 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5436 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ + + /* Return value */ + +/* 5438 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5440 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5442 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const ia2_api_all_MIDL_TYPE_FORMAT_STRING ia2_api_all__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */ +/* 6 */ + 0x13, 0x0, /* FC_OP */ +/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */ +/* 10 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 12 */ NdrFcShort( 0x2 ), /* 2 */ +/* 14 */ 0x9, /* Corr desc: FC_ULONG */ + 0x0, /* */ +/* 16 */ NdrFcShort( 0xfffc ), /* -4 */ +/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 20 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 22 */ + 0x17, /* FC_CSTRUCT */ + 0x3, /* 3 */ +/* 24 */ NdrFcShort( 0x8 ), /* 8 */ +/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */ +/* 28 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 30 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 32 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 34 */ NdrFcShort( 0x0 ), /* 0 */ +/* 36 */ NdrFcShort( 0x8 ), /* 8 */ +/* 38 */ NdrFcShort( 0x0 ), /* 0 */ +/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */ +/* 42 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 44 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 46 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */ +/* 50 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 52 */ NdrFcLong( 0x0 ), /* 0 */ +/* 56 */ NdrFcShort( 0x0 ), /* 0 */ +/* 58 */ NdrFcShort( 0x0 ), /* 0 */ +/* 60 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 62 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 64 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 66 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 68 */ + 0x11, 0x0, /* FC_RP */ +/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */ +/* 72 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 74 */ NdrFcShort( 0x0 ), /* 0 */ +/* 76 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 78 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 80 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 82 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 86 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 88 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 90 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (50) */ +/* 92 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 94 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 96 */ NdrFcShort( 0x2 ), /* Offset= 2 (98) */ +/* 98 */ + 0x13, 0x0, /* FC_OP */ +/* 100 */ NdrFcShort( 0x2 ), /* Offset= 2 (102) */ +/* 102 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 106 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 108 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 110 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 112 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 114 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 116 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 118 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 120 */ NdrFcShort( 0xffa8 ), /* Offset= -88 (32) */ +/* 122 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 124 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 126 */ NdrFcShort( 0x2 ), /* Offset= 2 (128) */ +/* 128 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 130 */ NdrFcLong( 0x7cdf86ee ), /* 2095023854 */ +/* 134 */ NdrFcShort( 0xc3da ), /* -15398 */ +/* 136 */ NdrFcShort( 0x496a ), /* 18794 */ +/* 138 */ 0xbd, /* 189 */ + 0xa4, /* 164 */ +/* 140 */ 0x28, /* 40 */ + 0x1b, /* 27 */ +/* 142 */ 0x33, /* 51 */ + 0x6e, /* 110 */ +/* 144 */ 0x1f, /* 31 */ + 0xdc, /* 220 */ +/* 146 */ + 0x11, 0x0, /* FC_RP */ +/* 148 */ NdrFcShort( 0x2 ), /* Offset= 2 (150) */ +/* 150 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 152 */ NdrFcShort( 0x0 ), /* 0 */ +/* 154 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 156 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 158 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 160 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 162 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 164 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 166 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 168 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (128) */ +/* 170 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 172 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 174 */ NdrFcShort( 0x2 ), /* Offset= 2 (176) */ +/* 176 */ + 0x13, 0x0, /* FC_OP */ +/* 178 */ NdrFcShort( 0x2 ), /* Offset= 2 (180) */ +/* 180 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 182 */ NdrFcShort( 0x0 ), /* 0 */ +/* 184 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 188 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 190 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 192 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 194 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 196 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 198 */ NdrFcShort( 0xff5a ), /* Offset= -166 (32) */ +/* 200 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 202 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 204 */ NdrFcShort( 0x1a ), /* Offset= 26 (230) */ +/* 206 */ + 0x13, 0x0, /* FC_OP */ +/* 208 */ NdrFcShort( 0x2 ), /* Offset= 2 (210) */ +/* 210 */ + 0x2a, /* FC_ENCAPSULATED_UNION */ + 0x48, /* 72 */ +/* 212 */ NdrFcShort( 0x4 ), /* 4 */ +/* 214 */ NdrFcShort( 0x2 ), /* 2 */ +/* 216 */ NdrFcLong( 0x48746457 ), /* 1215587415 */ +/* 220 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 222 */ NdrFcLong( 0x52746457 ), /* 1383359575 */ +/* 226 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 228 */ NdrFcShort( 0xffff ), /* Offset= -1 (227) */ +/* 230 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 232 */ NdrFcShort( 0x1 ), /* 1 */ +/* 234 */ NdrFcShort( 0x8 ), /* 8 */ +/* 236 */ NdrFcShort( 0x0 ), /* 0 */ +/* 238 */ NdrFcShort( 0xffe0 ), /* Offset= -32 (206) */ +/* 240 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 242 */ NdrFcShort( 0x2 ), /* Offset= 2 (244) */ +/* 244 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 246 */ NdrFcShort( 0x18 ), /* 24 */ +/* 248 */ NdrFcShort( 0x0 ), /* 0 */ +/* 250 */ NdrFcShort( 0x0 ), /* Offset= 0 (250) */ +/* 252 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 254 */ NdrFcShort( 0xff22 ), /* Offset= -222 (32) */ +/* 256 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 258 */ NdrFcShort( 0xff1e ), /* Offset= -226 (32) */ +/* 260 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 262 */ NdrFcShort( 0xff1a ), /* Offset= -230 (32) */ +/* 264 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 266 */ + 0x12, 0x0, /* FC_UP */ +/* 268 */ NdrFcShort( 0xff0a ), /* Offset= -246 (22) */ +/* 270 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 272 */ NdrFcShort( 0x0 ), /* 0 */ +/* 274 */ NdrFcShort( 0x8 ), /* 8 */ +/* 276 */ NdrFcShort( 0x0 ), /* 0 */ +/* 278 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (266) */ +/* 280 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 282 */ NdrFcShort( 0x3a2 ), /* Offset= 930 (1212) */ +/* 284 */ + 0x13, 0x0, /* FC_OP */ +/* 286 */ NdrFcShort( 0x38a ), /* Offset= 906 (1192) */ +/* 288 */ + 0x2b, /* FC_NON_ENCAPSULATED_UNION */ + 0x9, /* FC_ULONG */ +/* 290 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 292 */ NdrFcShort( 0xfff8 ), /* -8 */ +/* 294 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 296 */ NdrFcShort( 0x2 ), /* Offset= 2 (298) */ +/* 298 */ NdrFcShort( 0x10 ), /* 16 */ +/* 300 */ NdrFcShort( 0x2f ), /* 47 */ +/* 302 */ NdrFcLong( 0x14 ), /* 20 */ +/* 306 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */ +/* 308 */ NdrFcLong( 0x3 ), /* 3 */ +/* 312 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 314 */ NdrFcLong( 0x11 ), /* 17 */ +/* 318 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */ +/* 320 */ NdrFcLong( 0x2 ), /* 2 */ +/* 324 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 326 */ NdrFcLong( 0x4 ), /* 4 */ +/* 330 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */ +/* 332 */ NdrFcLong( 0x5 ), /* 5 */ +/* 336 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 338 */ NdrFcLong( 0xb ), /* 11 */ +/* 342 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 344 */ NdrFcLong( 0xa ), /* 10 */ +/* 348 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 350 */ NdrFcLong( 0x6 ), /* 6 */ +/* 354 */ NdrFcShort( 0xe8 ), /* Offset= 232 (586) */ +/* 356 */ NdrFcLong( 0x7 ), /* 7 */ +/* 360 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 362 */ NdrFcLong( 0x8 ), /* 8 */ +/* 366 */ NdrFcShort( 0xfe98 ), /* Offset= -360 (6) */ +/* 368 */ NdrFcLong( 0xd ), /* 13 */ +/* 372 */ NdrFcShort( 0xfebe ), /* Offset= -322 (50) */ +/* 374 */ NdrFcLong( 0x9 ), /* 9 */ +/* 378 */ NdrFcShort( 0xd6 ), /* Offset= 214 (592) */ +/* 380 */ NdrFcLong( 0x2000 ), /* 8192 */ +/* 384 */ NdrFcShort( 0xe2 ), /* Offset= 226 (610) */ +/* 386 */ NdrFcLong( 0x24 ), /* 36 */ +/* 390 */ NdrFcShort( 0x2d8 ), /* Offset= 728 (1118) */ +/* 392 */ NdrFcLong( 0x4024 ), /* 16420 */ +/* 396 */ NdrFcShort( 0x2d2 ), /* Offset= 722 (1118) */ +/* 398 */ NdrFcLong( 0x4011 ), /* 16401 */ +/* 402 */ NdrFcShort( 0x2d0 ), /* Offset= 720 (1122) */ +/* 404 */ NdrFcLong( 0x4002 ), /* 16386 */ +/* 408 */ NdrFcShort( 0x2ce ), /* Offset= 718 (1126) */ +/* 410 */ NdrFcLong( 0x4003 ), /* 16387 */ +/* 414 */ NdrFcShort( 0x2cc ), /* Offset= 716 (1130) */ +/* 416 */ NdrFcLong( 0x4014 ), /* 16404 */ +/* 420 */ NdrFcShort( 0x2ca ), /* Offset= 714 (1134) */ +/* 422 */ NdrFcLong( 0x4004 ), /* 16388 */ +/* 426 */ NdrFcShort( 0x2c8 ), /* Offset= 712 (1138) */ +/* 428 */ NdrFcLong( 0x4005 ), /* 16389 */ +/* 432 */ NdrFcShort( 0x2c6 ), /* Offset= 710 (1142) */ +/* 434 */ NdrFcLong( 0x400b ), /* 16395 */ +/* 438 */ NdrFcShort( 0x2b0 ), /* Offset= 688 (1126) */ +/* 440 */ NdrFcLong( 0x400a ), /* 16394 */ +/* 444 */ NdrFcShort( 0x2ae ), /* Offset= 686 (1130) */ +/* 446 */ NdrFcLong( 0x4006 ), /* 16390 */ +/* 450 */ NdrFcShort( 0x2b8 ), /* Offset= 696 (1146) */ +/* 452 */ NdrFcLong( 0x4007 ), /* 16391 */ +/* 456 */ NdrFcShort( 0x2ae ), /* Offset= 686 (1142) */ +/* 458 */ NdrFcLong( 0x4008 ), /* 16392 */ +/* 462 */ NdrFcShort( 0x2b0 ), /* Offset= 688 (1150) */ +/* 464 */ NdrFcLong( 0x400d ), /* 16397 */ +/* 468 */ NdrFcShort( 0x2ae ), /* Offset= 686 (1154) */ +/* 470 */ NdrFcLong( 0x4009 ), /* 16393 */ +/* 474 */ NdrFcShort( 0x2ac ), /* Offset= 684 (1158) */ +/* 476 */ NdrFcLong( 0x6000 ), /* 24576 */ +/* 480 */ NdrFcShort( 0x2aa ), /* Offset= 682 (1162) */ +/* 482 */ NdrFcLong( 0x400c ), /* 16396 */ +/* 486 */ NdrFcShort( 0x2a8 ), /* Offset= 680 (1166) */ +/* 488 */ NdrFcLong( 0x10 ), /* 16 */ +/* 492 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */ +/* 494 */ NdrFcLong( 0x12 ), /* 18 */ +/* 498 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 500 */ NdrFcLong( 0x13 ), /* 19 */ +/* 504 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 506 */ NdrFcLong( 0x15 ), /* 21 */ +/* 510 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */ +/* 512 */ NdrFcLong( 0x16 ), /* 22 */ +/* 516 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 518 */ NdrFcLong( 0x17 ), /* 23 */ +/* 522 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 524 */ NdrFcLong( 0xe ), /* 14 */ +/* 528 */ NdrFcShort( 0x286 ), /* Offset= 646 (1174) */ +/* 530 */ NdrFcLong( 0x400e ), /* 16398 */ +/* 534 */ NdrFcShort( 0x28a ), /* Offset= 650 (1184) */ +/* 536 */ NdrFcLong( 0x4010 ), /* 16400 */ +/* 540 */ NdrFcShort( 0x288 ), /* Offset= 648 (1188) */ +/* 542 */ NdrFcLong( 0x4012 ), /* 16402 */ +/* 546 */ NdrFcShort( 0x244 ), /* Offset= 580 (1126) */ +/* 548 */ NdrFcLong( 0x4013 ), /* 16403 */ +/* 552 */ NdrFcShort( 0x242 ), /* Offset= 578 (1130) */ +/* 554 */ NdrFcLong( 0x4015 ), /* 16405 */ +/* 558 */ NdrFcShort( 0x240 ), /* Offset= 576 (1134) */ +/* 560 */ NdrFcLong( 0x4016 ), /* 16406 */ +/* 564 */ NdrFcShort( 0x236 ), /* Offset= 566 (1130) */ +/* 566 */ NdrFcLong( 0x4017 ), /* 16407 */ +/* 570 */ NdrFcShort( 0x230 ), /* Offset= 560 (1130) */ +/* 572 */ NdrFcLong( 0x0 ), /* 0 */ +/* 576 */ NdrFcShort( 0x0 ), /* Offset= 0 (576) */ +/* 578 */ NdrFcLong( 0x1 ), /* 1 */ +/* 582 */ NdrFcShort( 0x0 ), /* Offset= 0 (582) */ +/* 584 */ NdrFcShort( 0xffff ), /* Offset= -1 (583) */ +/* 586 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 588 */ NdrFcShort( 0x8 ), /* 8 */ +/* 590 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 592 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 594 */ NdrFcLong( 0x20400 ), /* 132096 */ +/* 598 */ NdrFcShort( 0x0 ), /* 0 */ +/* 600 */ NdrFcShort( 0x0 ), /* 0 */ +/* 602 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 604 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 606 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 608 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 610 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 612 */ NdrFcShort( 0x2 ), /* Offset= 2 (614) */ +/* 614 */ + 0x13, 0x0, /* FC_OP */ +/* 616 */ NdrFcShort( 0x1e4 ), /* Offset= 484 (1100) */ +/* 618 */ + 0x2a, /* FC_ENCAPSULATED_UNION */ + 0x89, /* 137 */ +/* 620 */ NdrFcShort( 0x20 ), /* 32 */ +/* 622 */ NdrFcShort( 0xa ), /* 10 */ +/* 624 */ NdrFcLong( 0x8 ), /* 8 */ +/* 628 */ NdrFcShort( 0x50 ), /* Offset= 80 (708) */ +/* 630 */ NdrFcLong( 0xd ), /* 13 */ +/* 634 */ NdrFcShort( 0x70 ), /* Offset= 112 (746) */ +/* 636 */ NdrFcLong( 0x9 ), /* 9 */ +/* 640 */ NdrFcShort( 0x90 ), /* Offset= 144 (784) */ +/* 642 */ NdrFcLong( 0xc ), /* 12 */ +/* 646 */ NdrFcShort( 0xb0 ), /* Offset= 176 (822) */ +/* 648 */ NdrFcLong( 0x24 ), /* 36 */ +/* 652 */ NdrFcShort( 0x102 ), /* Offset= 258 (910) */ +/* 654 */ NdrFcLong( 0x800d ), /* 32781 */ +/* 658 */ NdrFcShort( 0x11e ), /* Offset= 286 (944) */ +/* 660 */ NdrFcLong( 0x10 ), /* 16 */ +/* 664 */ NdrFcShort( 0x138 ), /* Offset= 312 (976) */ +/* 666 */ NdrFcLong( 0x2 ), /* 2 */ +/* 670 */ NdrFcShort( 0x14e ), /* Offset= 334 (1004) */ +/* 672 */ NdrFcLong( 0x3 ), /* 3 */ +/* 676 */ NdrFcShort( 0x164 ), /* Offset= 356 (1032) */ +/* 678 */ NdrFcLong( 0x14 ), /* 20 */ +/* 682 */ NdrFcShort( 0x17a ), /* Offset= 378 (1060) */ +/* 684 */ NdrFcShort( 0xffff ), /* Offset= -1 (683) */ +/* 686 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 688 */ NdrFcShort( 0x0 ), /* 0 */ +/* 690 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 692 */ NdrFcShort( 0x0 ), /* 0 */ +/* 694 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 696 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 700 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 702 */ + 0x13, 0x0, /* FC_OP */ +/* 704 */ NdrFcShort( 0xfd56 ), /* Offset= -682 (22) */ +/* 706 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 708 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 710 */ NdrFcShort( 0x10 ), /* 16 */ +/* 712 */ NdrFcShort( 0x0 ), /* 0 */ +/* 714 */ NdrFcShort( 0x6 ), /* Offset= 6 (720) */ +/* 716 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 718 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 720 */ + 0x11, 0x0, /* FC_RP */ +/* 722 */ NdrFcShort( 0xffdc ), /* Offset= -36 (686) */ +/* 724 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 726 */ NdrFcShort( 0x0 ), /* 0 */ +/* 728 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 730 */ NdrFcShort( 0x0 ), /* 0 */ +/* 732 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 734 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 738 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 740 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 742 */ NdrFcShort( 0xfd4c ), /* Offset= -692 (50) */ +/* 744 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 746 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 748 */ NdrFcShort( 0x10 ), /* 16 */ +/* 750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 752 */ NdrFcShort( 0x6 ), /* Offset= 6 (758) */ +/* 754 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 756 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 758 */ + 0x11, 0x0, /* FC_RP */ +/* 760 */ NdrFcShort( 0xffdc ), /* Offset= -36 (724) */ +/* 762 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 764 */ NdrFcShort( 0x0 ), /* 0 */ +/* 766 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 768 */ NdrFcShort( 0x0 ), /* 0 */ +/* 770 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 772 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 776 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 778 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 780 */ NdrFcShort( 0xff44 ), /* Offset= -188 (592) */ +/* 782 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 784 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 786 */ NdrFcShort( 0x10 ), /* 16 */ +/* 788 */ NdrFcShort( 0x0 ), /* 0 */ +/* 790 */ NdrFcShort( 0x6 ), /* Offset= 6 (796) */ +/* 792 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 794 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 796 */ + 0x11, 0x0, /* FC_RP */ +/* 798 */ NdrFcShort( 0xffdc ), /* Offset= -36 (762) */ +/* 800 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 802 */ NdrFcShort( 0x0 ), /* 0 */ +/* 804 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 806 */ NdrFcShort( 0x0 ), /* 0 */ +/* 808 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 810 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 814 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 816 */ + 0x13, 0x0, /* FC_OP */ +/* 818 */ NdrFcShort( 0x176 ), /* Offset= 374 (1192) */ +/* 820 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 822 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 824 */ NdrFcShort( 0x10 ), /* 16 */ +/* 826 */ NdrFcShort( 0x0 ), /* 0 */ +/* 828 */ NdrFcShort( 0x6 ), /* Offset= 6 (834) */ +/* 830 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 832 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 834 */ + 0x11, 0x0, /* FC_RP */ +/* 836 */ NdrFcShort( 0xffdc ), /* Offset= -36 (800) */ +/* 838 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 840 */ NdrFcLong( 0x2f ), /* 47 */ +/* 844 */ NdrFcShort( 0x0 ), /* 0 */ +/* 846 */ NdrFcShort( 0x0 ), /* 0 */ +/* 848 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 850 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 852 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 854 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 856 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 858 */ NdrFcShort( 0x1 ), /* 1 */ +/* 860 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 862 */ NdrFcShort( 0x4 ), /* 4 */ +/* 864 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 866 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 868 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 870 */ NdrFcShort( 0x18 ), /* 24 */ +/* 872 */ NdrFcShort( 0x0 ), /* 0 */ +/* 874 */ NdrFcShort( 0xa ), /* Offset= 10 (884) */ +/* 876 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 878 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 880 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (838) */ +/* 882 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 884 */ + 0x13, 0x0, /* FC_OP */ +/* 886 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (856) */ +/* 888 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 890 */ NdrFcShort( 0x0 ), /* 0 */ +/* 892 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 894 */ NdrFcShort( 0x0 ), /* 0 */ +/* 896 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 898 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 902 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 904 */ + 0x13, 0x0, /* FC_OP */ +/* 906 */ NdrFcShort( 0xffda ), /* Offset= -38 (868) */ +/* 908 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 910 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 912 */ NdrFcShort( 0x10 ), /* 16 */ +/* 914 */ NdrFcShort( 0x0 ), /* 0 */ +/* 916 */ NdrFcShort( 0x6 ), /* Offset= 6 (922) */ +/* 918 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 920 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 922 */ + 0x11, 0x0, /* FC_RP */ +/* 924 */ NdrFcShort( 0xffdc ), /* Offset= -36 (888) */ +/* 926 */ + 0x1d, /* FC_SMFARRAY */ + 0x0, /* 0 */ +/* 928 */ NdrFcShort( 0x8 ), /* 8 */ +/* 930 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 932 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 934 */ NdrFcShort( 0x10 ), /* 16 */ +/* 936 */ 0x8, /* FC_LONG */ + 0x6, /* FC_SHORT */ +/* 938 */ 0x6, /* FC_SHORT */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 940 */ 0x0, /* 0 */ + NdrFcShort( 0xfff1 ), /* Offset= -15 (926) */ + 0x5b, /* FC_END */ +/* 944 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 946 */ NdrFcShort( 0x20 ), /* 32 */ +/* 948 */ NdrFcShort( 0x0 ), /* 0 */ +/* 950 */ NdrFcShort( 0xa ), /* Offset= 10 (960) */ +/* 952 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 954 */ 0x36, /* FC_POINTER */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 956 */ 0x0, /* 0 */ + NdrFcShort( 0xffe7 ), /* Offset= -25 (932) */ + 0x5b, /* FC_END */ +/* 960 */ + 0x11, 0x0, /* FC_RP */ +/* 962 */ NdrFcShort( 0xff12 ), /* Offset= -238 (724) */ +/* 964 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 966 */ NdrFcShort( 0x1 ), /* 1 */ +/* 968 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 970 */ NdrFcShort( 0x0 ), /* 0 */ +/* 972 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 974 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 976 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 978 */ NdrFcShort( 0x10 ), /* 16 */ +/* 980 */ NdrFcShort( 0x0 ), /* 0 */ +/* 982 */ NdrFcShort( 0x6 ), /* Offset= 6 (988) */ +/* 984 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 986 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 988 */ + 0x13, 0x0, /* FC_OP */ +/* 990 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (964) */ +/* 992 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 994 */ NdrFcShort( 0x2 ), /* 2 */ +/* 996 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 998 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1000 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1002 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 1004 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1006 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1008 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1010 */ NdrFcShort( 0x6 ), /* Offset= 6 (1016) */ +/* 1012 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 1014 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 1016 */ + 0x13, 0x0, /* FC_OP */ +/* 1018 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (992) */ +/* 1020 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 1022 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1024 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 1026 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1028 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1030 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1032 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1034 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1036 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1038 */ NdrFcShort( 0x6 ), /* Offset= 6 (1044) */ +/* 1040 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 1042 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 1044 */ + 0x13, 0x0, /* FC_OP */ +/* 1046 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (1020) */ +/* 1048 */ + 0x1b, /* FC_CARRAY */ + 0x7, /* 7 */ +/* 1050 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1052 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 1054 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1056 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1058 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 1060 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1062 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1066 */ NdrFcShort( 0x6 ), /* Offset= 6 (1072) */ +/* 1068 */ 0x8, /* FC_LONG */ + 0x40, /* FC_STRUCTPAD4 */ +/* 1070 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 1072 */ + 0x13, 0x0, /* FC_OP */ +/* 1074 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (1048) */ +/* 1076 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 1078 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1080 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1082 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1084 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 1086 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1088 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 1090 */ NdrFcShort( 0xffc8 ), /* -56 */ +/* 1092 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1094 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1096 */ NdrFcShort( 0xffec ), /* Offset= -20 (1076) */ +/* 1098 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1100 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1102 */ NdrFcShort( 0x38 ), /* 56 */ +/* 1104 */ NdrFcShort( 0xffec ), /* Offset= -20 (1084) */ +/* 1106 */ NdrFcShort( 0x0 ), /* Offset= 0 (1106) */ +/* 1108 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1110 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1112 */ 0x40, /* FC_STRUCTPAD4 */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 1114 */ 0x0, /* 0 */ + NdrFcShort( 0xfe0f ), /* Offset= -497 (618) */ + 0x5b, /* FC_END */ +/* 1118 */ + 0x13, 0x0, /* FC_OP */ +/* 1120 */ NdrFcShort( 0xff04 ), /* Offset= -252 (868) */ +/* 1122 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1124 */ 0x1, /* FC_BYTE */ + 0x5c, /* FC_PAD */ +/* 1126 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1128 */ 0x6, /* FC_SHORT */ + 0x5c, /* FC_PAD */ +/* 1130 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1132 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 1134 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1136 */ 0xb, /* FC_HYPER */ + 0x5c, /* FC_PAD */ +/* 1138 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1140 */ 0xa, /* FC_FLOAT */ + 0x5c, /* FC_PAD */ +/* 1142 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1144 */ 0xc, /* FC_DOUBLE */ + 0x5c, /* FC_PAD */ +/* 1146 */ + 0x13, 0x0, /* FC_OP */ +/* 1148 */ NdrFcShort( 0xfdce ), /* Offset= -562 (586) */ +/* 1150 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1152 */ NdrFcShort( 0xfb86 ), /* Offset= -1146 (6) */ +/* 1154 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1156 */ NdrFcShort( 0xfbae ), /* Offset= -1106 (50) */ +/* 1158 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1160 */ NdrFcShort( 0xfdc8 ), /* Offset= -568 (592) */ +/* 1162 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1164 */ NdrFcShort( 0xfdd6 ), /* Offset= -554 (610) */ +/* 1166 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1168 */ NdrFcShort( 0x2 ), /* Offset= 2 (1170) */ +/* 1170 */ + 0x13, 0x0, /* FC_OP */ +/* 1172 */ NdrFcShort( 0x14 ), /* Offset= 20 (1192) */ +/* 1174 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 1176 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1178 */ 0x6, /* FC_SHORT */ + 0x1, /* FC_BYTE */ +/* 1180 */ 0x1, /* FC_BYTE */ + 0x8, /* FC_LONG */ +/* 1182 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 1184 */ + 0x13, 0x0, /* FC_OP */ +/* 1186 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1174) */ +/* 1188 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1190 */ 0x2, /* FC_CHAR */ + 0x5c, /* FC_PAD */ +/* 1192 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x7, /* 7 */ +/* 1194 */ NdrFcShort( 0x20 ), /* 32 */ +/* 1196 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1198 */ NdrFcShort( 0x0 ), /* Offset= 0 (1198) */ +/* 1200 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1202 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1204 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1206 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1208 */ NdrFcShort( 0xfc68 ), /* Offset= -920 (288) */ +/* 1210 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1212 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 1214 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1216 */ NdrFcShort( 0x18 ), /* 24 */ +/* 1218 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1220 */ NdrFcShort( 0xfc58 ), /* Offset= -936 (284) */ +/* 1222 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1224 */ NdrFcShort( 0x2 ), /* Offset= 2 (1226) */ +/* 1226 */ + 0x13, 0x0, /* FC_OP */ +/* 1228 */ NdrFcShort( 0x2 ), /* Offset= 2 (1230) */ +/* 1230 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1232 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1234 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1236 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1238 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1240 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1244 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1246 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1248 */ NdrFcShort( 0xfb52 ), /* Offset= -1198 (50) */ +/* 1250 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1252 */ + 0x11, 0x0, /* FC_RP */ +/* 1254 */ NdrFcShort( 0x6 ), /* Offset= 6 (1260) */ +/* 1256 */ + 0x12, 0x0, /* FC_UP */ +/* 1258 */ NdrFcShort( 0xffbe ), /* Offset= -66 (1192) */ +/* 1260 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 1262 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1264 */ NdrFcShort( 0x18 ), /* 24 */ +/* 1266 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1268 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1256) */ +/* 1270 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 1272 */ NdrFcShort( 0x2 ), /* Offset= 2 (1274) */ +/* 1274 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1276 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1278 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1280 */ NdrFcShort( 0x0 ), /* Offset= 0 (1280) */ +/* 1282 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1284 */ NdrFcShort( 0xfb1c ), /* Offset= -1252 (32) */ +/* 1286 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1288 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1290 */ + 0x11, 0x0, /* FC_RP */ +/* 1292 */ NdrFcShort( 0xfc02 ), /* Offset= -1022 (270) */ +/* 1294 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 1296 */ 0x3, /* FC_SMALL */ + 0x5c, /* FC_PAD */ +/* 1298 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 1300 */ NdrFcShort( 0x2 ), /* Offset= 2 (1302) */ +/* 1302 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1304 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */ +/* 1308 */ NdrFcShort( 0x3dd2 ), /* 15826 */ +/* 1310 */ NdrFcShort( 0x400f ), /* 16399 */ +/* 1312 */ 0x94, /* 148 */ + 0x9f, /* 159 */ +/* 1314 */ 0xad, /* 173 */ + 0x0, /* 0 */ +/* 1316 */ 0xbd, /* 189 */ + 0xab, /* 171 */ +/* 1318 */ 0x1d, /* 29 */ + 0x41, /* 65 */ +/* 1320 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1322 */ NdrFcShort( 0x2 ), /* Offset= 2 (1324) */ +/* 1324 */ + 0x13, 0x0, /* FC_OP */ +/* 1326 */ NdrFcShort( 0x2 ), /* Offset= 2 (1328) */ +/* 1328 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1330 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1332 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1334 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1336 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1338 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1342 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1344 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1346 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1302) */ +/* 1348 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1350 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 1352 */ NdrFcShort( 0x2 ), /* Offset= 2 (1354) */ +/* 1354 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1356 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */ +/* 1360 */ NdrFcShort( 0xc20c ), /* -15860 */ +/* 1362 */ NdrFcShort( 0x4fb4 ), /* 20404 */ +/* 1364 */ 0xb0, /* 176 */ + 0x94, /* 148 */ +/* 1366 */ 0xf4, /* 244 */ + 0xf7, /* 247 */ +/* 1368 */ 0x27, /* 39 */ + 0x5d, /* 93 */ +/* 1370 */ 0xd4, /* 212 */ + 0x69, /* 105 */ +/* 1372 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1374 */ NdrFcShort( 0x2 ), /* Offset= 2 (1376) */ +/* 1376 */ + 0x13, 0x0, /* FC_OP */ +/* 1378 */ NdrFcShort( 0x2 ), /* Offset= 2 (1380) */ +/* 1380 */ + 0x1c, /* FC_CVARRAY */ + 0x3, /* 3 */ +/* 1382 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1384 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 1386 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1388 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1390 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1392 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1394 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1396 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1398 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 1400 */ NdrFcShort( 0x2 ), /* Offset= 2 (1402) */ +/* 1402 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1404 */ NdrFcShort( 0x14 ), /* 20 */ +/* 1406 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1408 */ NdrFcShort( 0x0 ), /* Offset= 0 (1408) */ +/* 1410 */ 0xd, /* FC_ENUM16 */ + 0x8, /* FC_LONG */ +/* 1412 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1414 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1416 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1418 */ NdrFcShort( 0x2 ), /* Offset= 2 (1420) */ +/* 1420 */ + 0x13, 0x0, /* FC_OP */ +/* 1422 */ NdrFcShort( 0x2 ), /* Offset= 2 (1424) */ +/* 1424 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1426 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1428 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1430 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1432 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1434 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1438 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1440 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1442 */ NdrFcShort( 0xfa90 ), /* Offset= -1392 (50) */ +/* 1444 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1446 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1448 */ NdrFcShort( 0x2 ), /* Offset= 2 (1450) */ +/* 1450 */ + 0x13, 0x0, /* FC_OP */ +/* 1452 */ NdrFcShort( 0x2 ), /* Offset= 2 (1454) */ +/* 1454 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 1456 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1458 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1460 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1462 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1464 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ + + 0x0 + } + }; + +static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] = + { + + { + BSTR_UserSize + ,BSTR_UserMarshal + ,BSTR_UserUnmarshal + ,BSTR_UserFree + }, + { + HWND_UserSize + ,HWND_UserMarshal + ,HWND_UserUnmarshal + ,HWND_UserFree + }, + { + VARIANT_UserSize + ,VARIANT_UserMarshal + ,VARIANT_UserUnmarshal + ,VARIANT_UserFree + } + + }; + + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0000, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IUnknown, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IAccessibleRelation, ver. 0.0, + GUID={0x7CDF86EE,0xC3DA,0x496a,{0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleRelation_FormatStringOffsetTable[] = + { + 0, + 38, + 76, + 114, + 158 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleRelation_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleRelation_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(8) _IAccessibleRelationProxyVtbl = +{ + &IAccessibleRelation_ProxyInfo, + &IID_IAccessibleRelation, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleRelation::get_relationType */ , + (void *) (INT_PTR) -1 /* IAccessibleRelation::get_localizedRelationType */ , + (void *) (INT_PTR) -1 /* IAccessibleRelation::get_nTargets */ , + (void *) (INT_PTR) -1 /* IAccessibleRelation::get_target */ , + (void *) (INT_PTR) -1 /* IAccessibleRelation::get_targets */ +}; + +const CInterfaceStubVtbl _IAccessibleRelationStubVtbl = +{ + &IID_IAccessibleRelation, + &IAccessibleRelation_ServerInfo, + 8, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0001, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IAccessibleAction, ver. 0.0, + GUID={0xB70D9F59,0x3B5A,0x4dba,{0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleAction_FormatStringOffsetTable[] = + { + 208, + 246, + 284, + 328, + 384, + 428 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleAction_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleAction_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleAction_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(9) _IAccessibleActionProxyVtbl = +{ + &IAccessibleAction_ProxyInfo, + &IID_IAccessibleAction, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */ +}; + +const CInterfaceStubVtbl _IAccessibleActionStubVtbl = +{ + &IID_IAccessibleAction, + &IAccessibleAction_ServerInfo, + 9, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0002, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IDispatch, ver. 0.0, + GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IAccessible, ver. 0.0, + GUID={0x618736e0,0x3c3d,0x11cf,{0x81,0x0c,0x00,0xaa,0x00,0x38,0x9b,0x71}} */ + + +/* Object interface: IAccessible2, ver. 0.0, + GUID={0xE89F726E,0xC4F4,0x4c19,{0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessible2_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 472, + 510, + 554, + 604, + 642, + 680, + 730, + 780, + 818, + 856, + 894, + 932, + 982, + 1032, + 1070, + 1108, + 1146, + 1184 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessible2_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(46) _IAccessible2ProxyVtbl = +{ + &IAccessible2_ProxyInfo, + &IID_IAccessible2, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + 0 /* IAccessible::get_accParent */ , + 0 /* IAccessible::get_accChildCount */ , + 0 /* IAccessible::get_accChild */ , + 0 /* IAccessible::get_accName */ , + 0 /* IAccessible::get_accValue */ , + 0 /* IAccessible::get_accDescription */ , + 0 /* IAccessible::get_accRole */ , + 0 /* IAccessible::get_accState */ , + 0 /* IAccessible::get_accHelp */ , + 0 /* IAccessible::get_accHelpTopic */ , + 0 /* IAccessible::get_accKeyboardShortcut */ , + 0 /* IAccessible::get_accFocus */ , + 0 /* IAccessible::get_accSelection */ , + 0 /* IAccessible::get_accDefaultAction */ , + 0 /* IAccessible::accSelect */ , + 0 /* IAccessible::accLocation */ , + 0 /* IAccessible::accNavigate */ , + 0 /* IAccessible::accHitTest */ , + 0 /* IAccessible::accDoDefaultAction */ , + 0 /* IAccessible::put_accName */ , + 0 /* IAccessible::put_accValue */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ , + (void *) (INT_PTR) -1 /* IAccessible2::role */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_states */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ +}; + + +static const PRPC_STUB_FUNCTION IAccessible2_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAccessible2StubVtbl = +{ + &IID_IAccessible2, + &IAccessible2_ServerInfo, + 46, + &IAccessible2_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Object interface: IAccessible2_2, ver. 0.0, + GUID={0x6C9430E9,0x299D,0x4E6F,{0xBD,0x01,0xA8,0x2A,0x1E,0x88,0xD3,0xFF}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessible2_2_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 472, + 510, + 554, + 604, + 642, + 680, + 730, + 780, + 818, + 856, + 894, + 932, + 982, + 1032, + 1070, + 1108, + 1146, + 1184, + 1222, + 1266, + 1310 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessible2_2_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_2_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessible2_2_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_2_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(49) _IAccessible2_2ProxyVtbl = +{ + &IAccessible2_2_ProxyInfo, + &IID_IAccessible2_2, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + 0 /* IAccessible::get_accParent */ , + 0 /* IAccessible::get_accChildCount */ , + 0 /* IAccessible::get_accChild */ , + 0 /* IAccessible::get_accName */ , + 0 /* IAccessible::get_accValue */ , + 0 /* IAccessible::get_accDescription */ , + 0 /* IAccessible::get_accRole */ , + 0 /* IAccessible::get_accState */ , + 0 /* IAccessible::get_accHelp */ , + 0 /* IAccessible::get_accHelpTopic */ , + 0 /* IAccessible::get_accKeyboardShortcut */ , + 0 /* IAccessible::get_accFocus */ , + 0 /* IAccessible::get_accSelection */ , + 0 /* IAccessible::get_accDefaultAction */ , + 0 /* IAccessible::accSelect */ , + 0 /* IAccessible::accLocation */ , + 0 /* IAccessible::accNavigate */ , + 0 /* IAccessible::accHitTest */ , + 0 /* IAccessible::accDoDefaultAction */ , + 0 /* IAccessible::put_accName */ , + 0 /* IAccessible::put_accValue */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ , + (void *) (INT_PTR) -1 /* IAccessible2::role */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_states */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */ +}; + + +static const PRPC_STUB_FUNCTION IAccessible2_2_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAccessible2_2StubVtbl = +{ + &IID_IAccessible2_2, + &IAccessible2_2_ServerInfo, + 49, + &IAccessible2_2_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0004, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IAccessibleComponent, ver. 0.0, + GUID={0x1546D4B0,0x4C98,0x4bda,{0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] = + { + 1366, + 1410, + 76 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleComponent_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleComponent_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(6) _IAccessibleComponentProxyVtbl = +{ + &IAccessibleComponent_ProxyInfo, + &IID_IAccessibleComponent, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleComponent::get_locationInParent */ , + (void *) (INT_PTR) -1 /* IAccessibleComponent::get_foreground */ , + (void *) (INT_PTR) -1 /* IAccessibleComponent::get_background */ +}; + +const CInterfaceStubVtbl _IAccessibleComponentStubVtbl = +{ + &IID_IAccessibleComponent, + &IAccessibleComponent_ServerInfo, + 6, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleValue, ver. 0.0, + GUID={0x35855B5B,0xC566,0x4fd0,{0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleValue_FormatStringOffsetTable[] = + { + 1448, + 1486, + 1524, + 1562 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleValue_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleValue_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleValue_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(7) _IAccessibleValueProxyVtbl = +{ + &IAccessibleValue_ProxyInfo, + &IID_IAccessibleValue, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleValue::get_currentValue */ , + (void *) (INT_PTR) -1 /* IAccessibleValue::setCurrentValue */ , + (void *) (INT_PTR) -1 /* IAccessibleValue::get_maximumValue */ , + (void *) (INT_PTR) -1 /* IAccessibleValue::get_minimumValue */ +}; + +const CInterfaceStubVtbl _IAccessibleValueStubVtbl = +{ + &IID_IAccessibleValue, + &IAccessibleValue_ServerInfo, + 7, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IAccessibleText, ver. 0.0, + GUID={0x24FD2FFB,0x3AAD,0x4a08,{0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleText_FormatStringOffsetTable[] = + { + 1600, + 1644, + 76, + 1700, + 1768, + 1806, + 1862, + 1912, + 1962, + 2024, + 2086, + 2148, + 2186, + 2224, + 2274, + 2312, + 2362, + 2424, + 2462 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleText_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleText_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleText_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(22) _IAccessibleTextProxyVtbl = +{ + &IAccessibleText_ProxyInfo, + &IID_IAccessibleText, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ +}; + +const CInterfaceStubVtbl _IAccessibleTextStubVtbl = +{ + &IID_IAccessibleText, + &IAccessibleText_ServerInfo, + 22, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleText2, ver. 0.0, + GUID={0x9690A9CC,0x5C80,0x4DF5,{0x85,0x2E,0x2D,0x5A,0xE4,0x18,0x9A,0x54}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleText2_FormatStringOffsetTable[] = + { + 1600, + 1644, + 76, + 1700, + 1768, + 1806, + 1862, + 1912, + 1962, + 2024, + 2086, + 2148, + 2186, + 2224, + 2274, + 2312, + 2362, + 2424, + 2462, + 2500 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleText2_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleText2_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleText2_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(23) _IAccessibleText2ProxyVtbl = +{ + &IAccessibleText2_ProxyInfo, + &IID_IAccessibleText2, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ , + (void *) (INT_PTR) -1 /* IAccessibleText2::get_attributeRange */ +}; + +const CInterfaceStubVtbl _IAccessibleText2StubVtbl = +{ + &IID_IAccessibleText2, + &IAccessibleText2_ServerInfo, + 23, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleEditableText, ver. 0.0, + GUID={0xA59AA09A,0x7011,0x4b65,{0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] = + { + 1600, + 2562, + 2606, + 2650, + 2694, + 2732, + 2782 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleEditableText_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleEditableText_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(10) _IAccessibleEditableTextProxyVtbl = +{ + &IAccessibleEditableText_ProxyInfo, + &IID_IAccessibleEditableText, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleEditableText::copyText */ , + (void *) (INT_PTR) -1 /* IAccessibleEditableText::deleteText */ , + (void *) (INT_PTR) -1 /* IAccessibleEditableText::insertText */ , + (void *) (INT_PTR) -1 /* IAccessibleEditableText::cutText */ , + (void *) (INT_PTR) -1 /* IAccessibleEditableText::pasteText */ , + (void *) (INT_PTR) -1 /* IAccessibleEditableText::replaceText */ , + (void *) (INT_PTR) -1 /* IAccessibleEditableText::setAttributes */ +}; + +const CInterfaceStubVtbl _IAccessibleEditableTextStubVtbl = +{ + &IID_IAccessibleEditableText, + &IAccessibleEditableText_ServerInfo, + 10, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleHyperlink, ver. 0.0, + GUID={0x01C20F2B,0x3DD2,0x400f,{0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleHyperlink_FormatStringOffsetTable[] = + { + 208, + 246, + 284, + 328, + 384, + 428, + 2832, + 2876, + 2920, + 2958, + 2996 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleHyperlink_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleHyperlink_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(14) _IAccessibleHyperlinkProxyVtbl = +{ + &IAccessibleHyperlink_ProxyInfo, + &IID_IAccessibleHyperlink, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ , + (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */ , + (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchor */ , + (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchorTarget */ , + (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_startIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_endIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_valid */ +}; + +const CInterfaceStubVtbl _IAccessibleHyperlinkStubVtbl = +{ + &IID_IAccessibleHyperlink, + &IAccessibleHyperlink_ServerInfo, + 14, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleHypertext, ver. 0.0, + GUID={0x6B4F8BBF,0xF1F2,0x418a,{0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] = + { + 1600, + 1644, + 76, + 1700, + 1768, + 1806, + 1862, + 1912, + 1962, + 2024, + 2086, + 2148, + 2186, + 2224, + 2274, + 2312, + 2362, + 2424, + 2462, + 3034, + 3072, + 3116 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleHypertext_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleHypertext_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(25) _IAccessibleHypertextProxyVtbl = +{ + &IAccessibleHypertext_ProxyInfo, + &IID_IAccessibleHypertext, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ , + (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ , + (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ , + (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */ +}; + +const CInterfaceStubVtbl _IAccessibleHypertextStubVtbl = +{ + &IID_IAccessibleHypertext, + &IAccessibleHypertext_ServerInfo, + 25, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleHypertext2, ver. 0.0, + GUID={0xCF64D89F,0x8287,0x4B44,{0x85,0x01,0xA8,0x27,0x45,0x3A,0x60,0x77}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] = + { + 1600, + 1644, + 76, + 1700, + 1768, + 1806, + 1862, + 1912, + 1962, + 2024, + 2086, + 2148, + 2186, + 2224, + 2274, + 2312, + 2362, + 2424, + 2462, + 3034, + 3072, + 3116, + 3160 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleHypertext2_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleHypertext2_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleHypertext2_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(26) _IAccessibleHypertext2ProxyVtbl = +{ + &IAccessibleHypertext2_ProxyInfo, + &IID_IAccessibleHypertext2, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ , + (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ , + (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ , + (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ , + (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ , + (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ , + (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleHypertext2::get_hyperlinks */ +}; + +const CInterfaceStubVtbl _IAccessibleHypertext2StubVtbl = +{ + &IID_IAccessibleHypertext2, + &IAccessibleHypertext2_ServerInfo, + 26, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleTable, ver. 0.0, + GUID={0x35AD8070,0xC20C,0x4fb4,{0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleTable_FormatStringOffsetTable[] = + { + 3204, + 3254, + 3292, + 3342, + 3386, + 3436, + 3480, + 3524, + 2920, + 2958, + 3562, + 3600, + 3638, + 3682, + 3732, + 3776, + 3820, + 3870, + 3920, + 3970, + 4008, + 4052, + 4096, + 4146, + 4184, + 4222, + 4260, + 4298, + 4366 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleTable_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleTable_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleTable_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(32) _IAccessibleTableProxyVtbl = +{ + &IAccessibleTable_ProxyInfo, + &IID_IAccessibleTable, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_accessibleAt */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_caption */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_childIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnDescription */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnExtentAt */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnHeader */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_nColumns */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_nRows */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedChildren */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedColumns */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedRows */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowDescription */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowExtentAt */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowHeader */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedChildren */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedColumns */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedRows */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_summary */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_isColumnSelected */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_isRowSelected */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_isSelected */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::selectRow */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::selectColumn */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::unselectRow */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::unselectColumn */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowColumnExtentsAtIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleTable::get_modelChange */ +}; + +const CInterfaceStubVtbl _IAccessibleTableStubVtbl = +{ + &IID_IAccessibleTable, + &IAccessibleTable_ServerInfo, + 32, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleTable2, ver. 0.0, + GUID={0x6167f295,0x06f0,0x4cdd,{0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] = + { + 3204, + 3254, + 284, + 4404, + 1768, + 4442, + 4480, + 3524, + 4518, + 4562, + 4606, + 4650, + 4694, + 4732, + 4776, + 4820, + 4858, + 4896, + 4934, + 4972 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleTable2_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleTable2_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(23) _IAccessibleTable2ProxyVtbl = +{ + &IAccessibleTable2_ProxyInfo, + &IID_IAccessibleTable2, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_cellAt */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_caption */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_columnDescription */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nColumns */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nRows */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedCells */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedColumns */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedRows */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_rowDescription */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedCells */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedColumns */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedRows */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_summary */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isColumnSelected */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isRowSelected */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::selectRow */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::selectColumn */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectRow */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectColumn */ , + (void *) (INT_PTR) -1 /* IAccessibleTable2::get_modelChange */ +}; + +const CInterfaceStubVtbl _IAccessibleTable2StubVtbl = +{ + &IID_IAccessibleTable2, + &IAccessibleTable2_ServerInfo, + 23, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleTableCell, ver. 0.0, + GUID={0x594116B1,0xC99F,0x4847,{0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] = + { + 208, + 5010, + 76, + 4404, + 5054, + 4442, + 5098, + 5136, + 5198 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleTableCell_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleTableCell_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(12) _IAccessibleTableCellProxyVtbl = +{ + &IAccessibleTableCell_ProxyInfo, + &IID_IAccessibleTableCell, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnExtent */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnHeaderCells */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowExtent */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowHeaderCells */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowIndex */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_isSelected */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowColumnExtents */ , + (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_table */ +}; + +const CInterfaceStubVtbl _IAccessibleTableCellStubVtbl = +{ + &IID_IAccessibleTableCell, + &IAccessibleTableCell_ServerInfo, + 12, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleImage, ver. 0.0, + GUID={0xFE5ABB3D,0x615E,0x4f7b,{0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleImage_FormatStringOffsetTable[] = + { + 0, + 5236, + 5286 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleImage_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleImage_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleImage_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(6) _IAccessibleImageProxyVtbl = +{ + &IAccessibleImage_ProxyInfo, + &IID_IAccessibleImage, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleImage::get_description */ , + (void *) (INT_PTR) -1 /* IAccessibleImage::get_imagePosition */ , + (void *) (INT_PTR) -1 /* IAccessibleImage::get_imageSize */ +}; + +const CInterfaceStubVtbl _IAccessibleImageStubVtbl = +{ + &IID_IAccessibleImage, + &IAccessibleImage_ServerInfo, + 6, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0016, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IAccessibleApplication, ver. 0.0, + GUID={0xD49DED83,0x5B25,0x43F4,{0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleApplication_FormatStringOffsetTable[] = + { + 0, + 38, + 5330, + 5368 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleApplication_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleApplication_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(7) _IAccessibleApplicationProxyVtbl = +{ + &IAccessibleApplication_ProxyInfo, + &IID_IAccessibleApplication, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appName */ , + (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appVersion */ , + (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitName */ , + (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitVersion */ +}; + +const CInterfaceStubVtbl _IAccessibleApplicationStubVtbl = +{ + &IID_IAccessibleApplication, + &IAccessibleApplication_ServerInfo, + 7, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Object interface: IAccessibleDocument, ver. 0.0, + GUID={0xC48C7FCF,0x4AB5,0x4056,{0xAF,0xA6,0x90,0x2D,0x6E,0x1D,0x11,0x49}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] = + { + 5406 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleDocument_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessibleDocument_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessibleDocument_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(4) _IAccessibleDocumentProxyVtbl = +{ + &IAccessibleDocument_ProxyInfo, + &IID_IAccessibleDocument, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* IAccessibleDocument::get_anchorTarget */ +}; + +const CInterfaceStubVtbl _IAccessibleDocumentStubVtbl = +{ + &IID_IAccessibleDocument, + &IAccessibleDocument_ServerInfo, + 4, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + +static const MIDL_STUB_DESC Object_StubDesc = + { + 0, + NdrOleAllocate, + NdrOleFree, + 0, + 0, + 0, + 0, + 0, + ia2_api_all__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x50002, /* Ndr library version */ + 0, + 0x801026e, /* MIDL Version 8.1.622 */ + 0, + UserMarshalRoutines, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; + +const CInterfaceProxyVtbl * const _ia2_api_all_ProxyVtblList[] = +{ + ( CInterfaceProxyVtbl *) &_IAccessibleHyperlinkProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleImageProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleActionProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleValueProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessible2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleTableProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleApplicationProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleTable2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleEditableTextProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleHypertext2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleComponentProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleTableCellProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleHypertextProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl, + 0 +}; + +const CInterfaceStubVtbl * const _ia2_api_all_StubVtblList[] = +{ + ( CInterfaceStubVtbl *) &_IAccessibleHyperlinkStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleImageStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleActionStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleValueStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessible2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleTableStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleApplicationStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleTable2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleEditableTextStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleHypertext2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleComponentStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleTableCellStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleHypertextStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl, + ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl, + 0 +}; + +PCInterfaceName const _ia2_api_all_InterfaceNamesList[] = +{ + "IAccessibleHyperlink", + "IAccessibleImage", + "IAccessibleAction", + "IAccessibleValue", + "IAccessible2", + "IAccessibleTable", + "IAccessibleApplication", + "IAccessibleTable2", + "IAccessibleEditableText", + "IAccessibleHypertext2", + "IAccessibleComponent", + "IAccessibleTableCell", + "IAccessibleHypertext", + "IAccessibleText2", + "IAccessibleDocument", + "IAccessible2_2", + "IAccessibleRelation", + "IAccessibleText", + 0 +}; + +const IID * const _ia2_api_all_BaseIIDList[] = +{ + 0, + 0, + 0, + 0, + &IID_IAccessible, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + &IID_IAccessible, + 0, + 0, + 0 +}; + + +#define _ia2_api_all_CHECK_IID(n) IID_GENERIC_CHECK_IID( _ia2_api_all, pIID, n) + +int __stdcall _ia2_api_all_IID_Lookup( const IID * pIID, int * pIndex ) +{ + IID_BS_LOOKUP_SETUP + + IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 18, 16 ) + IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 ) + IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 ) + IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 ) + IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 ) + IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 18, *pIndex ) + +} + +const ExtendedProxyFileInfo ia2_api_all_ProxyFileInfo = +{ + (PCInterfaceProxyVtblList *) & _ia2_api_all_ProxyVtblList, + (PCInterfaceStubVtblList *) & _ia2_api_all_StubVtblList, + (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList, + (const IID ** ) & _ia2_api_all_BaseIIDList, + & _ia2_api_all_IID_Lookup, + 18, + 2, + 0, /* table of [async_uuid] interfaces */ + 0, /* Filler1 */ + 0, /* Filler2 */ + 0 /* Filler3 */ +}; +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* defined(_M_AMD64)*/ +
diff --git a/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument.dlldata.c b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument.dlldata.c new file mode 100644 index 0000000..21821da --- /dev/null +++ b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument.dlldata.c
@@ -0,0 +1,37 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + + +#include <rpcproxy.h> + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( ISimpleDOMDocument ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( ISimpleDOMDocument ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */
diff --git a/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument.h b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument.h new file mode 100644 index 0000000..07d948e --- /dev/null +++ b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument.h
@@ -0,0 +1,284 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../third_party/isimpledom/ISimpleDOMDocument.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the <rpcndr.h> version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of <rpcndr.h> +#endif /* __RPCNDR_H_VERSION__ */ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __ISimpleDOMDocument_h__ +#define __ISimpleDOMDocument_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __ISimpleDOMDocument_FWD_DEFINED__ +#define __ISimpleDOMDocument_FWD_DEFINED__ +typedef interface ISimpleDOMDocument ISimpleDOMDocument; + +#endif /* __ISimpleDOMDocument_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "objidl.h" +#include "oaidl.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_ISimpleDOMDocument_0000_0000 */ +/* [local] */ + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// ISimpleDOMDocument +// +// @STATUS UNDER_REVIEW +// ---------------------------------------------------------------------------------------------------= +// +// get_URL(out] BSTR *url) +// ---------------------------------------------------------------------------------------------------= +// Get the internet URL associated with this document. +// +// get_title([out BSTR *title +// ---------------------------------------------------------------------------------------------------= +// Get the document's title from the <TITLE> element +// +// get_mimeType([out BSTR *mimeType +// ---------------------------------------------------------------------------------------------------= +// Get the registered mime type, such as text/html +// +// get_docType([out] BSTR *docType +// ---------------------------------------------------------------------------------------------------= +// Get doctype associated with the <!DOCTYPE ..> element +// +// get_nameSpaceURIForID([in] short nameSpaceID, [out] BSTR *nameSpaceURI) +// ---------------------------------------------------------------------------------------------------= +// Some of the methods for ISimpleDOMNode return a nameSpaceID (-1,0,1,2,3,....) +// This method returns the associated namespace URI for each ID. +// +// set_alternateViewMediaTypes([in] BSTR *commaSeparatedMediaType) +// ---------------------------------------------------------------------------------------------------= +// For style property retrieval on nsISimpleDOMNode elements, +// set the additional alternate media types that properties are available for. +// [in] BSTR *commaSeparatedMediaTypes is a comma separate list, for example "aural, braille". +// The alternate media properties are requested with nsISimpleDOMNode::get_computedStyle. +// Note: setting this value on a document will increase memory overhead, and may create a small delay. +// +// W3C media Types: +// * all: Suitable for all devices. +// * aural: Intended for speech synthesizers. See the section on aural style sheets for details. +// * braille: Intended for braille tactile feedback devices. +// * embossed: Intended for paged braille printers. +// * handheld: Intended for handheld devices - typically small screen, monochrome, limited bandwidth. +// * print: Intended for paged, opaque material and for documents viewed on screen in print preview mode. Please consult the section on paged media for information about formatting issues that are specific to paged media. +// * projection: Intended for projected presentations, for example projectors or print to transparencies. Please consult the section on paged media for information about formatting issues that are specific to paged media. +// * screen: Intended primarily for color computer screens. +// * tty: intended for media using a fixed-pitch character grid, such as teletypes, terminals, or portable devices with limited display capabilities. Authors should not use pixel units with the tty media type. +// * tv: Intended for television-type devices - low resolution, color, limited-scrollability screens, sound +// * See latest W3C CSS specs for complete list of media types +// +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// + + +#define DISPID_DOC_URL ( -5904 ) + +#define DISPID_DOC_TITLE ( -5905 ) + +#define DISPID_DOC_MIMETYPE ( -5906 ) + +#define DISPID_DOC_DOCTYPE ( -5907 ) + +#define DISPID_DOC_NAMESPACE ( -5908 ) + +#define DISPID_DOC_MEDIATYPES ( -5909 ) + + + +extern RPC_IF_HANDLE __MIDL_itf_ISimpleDOMDocument_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ISimpleDOMDocument_0000_0000_v0_0_s_ifspec; + +#ifndef __ISimpleDOMDocument_INTERFACE_DEFINED__ +#define __ISimpleDOMDocument_INTERFACE_DEFINED__ + +/* interface ISimpleDOMDocument */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_ISimpleDOMDocument; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("0D68D6D0-D93D-4d08-A30D-F00DD1F45B24") + ISimpleDOMDocument : public IUnknown + { + public: + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_URL( + /* [retval][out] */ BSTR *url) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_title( + /* [retval][out] */ BSTR *title) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_mimeType( + /* [retval][out] */ BSTR *mimeType) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_docType( + /* [retval][out] */ BSTR *docType) = 0; + + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_nameSpaceURIForID( + /* [in] */ short nameSpaceID, + /* [retval][out] */ BSTR *nameSpaceURI) = 0; + + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_alternateViewMediaTypes( + /* [in] */ BSTR *commaSeparatedMediaTypes) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ISimpleDOMDocumentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ISimpleDOMDocument * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + ISimpleDOMDocument * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + ISimpleDOMDocument * This); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_URL )( + ISimpleDOMDocument * This, + /* [retval][out] */ BSTR *url); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_title )( + ISimpleDOMDocument * This, + /* [retval][out] */ BSTR *title); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_mimeType )( + ISimpleDOMDocument * This, + /* [retval][out] */ BSTR *mimeType); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_docType )( + ISimpleDOMDocument * This, + /* [retval][out] */ BSTR *docType); + + /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_nameSpaceURIForID )( + ISimpleDOMDocument * This, + /* [in] */ short nameSpaceID, + /* [retval][out] */ BSTR *nameSpaceURI); + + /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_alternateViewMediaTypes )( + ISimpleDOMDocument * This, + /* [in] */ BSTR *commaSeparatedMediaTypes); + + END_INTERFACE + } ISimpleDOMDocumentVtbl; + + interface ISimpleDOMDocument + { + CONST_VTBL struct ISimpleDOMDocumentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ISimpleDOMDocument_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ISimpleDOMDocument_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ISimpleDOMDocument_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ISimpleDOMDocument_get_URL(This,url) \ + ( (This)->lpVtbl -> get_URL(This,url) ) + +#define ISimpleDOMDocument_get_title(This,title) \ + ( (This)->lpVtbl -> get_title(This,title) ) + +#define ISimpleDOMDocument_get_mimeType(This,mimeType) \ + ( (This)->lpVtbl -> get_mimeType(This,mimeType) ) + +#define ISimpleDOMDocument_get_docType(This,docType) \ + ( (This)->lpVtbl -> get_docType(This,docType) ) + +#define ISimpleDOMDocument_get_nameSpaceURIForID(This,nameSpaceID,nameSpaceURI) \ + ( (This)->lpVtbl -> get_nameSpaceURIForID(This,nameSpaceID,nameSpaceURI) ) + +#define ISimpleDOMDocument_put_alternateViewMediaTypes(This,commaSeparatedMediaTypes) \ + ( (This)->lpVtbl -> put_alternateViewMediaTypes(This,commaSeparatedMediaTypes) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ISimpleDOMDocument_INTERFACE_DEFINED__ */ + + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + +
diff --git a/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument_i.c b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument_i.c new file mode 100644 index 0000000..11f8d78 --- /dev/null +++ b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument_i.c
@@ -0,0 +1,79 @@ + + +/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../third_party/isimpledom/ISimpleDOMDocument.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#ifdef __cplusplus +extern "C"{ +#endif + + +#include <rpc.h> +#include <rpcndr.h> + +#ifdef _MIDL_USE_GUIDDEF_ + +#ifndef INITGUID +#define INITGUID +#include <guiddef.h> +#undef INITGUID +#else +#include <guiddef.h> +#endif + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) + +#else // !_MIDL_USE_GUIDDEF_ + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + EXTERN_C __declspec(selectany) const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + +#endif // !_MIDL_USE_GUIDDEF_ + +MIDL_DEFINE_GUID(IID, IID_ISimpleDOMDocument,0x0D68D6D0,0xD93D,0x4d08,0xA3,0x0D,0xF0,0x0D,0xD1,0xF4,0x5B,0x24); + +#undef MIDL_DEFINE_GUID + +#ifdef __cplusplus +} +#endif + + +
diff --git a/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument_p.c b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument_p.c new file mode 100644 index 0000000..1c8d91f7 --- /dev/null +++ b/third_party/win_build_output/midl/third_party/isimpledom/ISimpleDOMDocument_p.c
@@ -0,0 +1,509 @@ + + +/* this ALWAYS GENERATED file contains the proxy stub code */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Mon Jan 18 22:14:07 2038 + */ +/* Compiler settings for ../../third_party/isimpledom/ISimpleDOMDocument.idl: + Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */ + +#define USE_STUBLESS_PROXY + + +/* verify that the <rpcproxy.h> version is high enough to compile this file*/ +#ifndef __REDQ_RPCPROXY_H_VERSION__ +#define __REQUIRED_RPCPROXY_H_VERSION__ 475 +#endif + + +#include "rpcproxy.h" +#ifndef __RPCPROXY_H_VERSION__ +#error this stub requires an updated version of <rpcproxy.h> +#endif /* __RPCPROXY_H_VERSION__ */ + + +#include "ISimpleDOMDocument.h" + +#define TYPE_FORMAT_STRING_SIZE 61 +#define PROC_FORMAT_STRING_SIZE 235 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 1 + +typedef struct _ISimpleDOMDocument_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } ISimpleDOMDocument_MIDL_TYPE_FORMAT_STRING; + +typedef struct _ISimpleDOMDocument_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } ISimpleDOMDocument_MIDL_PROC_FORMAT_STRING; + +typedef struct _ISimpleDOMDocument_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } ISimpleDOMDocument_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + + +extern const ISimpleDOMDocument_MIDL_TYPE_FORMAT_STRING ISimpleDOMDocument__MIDL_TypeFormatString; +extern const ISimpleDOMDocument_MIDL_PROC_FORMAT_STRING ISimpleDOMDocument__MIDL_ProcFormatString; +extern const ISimpleDOMDocument_MIDL_EXPR_FORMAT_STRING ISimpleDOMDocument__MIDL_ExprFormatString; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO ISimpleDOMDocument_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO ISimpleDOMDocument_ProxyInfo; + + +extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ]; + +#if !defined(__RPC_WIN64__) +#error Invalid build platform for this stub. +#endif + +static const ISimpleDOMDocument_MIDL_PROC_FORMAT_STRING ISimpleDOMDocument__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure get_URL */ + + 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x3 ), /* 3 */ +/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 10 */ NdrFcShort( 0x0 ), /* 0 */ +/* 12 */ NdrFcShort( 0x8 ), /* 8 */ +/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 16 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 18 */ NdrFcShort( 0x1 ), /* 1 */ +/* 20 */ NdrFcShort( 0x0 ), /* 0 */ +/* 22 */ NdrFcShort( 0x0 ), /* 0 */ +/* 24 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter url */ + +/* 26 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 30 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 36 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_title */ + +/* 38 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 40 */ NdrFcLong( 0x0 ), /* 0 */ +/* 44 */ NdrFcShort( 0x4 ), /* 4 */ +/* 46 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 48 */ NdrFcShort( 0x0 ), /* 0 */ +/* 50 */ NdrFcShort( 0x8 ), /* 8 */ +/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 54 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 56 */ NdrFcShort( 0x1 ), /* 1 */ +/* 58 */ NdrFcShort( 0x0 ), /* 0 */ +/* 60 */ NdrFcShort( 0x0 ), /* 0 */ +/* 62 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter title */ + +/* 64 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 68 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 70 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 74 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_mimeType */ + +/* 76 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 78 */ NdrFcLong( 0x0 ), /* 0 */ +/* 82 */ NdrFcShort( 0x5 ), /* 5 */ +/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 86 */ NdrFcShort( 0x0 ), /* 0 */ +/* 88 */ NdrFcShort( 0x8 ), /* 8 */ +/* 90 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 92 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 94 */ NdrFcShort( 0x1 ), /* 1 */ +/* 96 */ NdrFcShort( 0x0 ), /* 0 */ +/* 98 */ NdrFcShort( 0x0 ), /* 0 */ +/* 100 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter mimeType */ + +/* 102 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 106 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 110 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_docType */ + +/* 114 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 116 */ NdrFcLong( 0x0 ), /* 0 */ +/* 120 */ NdrFcShort( 0x6 ), /* 6 */ +/* 122 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 124 */ NdrFcShort( 0x0 ), /* 0 */ +/* 126 */ NdrFcShort( 0x8 ), /* 8 */ +/* 128 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 130 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 132 */ NdrFcShort( 0x1 ), /* 1 */ +/* 134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 136 */ NdrFcShort( 0x0 ), /* 0 */ +/* 138 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter docType */ + +/* 140 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 142 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 144 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 146 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 150 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nameSpaceURIForID */ + +/* 152 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 154 */ NdrFcLong( 0x0 ), /* 0 */ +/* 158 */ NdrFcShort( 0x7 ), /* 7 */ +/* 160 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 162 */ NdrFcShort( 0x6 ), /* 6 */ +/* 164 */ NdrFcShort( 0x8 ), /* 8 */ +/* 166 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 168 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 170 */ NdrFcShort( 0x1 ), /* 1 */ +/* 172 */ NdrFcShort( 0x0 ), /* 0 */ +/* 174 */ NdrFcShort( 0x0 ), /* 0 */ +/* 176 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter nameSpaceID */ + +/* 178 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 180 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 182 */ 0x6, /* FC_SHORT */ + 0x0, /* 0 */ + + /* Parameter nameSpaceURI */ + +/* 184 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 186 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 188 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 190 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 192 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 194 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure put_alternateViewMediaTypes */ + +/* 196 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 198 */ NdrFcLong( 0x0 ), /* 0 */ +/* 202 */ NdrFcShort( 0x8 ), /* 8 */ +/* 204 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 208 */ NdrFcShort( 0x8 ), /* 8 */ +/* 210 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 212 */ 0xa, /* 10 */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ +/* 214 */ NdrFcShort( 0x0 ), /* 0 */ +/* 216 */ NdrFcShort( 0x1 ), /* 1 */ +/* 218 */ NdrFcShort( 0x0 ), /* 0 */ +/* 220 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter commaSeparatedMediaTypes */ + +/* 222 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 224 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 226 */ NdrFcShort( 0x32 ), /* Type Offset=50 */ + + /* Return value */ + +/* 228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 230 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 232 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const ISimpleDOMDocument_MIDL_TYPE_FORMAT_STRING ISimpleDOMDocument__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */ +/* 6 */ + 0x13, 0x0, /* FC_OP */ +/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */ +/* 10 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 12 */ NdrFcShort( 0x2 ), /* 2 */ +/* 14 */ 0x9, /* Corr desc: FC_ULONG */ + 0x0, /* */ +/* 16 */ NdrFcShort( 0xfffc ), /* -4 */ +/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 20 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 22 */ + 0x17, /* FC_CSTRUCT */ + 0x3, /* 3 */ +/* 24 */ NdrFcShort( 0x8 ), /* 8 */ +/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */ +/* 28 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 30 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 32 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 34 */ NdrFcShort( 0x0 ), /* 0 */ +/* 36 */ NdrFcShort( 0x8 ), /* 8 */ +/* 38 */ NdrFcShort( 0x0 ), /* 0 */ +/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */ +/* 42 */ + 0x11, 0x0, /* FC_RP */ +/* 44 */ NdrFcShort( 0x6 ), /* Offset= 6 (50) */ +/* 46 */ + 0x12, 0x0, /* FC_UP */ +/* 48 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (22) */ +/* 50 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 52 */ NdrFcShort( 0x0 ), /* 0 */ +/* 54 */ NdrFcShort( 0x8 ), /* 8 */ +/* 56 */ NdrFcShort( 0x0 ), /* 0 */ +/* 58 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (46) */ + + 0x0 + } + }; + +static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] = + { + + { + BSTR_UserSize + ,BSTR_UserMarshal + ,BSTR_UserUnmarshal + ,BSTR_UserFree + } + + }; + + + +/* Standard interface: __MIDL_itf_ISimpleDOMDocument_0000_0000, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ + + +/* Object interface: IUnknown, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: ISimpleDOMDocument, ver. 0.0, + GUID={0x0D68D6D0,0xD93D,0x4d08,{0xA3,0x0D,0xF0,0x0D,0xD1,0xF4,0x5B,0x24}} */ + +#pragma code_seg(".orpc") +static const unsigned short ISimpleDOMDocument_FormatStringOffsetTable[] = + { + 0, + 38, + 76, + 114, + 152, + 196 + }; + +static const MIDL_STUBLESS_PROXY_INFO ISimpleDOMDocument_ProxyInfo = + { + &Object_StubDesc, + ISimpleDOMDocument__MIDL_ProcFormatString.Format, + &ISimpleDOMDocument_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO ISimpleDOMDocument_ServerInfo = + { + &Object_StubDesc, + 0, + ISimpleDOMDocument__MIDL_ProcFormatString.Format, + &ISimpleDOMDocument_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(9) _ISimpleDOMDocumentProxyVtbl = +{ + &ISimpleDOMDocument_ProxyInfo, + &IID_ISimpleDOMDocument, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *) (INT_PTR) -1 /* ISimpleDOMDocument::get_URL */ , + (void *) (INT_PTR) -1 /* ISimpleDOMDocument::get_title */ , + (void *) (INT_PTR) -1 /* ISimpleDOMDocument::get_mimeType */ , + (void *) (INT_PTR) -1 /* ISimpleDOMDocument::get_docType */ , + (void *) (INT_PTR) -1 /* ISimpleDOMDocument::get_nameSpaceURIForID */ , + (void *) (INT_PTR) -1 /* ISimpleDOMDocument::put_alternateViewMediaTypes */ +}; + +const CInterfaceStubVtbl _ISimpleDOMDocumentStubVtbl = +{ + &IID_ISimpleDOMDocument, + &ISimpleDOMDocument_ServerInfo, + 9, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + +static const MIDL_STUB_DESC Object_StubDesc = + { + 0, + NdrOleAllocate, + NdrOleFree, + 0, + 0, + 0, + 0, + 0, + ISimpleDOMDocument__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x50002, /* Ndr library version */ + 0, + 0x801026e, /* MIDL Version 8.1.622 */ + 0, + UserMarshalRoutines, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; + +const CInterfaceProxyVtbl * const _ISimpleDOMDocument_ProxyVtblList[] = +{ + ( CInterfaceProxyVtbl *) &_ISimpleDOMDocumentProxyVtbl, + 0 +}; + +const CInterfaceStubVtbl * const _ISimpleDOMDocument_StubVtblList[] = +{ + ( CInterfaceStubVtbl *) &_ISimpleDOMDocumentStubVtbl, + 0 +}; + +PCInterfaceName const _ISimpleDOMDocument_InterfaceNamesList[] = +{ + "ISimpleDOMDocument", + 0 +}; + + +#define _ISimpleDOMDocument_CHECK_IID(n) IID_GENERIC_CHECK_IID( _ISimpleDOMDocument, pIID, n) + +int __stdcall _ISimpleDOMDocument_IID_Lookup( const IID * pIID, int * pIndex ) +{ + + if(!_ISimpleDOMDocument_CHECK_IID(0)) + { + *pIndex = 0; + return 1; + } + + return 0; +} + +const ExtendedProxyFileInfo ISimpleDOMDocument_ProxyFileInfo = +{ + (PCInterfaceProxyVtblList *) & _ISimpleDOMDocument_ProxyVtblList, + (PCInterfaceStubVtblList *) & _ISimpleDOMDocument_StubVtblList, + (const PCInterfaceName * ) & _ISimpleDOMDocument_InterfaceNamesList, + 0, /* no delegation */ + & _ISimpleDOMDocument_IID_Lookup, + 1, + 2, + 0, /* table of [async_uuid] interfaces */ + 0, /* Filler1 */ + 0, /* Filler2 */ + 0 /* Filler3 */ +}; +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* defined(_M_AMD64)*/ +
diff --git a/third_party/zlib/0002-uninitializedcheck.patch b/third_party/zlib/0002-uninitializedcheck.patch index 0713c00..03a3735 100644 --- a/third_party/zlib/0002-uninitializedcheck.patch +++ b/third_party/zlib/0002-uninitializedcheck.patch
@@ -1,12 +1,27 @@ -diff --git a/inflate.c b/inflate.c -index ac333e8c2eda..69b769a871b8 100644 ---- a/third_party/zlib/inflate.c -+++ b/third_party/zlib/inflate.c -@@ -228,6 +228,7 @@ int stream_size; +diff --git a/third_party/zlib/contrib/arm/inflate.c b/third_party/zlib/contrib/arm/inflate.c +index e40322c..74c5541 100644 +--- a/third_party/zlib/contrib/arm/inflate.c ++++ b/third_party/zlib/contrib/arm/inflate.c +@@ -229,6 +229,8 @@ int stream_size; state->strm = strm; state->window = Z_NULL; state->mode = HEAD; /* to pass state test in inflateReset2() */ -+ state->check = adler32(0L, Z_NULL, 0); ++ /* 1L is the result of adler32() on zero length data */ ++ state->check = 1L; + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { + ZFREE(strm, state); +diff --git a/third_party/zlib/inflate.c b/third_party/zlib/inflate.c +index 69b769a..7631ba1 100644 +--- a/third_party/zlib/inflate.c ++++ b/third_party/zlib/inflate.c +@@ -228,7 +228,8 @@ int stream_size; + state->strm = strm; + state->window = Z_NULL; + state->mode = HEAD; /* to pass state test in inflateReset2() */ +- state->check = adler32(0L, Z_NULL, 0); ++ /* 1L is the result of adler32() on zero length data */ ++ state->check = 1L; ret = inflateReset2(strm, windowBits); if (ret != Z_OK) { ZFREE(strm, state);
diff --git a/third_party/zlib/contrib/arm/inflate.c b/third_party/zlib/contrib/arm/inflate.c index e40322c..54fe1f1 100644 --- a/third_party/zlib/contrib/arm/inflate.c +++ b/third_party/zlib/contrib/arm/inflate.c
@@ -229,6 +229,8 @@ state->strm = strm; state->window = Z_NULL; state->mode = HEAD; /* to pass state test in inflateReset2() */ + /* 1L is the result of adler32() on zero length data */ + state->check = 1L; ret = inflateReset2(strm, windowBits); if (ret != Z_OK) { ZFREE(strm, state);
diff --git a/third_party/zlib/inflate.c b/third_party/zlib/inflate.c index 69b769a8..cc38b983 100644 --- a/third_party/zlib/inflate.c +++ b/third_party/zlib/inflate.c
@@ -228,7 +228,8 @@ state->strm = strm; state->window = Z_NULL; state->mode = HEAD; /* to pass state test in inflateReset2() */ - state->check = adler32(0L, Z_NULL, 0); + /* 1L is the result of adler32() on zero length data */ + state->check = 1L; ret = inflateReset2(strm, windowBits); if (ret != Z_OK) { ZFREE(strm, state);
diff --git a/tools/binary_size/diagnose_bloat.py b/tools/binary_size/diagnose_bloat.py index a0df3977..e1f84147 100755 --- a/tools/binary_size/diagnose_bloat.py +++ b/tools/binary_size/diagnose_bloat.py
@@ -326,6 +326,7 @@ _EnsureDirsExist(self.dir) if self.build.IsAndroid(): self._ArchiveFile(self.build.abs_apk_path) + self._ArchiveFile(self.build.abs_apk_path + '.mapping') self._ArchiveResourceSizes() self._ArchiveSizeFile(supersize_path) self.metadata.Write() @@ -668,7 +669,8 @@ # Files needed for supersize and resource_sizes. Paths relative to out dir. to_extract = [build.main_lib_path, build.map_file_path, 'args.gn'] if build.IsAndroid(): - to_extract += ['build_vars.txt', build.apk_path, build.apk_path + '.size'] + to_extract += ['build_vars.txt', build.apk_path, + build.apk_path + '.mapping', build.apk_path + '.size'] extract_dir = dl_dst + '_' + 'unzipped' logging.info('Extracting build artifacts') with zipfile.ZipFile(dl_dst, 'r') as z:
diff --git a/tools/binary_size/libsupersize/canned_queries.py b/tools/binary_size/libsupersize/canned_queries.py index 7785da33..2a5411e 100644 --- a/tools/binary_size/libsupersize/canned_queries.py +++ b/tools/binary_size/libsupersize/canned_queries.py
@@ -148,3 +148,9 @@ # Call Sorted() twice so that subgroups will be sorted. # TODO(agrieve): Might be nice to recursively GroupedByName() on these. return symbols.WhereIsTemplate().Sorted().GroupedByName(depth).Sorted() + + def StaticInitializers(self, symbols=None): + """Lists Static Initializers.""" + symbols = self._SymbolsArg(symbols) + # GCC generates "_GLOBAL__" symbols. Clang generates "startup". + return symbols.WhereNameMatches('^startup$|^_GLOBAL__')
diff --git a/tools/binary_size/libsupersize/testdata/Console.golden b/tools/binary_size/libsupersize/testdata/Console.golden index 6918064..e78cca7 100644 --- a/tools/binary_size/libsupersize/testdata/Console.golden +++ b/tools/binary_size/libsupersize/testdata/Console.golden
@@ -10,7 +10,7 @@ DeltaSymbol (extends Symbol): after_symbol, before_symbol, diff_status DeltaSymbolGroup (extends SymbolGroup): CountsByDiffStatus, WhereDiffStatusIs, diff_status -canned_queries: CategorizeByChromeComponent, CategorizeGenerated, TemplatesByName +canned_queries: CategorizeByChromeComponent, CategorizeGenerated, StaticInitializers, TemplatesByName Functions: Diff(), Disassemble(), ExpandRegex(), Print(), ShowExamples() Variables:
diff --git a/tools/chrome_proxy/webdriver/client_config.py b/tools/chrome_proxy/webdriver/client_config.py index 70eb26c..5a5ffdd2 100644 --- a/tools/chrome_proxy/webdriver/client_config.py +++ b/tools/chrome_proxy/webdriver/client_config.py
@@ -43,25 +43,24 @@ t.AddChromeArg('--force-variation-ids=42') t.LoadURL('http://check.googlezip.net/test.html') - t._StopDriver() - variation_header_count = 0 + variation_header_count = 0 - # Look for the request made to data saver client config server. - with open('chrome.netlog.json') as data_file: - data = json.load(data_file) - for i in data["events"]: - dumped_event = json.dumps(i) - if dumped_event.find("datasaver.googleapis.com") !=-1 and\ + # Look for the request made to data saver client config server. + with open('chrome.netlog.json') as data_file: + data = json.load(data_file) + for i in data["events"]: + dumped_event = json.dumps(i) + if dumped_event.find("datasaver.googleapis.com") !=-1 and\ dumped_event.find("clientConfigs") != -1 and\ dumped_event.find("headers") != -1 and\ dumped_event.find("accept-encoding") != -1 and\ dumped_event.find("x-client-data") !=-1: variation_header_count = variation_header_count + 1 - # Variation IDs are set. x-client-data should be present in the request - # headers. - self.assertLessEqual(1, variation_header_count) + # Variation IDs are set. x-client-data should be present in the request + # headers. + self.assertLessEqual(1, variation_header_count) # Ensure client config is fetched at the start of the Chrome session, and the # variations ID is not set in the request. @@ -72,25 +71,24 @@ t.AddChromeArg('--enable-spdy-proxy-auth') t.LoadURL('http://check.googlezip.net/test.html') - t._StopDriver() - variation_header_count = 0 + variation_header_count = 0 - # Look for the request made to data saver client config server. - with open('chrome.netlog.json') as data_file: - data = json.load(data_file) - for i in data["events"]: - dumped_event = json.dumps(i) - if dumped_event.find("datasaver.googleapis.com") !=-1 and\ + # Look for the request made to data saver client config server. + with open('chrome.netlog.json') as data_file: + data = json.load(data_file) + for i in data["events"]: + dumped_event = json.dumps(i) + if dumped_event.find("datasaver.googleapis.com") !=-1 and\ dumped_event.find("clientConfigs") != -1 and\ dumped_event.find("headers") != -1 and\ dumped_event.find("accept-encoding") != -1 and\ dumped_event.find("x-client-data") !=-1: variation_header_count = variation_header_count + 1 - # Variation IDs are not set. x-client-data should not be present in the - # request headers. - self.assertEqual(0, variation_header_count) + # Variation IDs are not set. x-client-data should not be present in the + # request headers. + self.assertEqual(0, variation_header_count) if __name__ == '__main__': IntegrationTest.RunAllTests() \ No newline at end of file
diff --git a/tools/chrome_proxy/webdriver/smoke.py b/tools/chrome_proxy/webdriver/smoke.py index 4534aca..50d5526 100644 --- a/tools/chrome_proxy/webdriver/smoke.py +++ b/tools/chrome_proxy/webdriver/smoke.py
@@ -8,7 +8,7 @@ from common import IntegrationTest from decorators import NotAndroid from decorators import ChromeVersionEqualOrAfterM - +import json class Smoke(IntegrationTest): @@ -73,6 +73,10 @@ with TestDriver() as t: t.AddChromeArg('--enable-spdy-proxy-auth') t.AddChromeArg('--enable-data-reduction-proxy-force-pingback') + t.AddChromeArg('--log-net-log=chrome.netlog.json') + # Force set the variations ID, so they are send along with the pingback + # request. + t.AddChromeArg('--force-variation-ids=42') t.LoadURL('http://check.googlezip.net/test.html') t.LoadURL('http://check.googlezip.net/test.html') t.SleepUntilHistogramHasEntry("DataReductionProxy.Pingback.Succeeded") @@ -82,6 +86,23 @@ succeeded = t.GetHistogram('DataReductionProxy.Pingback.Succeeded') self.assertEqual(1, succeeded['count']) + # Look for the request made to data saver pingback server. + with open('chrome.netlog.json') as data_file: + data = json.load(data_file) + variation_header_count = 0 + for i in data["events"]: + dumped_event = json.dumps(i) + if dumped_event.find("datasaver.googleapis.com") !=-1 and\ + dumped_event.find("recordPageloadMetrics") != -1 and\ + dumped_event.find("headers") != -1 and\ + dumped_event.find("accept-encoding") != -1 and\ + dumped_event.find("x-client-data") !=-1: + variation_header_count = variation_header_count + 1 + + # Variation IDs are set. x-client-data should be present in the request + # headers. + self.assertLessEqual(1, variation_header_count) + # Verify unique page IDs are sent in the Chrome-Proxy header. @ChromeVersionEqualOrAfterM(59) def testPageID(self):
diff --git a/tools/clang/base_bind_rewriters/BaseBindRewriters.cpp b/tools/clang/base_bind_rewriters/BaseBindRewriters.cpp index e74db14..b625401 100644 --- a/tools/clang/base_bind_rewriters/BaseBindRewriters.cpp +++ b/tools/clang/base_bind_rewriters/BaseBindRewriters.cpp
@@ -42,16 +42,11 @@ : replacements_(replacements) {} StatementMatcher GetMatcher() { - auto is_once_callback = - hasType(hasCanonicalType(hasDeclaration(classTemplateSpecializationDecl( - hasName("::base::Callback"), - hasTemplateArgument(1, equalsIntegralValue("0")), - hasTemplateArgument(2, equalsIntegralValue("0")))))); + auto is_once_callback = hasType(hasCanonicalType(hasDeclaration( + classTemplateSpecializationDecl(hasName("::base::OnceCallback"))))); auto is_repeating_callback = hasType(hasCanonicalType(hasDeclaration(classTemplateSpecializationDecl( - hasName("::base::Callback"), - hasTemplateArgument(1, equalsIntegralValue("1")), - hasTemplateArgument(2, equalsIntegralValue("1")))))); + hasName("::base::RepeatingCallback"))))); auto bind_call = callExpr(callee(namedDecl(hasName("::base::Bind")))).bind("target");
diff --git a/tools/clang/base_bind_rewriters/tests/callback.h b/tools/clang/base_bind_rewriters/tests/callback.h index f6d8c4b..a233167 100644 --- a/tools/clang/base_bind_rewriters/tests/callback.h +++ b/tools/clang/base_bind_rewriters/tests/callback.h
@@ -12,47 +12,33 @@ } // namespace internal -template <typename Signature, - internal::CopyMode copy_mode = internal::CopyMode::Copyable, - internal::RepeatMode repeat_mode = internal::RepeatMode::Repeating> -class Callback; +template <typename Signature> +class OnceCallback; template <typename Signature> -using OnceCallback = Callback<Signature, - internal::CopyMode::MoveOnly, - internal::RepeatMode::Once>; -template <typename Signature> -using RepeatingCallback = Callback<Signature, - internal::CopyMode::Copyable, - internal::RepeatMode::Repeating>; +class RepeatingCallback; -using Closure = Callback<void()>; +template <typename Signature> +using Callback = RepeatingCallback<Signature>; + using OnceClosure = OnceCallback<void()>; using RepeatingClosure = RepeatingCallback<void()>; - -namespace internal { - -template <typename From, typename To> -struct IsCallbackConvertible : std::false_type {}; +using Closure = Callback<void()>; template <typename Signature> -struct IsCallbackConvertible<RepeatingCallback<Signature>, - OnceCallback<Signature>> : std::true_type {}; - -} // namespace internal - -template <typename Signature, internal::CopyMode, internal::RepeatMode> -class Callback { +class OnceCallback { public: - Callback() {} - Callback(const Callback&) {} - Callback(Callback&&) {} + OnceCallback() {} + OnceCallback(OnceCallback&&) {} + OnceCallback(RepeatingCallback<Signature> other) {} +}; - template <typename OtherCallback, - typename = typename std::enable_if< - internal::IsCallbackConvertible<OtherCallback, - Callback>::value>::type> - Callback(OtherCallback other) {} +template <typename Signature> +class RepeatingCallback { + public: + RepeatingCallback() {} + RepeatingCallback(const RepeatingCallback&) {} + RepeatingCallback(RepeatingCallback&&) {} }; template <typename Functor, typename... Args>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index e3d22edd..633106b 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -2228,6 +2228,15 @@ <int value="6" label="Ended, navigated away from page while prompt hidden"/> <int value="7" label="Dismissed, user clicked Learn More link"/> <int value="8" label="Dismissed, user clicked a legal message link"/> + <int value="9" label="CVC fix flow shown"/> + <int value="10" label="CVC fix flow ended, user explicitly accepted prompt"/> + <int value="11" + label="CVC fix flow ended, navigated away from page while prompt + showing"/> + <int value="12" + label="CVC fix flow ended, navigated away from page while prompt hidden"/> + <int value="13" + label="CVC fix flow dismissed, user clicked a legal message link"/> </enum> <enum name="AutofillScanCreditCardPrompt"> @@ -2384,6 +2393,15 @@ <int value="2" label="Ok, got it"/> </enum> +<enum name="AVDAFrameInformation"> + <int value="0" label="SurfaceTexture Insecure"/> + <int value="1" label="SurfaceTexture L3"/> + <int value="2" label="Overlay L3"/> + <int value="3" label="Overlay L1"/> + <int value="4" label="Overlay Insecure Player-element Fullscreen"/> + <int value="5" label="Overlay Insecure Non-player-element Fullscreen"/> +</enum> + <enum name="BackForwardNavigationType"> <int value="0" label="Fast back navigation with WKBackForwardList"/> <int value="1" label="Slow back navigation"/> @@ -4451,6 +4469,15 @@ <int value="22" label="Profile image"/> </enum> +<enum name="ChromePDFViewerLoadStatus"> + <int value="0" label="Loaded a full-page PDF with Chrome PDF Viewer"/> + <int value="1" label="Loaded an embedded PDF with Chrome PDF Viewer"/> + <int value="2" label="Showed disabled plugin placeholder for embedded PDF"/> + <int value="3" label="Triggered a drive-by download without user gesture"/> + <int value="4" label="Loaded iframe PDF with no PDF viewer available"/> + <int value="5" label="View PDF button clicked in the PDF plugin placeholder"/> +</enum> + <enum name="ChromiumAndroidLinkerBrowserState"> <int value="0" label="Normal, Random Address Load"/> <int value="1" label="Low memory, Fixed Address Load Success"/> @@ -5947,6 +5974,16 @@ <int value="6" label="chrome-search"/> </enum> +<enum name="ContentSuggestionsBreakingNewsMessageContainsNews"> + <int value="0" label="Without pushed news"/> + <int value="1" label="With (possibly empty) pushed news"/> +</enum> + +<enum name="ContentSuggestionsBreakingNewsTokenValidationOutcome"> + <int value="0" label="Token invalid"/> + <int value="1" label="Token revalidated"/> +</enum> + <enum name="ContentSuggestionsCategory"> <int value="0" label="Experimental"/> <int value="1" label="Recent Tabs"/> @@ -5978,6 +6015,12 @@ <int value="1" label="Explicit"/> </enum> +<enum name="ContentSuggestionsStatusCode"> + <int value="0" label="Success"/> + <int value="1" label="Temporary error"/> + <int value="2" label="Permanent error"/> +</enum> + <enum name="ContentSuggestionsUIUpdateResult"> <obsolete> Superseded by ContentSuggestionsUIUpdateResult2 in January 2017. @@ -11284,6 +11327,10 @@ <int value="379" label="CastReceiverName"/> <int value="380" label="DeviceOffHours"/> <int value="381" label="CloudPolicyOverridesMachinePolicy"/> + <int value="382" label="NativePrintersBulkConfiguration"/> + <int value="383" label="NativePrintersBulkAccessMode"/> + <int value="384" label="NativePrintersBulkBlacklist"/> + <int value="385" label="NativePrintersBulkWhitelist"/> </enum> <enum name="EnterprisePolicyInvalidations"> @@ -14015,7 +14062,7 @@ </enum> <enum name="FeatureObserver"> -<!-- Generated from third_party/WebKit/public/platform/web_feature.mojom --> +<!-- Generated from third_party/WebKit/public/platform/web_feature.mojom.--> <int value="0" label="OBSOLETE_PageDestruction"/> <int value="1" label="LegacyNotifications"/> @@ -16191,6 +16238,29 @@ <int value="2119" label="V8LabeledExpressionStatement"/> <int value="2120" label="PaymentRequestSupportedMethodsArray"/> <int value="2121" label="NavigatorDeviceMemory"/> + <int value="2122" label="FixedWidthTableDistributionChanged"/> + <int value="2123" label="WebkitBoxLayout"/> + <int value="2124" label="WebkitBoxLayoutHorizontal"/> + <int value="2125" label="WebkitBoxLayoutVertical"/> + <int value="2126" label="WebkitBoxAlignNotInitial"/> + <int value="2127" label="WebkitBoxDirectionNotInitial"/> + <int value="2128" label="WebkitBoxLinesNotInitial"/> + <int value="2129" label="WebkitBoxPackNotInitial"/> + <int value="2130" label="WebkitBoxChildFlexNotInitial"/> + <int value="2131" label="WebkitBoxChildFlexGroupNotInitial"/> + <int value="2132" label="WebkitBoxChildOrdinalGroupNotInitial"/> + <int value="2133" label="WebkitBoxNotDefaultOrder"/> + <int value="2134" label="WebkitBoxNoChildren"/> + <int value="2135" label="WebkitBoxOneChild"/> + <int value="2136" label="WebkitBoxOneChildIsLayoutBlockFlowInline"/> + <int value="2137" label="WebkitBoxManyChildren"/> + <int value="2138" label="WebkitBoxLineClamp"/> + <int value="2139" label="WebkitBoxLineClampPercentage"/> + <int value="2140" label="WebkitBoxLineClampNoChildren"/> + <int value="2141" label="WebkitBoxLineClampOneChild"/> + <int value="2142" label="WebkitBoxLineClampOneChildIsLayoutBlockFlowInline"/> + <int value="2143" label="WebkitBoxLineClampManyChildren"/> + <int value="2144" label="WebkitBoxLineClampDoesSomething"/> </enum> <enum name="FeedbackSource"> @@ -19938,6 +20008,14 @@ <int value="3" label="Failed to extract transfer function"/> <int value="4" label="Failed to extract primary matrix"/> <int value="5" label="Failed to parse"/> + <int value="6" label="Parsed, but failed to extract SkColorSpace"/> + <int value="7" + label="Parsed and extracteed SkColorSpace, but failed to create + SkColorSpaceXform to this space"/> + <int value="8" + label="Converged to an insufficiently accurate approximation of + transfer function"/> + <int value="9" label="Extracted an sRGB profile directly"/> </enum> <enum name="IceCandidatePairTypes"> @@ -23082,6 +23160,7 @@ <int value="-1617183455" label="OfflineRecentPages:disabled"/> <int value="-1616855537" label="enable-manual-password-generation:disabled"/> <int value="-1614912400" label="enable-link-disambiguation-popup"/> + <int value="-1613583483" label="UseNewAcceptLanguageHeader:enabled"/> <int value="-1611305202" label="KeepPrefetchedContentSuggestions:disabled"/> <int value="-1607691647" label="MojoVideoEncodeAccelerator:disabled"/> <int value="-1605567628" label="disable-overlay-scrollbar"/> @@ -23482,6 +23561,7 @@ <int value="-351127770" label="enable-offline-pages-as-bookmarks"/> <int value="-349437334" label="UseDdljsonApi:disabled"/> <int value="-349057743" label="extensions-on-chrome-urls"/> + <int value="-346413328" label="UseNewAcceptLanguageHeader:disabled"/> <int value="-345838366" label="enable-hosted-apps-in-windows"/> <int value="-345324571" label="enable-quirks-client"/> <int value="-344343842" label="disable-experimental-app-list"/> @@ -23815,6 +23895,7 @@ <int value="691020108" label="NTPCondensedTileLayout:disabled"/> <int value="693012666" label="QuickUnlockPin:disabled"/> <int value="694985670" label="OmniboxUIExperimentNarrowDropdown:disabled"/> + <int value="695385040" label="enable-external-drive-rename"/> <int value="696600628" label="VibrateRequiresUserGesture:disabled"/> <int value="698809951" label="WebRtcHWVP8Encoding:enabled"/> <int value="705713283" label="EasyUnlockPromotions:disabled"/> @@ -25970,6 +26051,8 @@ <int value="2" label="LowStorage"/> <int value="3" label="ArcKiosk"/> <int value="4" label="StartAutomatically"/> + <int value="5" label="ResumeMinimal"/> + <int value="6" label="StartAutomaticallyMinimal"/> </enum> <enum name="MigrationUIMigrationResult"> @@ -30026,13 +30109,6 @@ <int value="2" label="Has Bookmarks"/> </enum> -<enum name="PDFLoadStatus"> - <int value="0" label="Loaded a full-page PDF with PDFium"/> - <int value="1" label="Loaded an embedded PDF with PDFium"/> - <int value="2" label="Showed disabled plugin placeholder for embedded PDF"/> - <int value="3" label="Triggered a drive-by download without user gesture"/> -</enum> - <enum name="PeerConnectionCounters"> <int value="0" label="PeerConnection enabled with IPv4."/> <int value="1" label="PeerConnection enabled with Ipv6."/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index b23add9..9e44e285 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -1156,6 +1156,17 @@ </summary> </histogram> +<histogram name="Android.SeccompStatus.PhotoPickerSandbox" + enum="AndroidSeccompSandboxStatus"> + <owner>peter@chromium.org</owner> + <owner>rsesek@chromium.org</owner> + <summary> + Reports the status of the seccomp-bpf sandbox in photo picker decoding + processes. Anything other than "Sandbox Engaged" indicates the + sandbox is not turned on. See https://crbug.com/477049. + </summary> +</histogram> + <histogram name="Android.SeccompStatus.Prctl" enum="AndroidSeccompStatus"> <owner>rsesek@chromium.org</owner> <summary> @@ -11029,6 +11040,26 @@ </summary> </histogram> +<histogram name="Cryptohome.DircryptoMinimalMigrationEndStatus" + enum="DircryptoMigrationEndStatus"> + <owner>dspaid@chromium.org</owner> + <owner>pmarko@chromium.org</owner> + <summary> + The status of the user home directory minimal migration from ecryptfs to + ext4-crypto. This is logged once at the end of each minimal migration. + </summary> +</histogram> + +<histogram name="Cryptohome.DircryptoMinimalMigrationStartStatus" + enum="DircryptoMigrationStartStatus"> + <owner>dspaid@chromium.org</owner> + <owner>pmarko@chromium.org</owner> + <summary> + The status of the user home directory minimal migration from ecryptfs to + ext4-crypto. This is logged once at the start of each minimal migration. + </summary> +</histogram> + <histogram name="Cryptohome.Errors" enum="CryptohomeError"> <owner>dkrahn@chromium.org</owner> <summary>Cryptohome errors.</summary> @@ -11123,11 +11154,21 @@ <summary> The amount of time (ms) for the user's home directory to be migrated from ecryptfs to ext4-crypto. If the migration is interrupted and subsequently - resumed (such as due to power loss) the no value is recorded for either + resumed (such as due to power loss) then no value is recorded for either attempt. </summary> </histogram> +<histogram name="Cryptohome.TimeToCompleteDircryptoMinimalMigration" units="ms"> + <owner>dspaid@chromium.org</owner> + <summary> + The amount of time (ms) for the user's home directory to be migrated from + ecryptfs to ext4-crypto if the minimal migration method was used. If the + minimal migration is interrupted and subsequently resumed (such as due to + power loss) then no value is recorded for either attempt. + </summary> +</histogram> + <histogram name="Cryptohome.TimeToInitPkcs11" units="ms"> <owner>dkrahn@chromium.org</owner> <summary> @@ -30638,12 +30679,21 @@ </summary> </histogram> +<histogram name="Media.AVDA.FrameInformation" enum="AVDAFrameInformation"> + <owner>liberato@chromium.org</owner> + <summary> + Record a count for each frame sent to the client by AVDA, separated by what + type of frame it is: SurfaceTexture, secure overlay, etc. + </summary> +</histogram> + <histogram name="Media.AVDA.FrameSentAsOverlay" enum="BooleanFrameAsOverlay"> <owner>liberato@chromium.org</owner> <summary> Record a count for each frame sent to the client by AVDA. True counts indicate that the frame was an overlay (SurfaceView). False counts are for - SurfaceTexture frames. + SurfaceTexture frames. This will be deprecated in favor of + Media.AVDA.FrameInformation in M63. </summary> </histogram> @@ -32239,6 +32289,26 @@ </summary> </histogram> +<histogram name="Media.SRC.PreloadAutoHasPoster" enum="Boolean"> + <owner>media-dev@chromium.org</owner> + <summary> + Whether a SRC= playback had a poster set at load() when the effective + preload type is "auto". Note that this includes audio playbacks, + since we do not have track metadata at load(); audio elements never have + posters. + </summary> +</histogram> + +<histogram name="Media.SRC.PreloadMetaDataHasPoster" enum="Boolean"> + <owner>media-dev@chromium.org</owner> + <summary> + Whether a SRC= playback had a poster set at load() when the effective + preload type is "metadata". Note that this includes audio + playbacks, since we do not have track metadata at load(); audio elements + never have posters. + </summary> +</histogram> + <histogram name="Media.SRC.VideoCodec.MP4" enum="VideoCodec"> <owner>media-dev@chromium.org</owner> <summary> @@ -47010,6 +47080,73 @@ </summary> </histogram> +<histogram name="NewTabPage.ContentSuggestions.BreakingNews.MessageReceived" + enum="ContentSuggestionsBreakingNewsMessageContainsNews"> + <owner>vitaliii@chromium.org</owner> + <summary> + Android: Number of received messages and whether they contain pushed news. A + message contains pushed news if the payload key exists in the message. The + payload content is not checked at all (e.g. it may be empty). Recorded when + a message is received. + </summary> +</histogram> + +<histogram + name="NewTabPage.ContentSuggestions.BreakingNews.SubscriptionRequestStatus" + enum="ContentSuggestionsStatusCode"> + <owner>vitaliii@chromium.org</owner> + <summary> + Android: The result of a subscription request for breaking news at the + content suggestions server. Recorded when a request finishes. Analogous to + NewTabPage.ContentSuggestions.BreakingNews.UnsubscriptionRequestStatus. + </summary> +</histogram> + +<histogram + name="NewTabPage.ContentSuggestions.BreakingNews.TimeSinceLastTokenValidation" + units="ms"> + <owner>vitaliii@chromium.org</owner> + <summary> + Android: Time between a token validation and the last successful token + retrieval from InstanceID. Recorded when InstanceID answers our token + request for a validation either with a token or an error. If the token was + never received before the validation, the metric is not recorded. + </summary> +</histogram> + +<histogram + name="NewTabPage.ContentSuggestions.BreakingNews.TokenRetrievalResult" + enum="InstanceIDResult"> + <owner>vitaliii@chromium.org</owner> + <summary> + Android: The result of our inquiry to InstanceID to receive the current + token. Recorded when InstanceID replies to our inquiry for a token + (including for a validation). + </summary> +</histogram> + +<histogram + name="NewTabPage.ContentSuggestions.BreakingNews.UnsubscriptionRequestStatus" + enum="ContentSuggestionsStatusCode"> + <owner>vitaliii@chromium.org</owner> + <summary> + Android: The result of an unsubscription request for breaking news at the + content suggestions server. Recorded when a request finishes. Analogous to + NewTabPage.ContentSuggestions.BreakingNews.SubscriptionRequestStatus. + </summary> +</histogram> + +<histogram + name="NewTabPage.ContentSuggestions.BreakingNews.WasTokenValidBeforeValidation" + enum="ContentSuggestionsBreakingNewsTokenValidationOutcome"> + <owner>vitaliii@chromium.org</owner> + <summary> + Android: Whether a token validation detected an invalid token. This is + recorded only for validations where no error occured and the token was + actually retrieved. + </summary> +</histogram> + <histogram name="NewTabPage.ContentSuggestions.CategoryDismissed" enum="ContentSuggestionsCategory"> <owner>treib@chromium.org</owner> @@ -47674,14 +47811,27 @@ </histogram> <histogram name="NewTabPage.LogoShown" enum="NewTabPageLogoShown"> - <owner>ianwen@chromium.org</owner> + <owner>treib@chromium.org</owner> <summary> - The number of static logos and animated logos shown to users. Android and - iOS only. + The number of static logos and animated logos shown to users. Note that this + is recorded both for logos from the cache and for fresh (or revalidated) + logos, so it can be recorded twice per NTP impression. Android and iOS only. </summary> </histogram> <histogram name="NewTabPage.LogoShownTime" units="ms"> + <obsolete> + Deprecated 2017-08 because it was only recorded for cached logos. Replaced + by LogoShownTime2. + </obsolete> + <owner>treib@chromium.org</owner> + <summary> + The amount of time between opening an NTP and the logo appearing. Only + recorded when there is a logo, and only recorded once per NTP. Android only. + </summary> +</histogram> + +<histogram name="NewTabPage.LogoShownTime2" units="ms"> <owner>treib@chromium.org</owner> <summary> The amount of time between opening an NTP and the logo appearing. Only @@ -55851,7 +56001,7 @@ </summary> </histogram> -<histogram name="PDF.LoadStatus" enum="PDFLoadStatus"> +<histogram name="PDF.LoadStatus" enum="ChromePDFViewerLoadStatus"> <owner>tommycli@chromium.org</owner> <summary> Tracks what happens when Chrome tries to load a PDF. This metric tracks all @@ -82011,6 +82161,32 @@ <histogram name="TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime" units="ms"> + <obsolete> + Deprecated 08/2017, and replaced by + TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime.UntilTabIsLoaded. + </obsolete> + <owner>zhenw@chromium.org</owner> + <summary> + The tab load time of a tab that is switched to when the browser is in + background tab opening session, which is the duration from the time when the + browser starts to open background tabs until the time when browser has + finished loading those tabs or paused loading due to memory pressure. A new + session starts when the browser resumes loading background tabs when memory + pressure returns to normal. Tab load time is defined as the time between + when the user switches to a backround tab, and the time when that tab + finishes loading in the foreground. If the user switches away before the tab + finishes loading, a metric will not be recorded unless the user switches + back, in which case the tab load time is measured from that point in time. + The metric is only recorded when a tab is switched to from another tab + within the same tabstrip. As a result, the initial forground tab is not + included in this metric since it was not switched to from another tab. The + metric is not recorded when the session overlaps with session restore. + </summary> +</histogram> + +<histogram + name="TabManager.Experimental.BackgroundTabOpening.TabSwitchLoadTime.UntilTabIsLoaded" + units="ms"> <owner>zhenw@chromium.org</owner> <summary> The tab load time of a tab that is switched to when the browser is in @@ -82133,6 +82309,32 @@ <histogram name="TabManager.Experimental.SessionRestore.TabSwitchLoadTime" units="ms"> + <obsolete> + Deprecated 08/2017, and replaced by + TabManager.Experimental.SessionRestore.TabSwitchLoadTime.UntilTabIsLoaded. + </obsolete> + <owner>fmeawad@chromium.org</owner> + <summary> + The tab load time of a tab that is switched to during a session restore. Tab + load time is defined as the time between when the user switches to a + backround tab, and the time when that tab finishes loading in the + foreground. If the user switches away before the tab finishes loading, a + metric will not be recorded unless the user switches back, in which case the + tab load time is measured from that point in time. The metric is only + recorded when a tab is switched to from another tab within the same + tabstrip. As a result, the initial forground tab is not included in this + metric since it was not switched to from another tab. The metric is only + recorded when session restore is actively loading tabs, which ends when + either all tabs have been loaded and their pages rendered, or tab loading + needs to be deferred in cases where the system is under memory pressure. The + metric is not recorded when the session overlaps with background tab opening + session. + </summary> +</histogram> + +<histogram + name="TabManager.Experimental.SessionRestore.TabSwitchLoadTime.UntilTabIsLoaded" + units="ms"> <owner>fmeawad@chromium.org</owner> <summary> The tab load time of a tab that is switched to during a session restore. Tab @@ -97984,6 +98186,12 @@ <affected-histogram name="NewTabPage.SuggestionsImpression"/> </histogram_suffixes> +<histogram_suffixes name="NewTabPageLogoShownFromCache" separator="."> + <suffix name="FromCache" label="Logo from cache."/> + <suffix name="Fresh" label="Fresh logo from network."/> + <affected-histogram name="NewTabPage.LogoShown"/> +</histogram_suffixes> + <histogram_suffixes name="NewTabPageProviders" separator="."> <suffix name="client" label="Suggestions coming from the client."/> <suffix name="server" label="Suggestions coming from the server."/>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 63eeffb..141af510 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -1245,6 +1245,25 @@ </metric> </event> +<event name="TabManager.Background.FirstAlertFired"> + <owner>chrisha@chromium.org</owner> + <owner>lpy@chromium.org</owner> + <summary> + Collects the duration in MS from when the tab is backgrounded to when a + JavaScript alert is fired. Only recorded when the tab is in the background. + </summary> + <metric name="IsMainFrame"> + <summary> + Indicates whether the alert is fired from main frame. + </summary> + </metric> + <metric name="TimeFromBackgrounded"> + <summary> + Duration in MS from when the tab is backgrounded to when alert is fired. + </summary> + </metric> +</event> + <event name="TabManager.Background.FirstAudioStarts"> <owner>chrisha@chromium.org</owner> <owner>lpy@chromium.org</owner> @@ -1254,13 +1273,60 @@ </summary> <metric name="IsMainFrame"> <summary> - Indicates whether the the audio stream belongs to the main frame. + Indicates whether the audio stream belongs to the main frame. </summary> </metric> <metric name="TimeFromBackgrounded"> <summary> Duration in MS from when the tab is backgrounded to when audio starts to - play. Only recorded when the tab is in the background. + play. + </summary> + </metric> +</event> + +<event name="TabManager.Background.FirstFaviconUpdated"> + <owner>chrisha@chromium.org</owner> + <owner>lpy@chromium.org</owner> + <summary> + Collects the duration in MS from when the tab is backgrounded to when the + favicon is updated. Only recorded when the tab is in the background. + </summary> + <metric name="TimeFromBackgrounded"> + <summary> + Duration in MS from when the tab is backgrounded to when the favicon is + updated. + </summary> + </metric> +</event> + +<event name="TabManager.Background.FirstNonPersistentNotificationCreated"> + <owner>chrisha@chromium.org</owner> + <owner>lpy@chromium.org</owner> + <summary/> + <metric name="IsMainFrame"> + <summary> + Indicates whether the notification creation is from the main frame. + </summary> + </metric> + <metric name="TimeFromBackgrounded"> + <summary> + Duration in MS from when the tab is backgrounded to when a non-persistent + notification is created. + </summary> + </metric> +</event> + +<event name="TabManager.Background.FirstTitleUpdated"> + <owner>chrisha@chromium.org</owner> + <owner>lpy@chromium.org</owner> + <summary> + Collects the duration in MS from when the tab is backgrounded to when the + title is updated. Only recorded when the tab is in the background. + </summary> + <metric name="TimeFromBackgrounded"> + <summary> + Duration in MS from when the tab is backgrounded to when the title is + updated. </summary> </metric> </event>
diff --git a/tools/perf/benchmark.csv b/tools/perf/benchmark.csv index 7e5cff0..ed55f0d 100644 --- a/tools/perf/benchmark.csv +++ b/tools/perf/benchmark.csv
@@ -25,7 +25,6 @@ dummy_benchmark.noisy_benchmark_1,nednguyen@google.com, dummy_benchmark.stable_benchmark_1,nednguyen@google.com, gpu_perftests,reveman@chromium.org, -image_decoding.image_decoding_measurement,"cblume@chromium.org, reveman@chromium.org", jetstream,"bmeurer@chromium.org, mvstanton@chromium.org", kraken,"bmeurer@chromium.org, mvstanton@chromium.org", load_library_perf_tests,,
diff --git a/tools/perf/benchmarks/benchmark_smoke_unittest.py b/tools/perf/benchmarks/benchmark_smoke_unittest.py index 7b771dd..6b967f7e 100644 --- a/tools/perf/benchmarks/benchmark_smoke_unittest.py +++ b/tools/perf/benchmarks/benchmark_smoke_unittest.py
@@ -22,7 +22,6 @@ from py_utils import discover from benchmarks import battor -from benchmarks import image_decoding from benchmarks import indexeddb_perf from benchmarks import jetstream from benchmarks import kraken @@ -89,7 +88,6 @@ # The list of benchmark modules to be excluded from our smoke tests. _BLACK_LIST_TEST_MODULES = { - image_decoding, # Always fails on Mac10.9 Tests builder. indexeddb_perf, # Always fails on Win7 & Android Tests builder. octane, # Often fails & take long time to timeout on cq bot. rasterize_and_record_micro, # Always fails on cq bot.
diff --git a/tools/perf/benchmarks/image_decoding.py b/tools/perf/benchmarks/image_decoding.py deleted file mode 100644 index 1fbdcfb..0000000 --- a/tools/perf/benchmarks/image_decoding.py +++ /dev/null
@@ -1,40 +0,0 @@ -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -from core import perf_benchmark -from telemetry import benchmark -from telemetry import story - -from measurements import image_decoding -import page_sets - - -@benchmark.Owner(emails=['cblume@chromium.org', 'reveman@chromium.org']) -class ImageDecodingToughImageCases(perf_benchmark.PerfBenchmark): - test = image_decoding.ImageDecoding - # TODO: Rename this page set to tough_image_cases.py - page_set = page_sets.ImageDecodingMeasurementPageSet - - @classmethod - def Name(cls): - return 'image_decoding.image_decoding_measurement' - - @classmethod - def ShouldDisable(cls, possible_browser): - # crbug.com/667501 - return possible_browser.platform.GetDeviceTypeName() == 'Nexus 7' - - def GetExpectations(self): - class StoryExpectations(story.expectations.StoryExpectations): - def SetExpectations(self): - pass # Nothing disabled. - return StoryExpectations() - - def SetExtraBrowserOptions(self, options): - options.AppendExtraBrowserArgs([ - # Disable asynchronous decodes in the renderer since these test - # rely on images have been decoded between consecutive - # requestAnimationFrames. - '--disable-checker-imaging' - ])
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index b459e92b..be3ca32 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -591,7 +591,7 @@ # Always say this is true regardless of whether the tester # supports swarming. It doesn't hurt. 'can_use_on_swarming_builders': True, - 'expiration': 20 * 60 * 60, # 20 hour timeout for now (crbug.com/753367) + 'expiration': 10 * 60 * 60, # 10 hour timeout 'hard_timeout': swarming_timeout if swarming_timeout else 10800, # 3 hours 'ignore_task_failure': ignore_task_failure, 'io_timeout': io_timeout if io_timeout else 600, # 10 minutes
diff --git a/tools/perf/core/perf_data_generator_unittest.py b/tools/perf/core/perf_data_generator_unittest.py index 2729581..6f7ce96 100644 --- a/tools/perf/core/perf_data_generator_unittest.py +++ b/tools/perf/core/perf_data_generator_unittest.py
@@ -90,7 +90,7 @@ 'dimension_sets': [{'os': 'SkyNet', 'id': 'T-850', 'pool': 'T-RIP'}], 'hard_timeout': 10800, 'can_use_on_swarming_builders': True, - 'expiration': 72000, + 'expiration': 36000, 'io_timeout': 600, 'upload_test_results': False, }, @@ -114,7 +114,7 @@ 'dimension_sets': [{'os': 'SkyNet', 'id': 'T-850', 'pool': 'T-RIP'}], 'hard_timeout': 10800, 'can_use_on_swarming_builders': True, - 'expiration': 72000, + 'expiration': 36000, 'io_timeout': 600, 'upload_test_results': False, }, @@ -163,7 +163,7 @@ 'dimension_sets': [{'os': 'SkyNet', 'id': 'T-850', 'pool': 'T-RIP'}], 'hard_timeout': 10800, 'can_use_on_swarming_builders': True, - 'expiration': 72000, + 'expiration': 36000, 'io_timeout': 600, 'upload_test_results': True, },
diff --git a/tools/perf/page_sets/image_decoding_measurement.py b/tools/perf/page_sets/image_decoding_measurement.py deleted file mode 100644 index 68dc390..0000000 --- a/tools/perf/page_sets/image_decoding_measurement.py +++ /dev/null
@@ -1,43 +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. -from telemetry.page import page as page_module -from telemetry import story - - -class ImageDecodingMeasurementPage(page_module.Page): - - def __init__(self, url, page_set, name): - super(ImageDecodingMeasurementPage, self).__init__(url=url, - page_set=page_set, - name=name) - self.image_decoding_measurement_limit_results_to_min_iterations = True - - def RunNavigateSteps(self, action_runner): - super(ImageDecodingMeasurementPage, self).RunNavigateSteps(action_runner) - action_runner.ExecuteJavaScript('runBenchmark();') - action_runner.WaitForJavaScriptCondition('isDone') - - -class ImageDecodingMeasurementPageSet(story.StorySet): - - """ A directed benchmark of image decoding performance """ - - def __init__(self): - super(ImageDecodingMeasurementPageSet, self).__init__() - self.image_decoding_measurement_limit_results_to_min_iterations = True - - urls_list = [ - 'file://../../../chrome/test/data/image_decoding/image_decoding.html?gif', - 'file://../../../chrome/test/data/image_decoding/image_decoding.html?jpg', - 'file://../../../chrome/test/data/image_decoding/image_decoding.html?png', - 'file://../../../chrome/test/data/image_decoding/image_decoding.html?webp' - ] - - for url in urls_list: - self.AddStory(ImageDecodingMeasurementPage(url, self, url.split('/')[-1])) - -class ImageDecodingMeasurementStoryExpectations( - story.expectations.StoryExpectations): - def SetExpectations(self): - pass # Nothing disabled.
diff --git a/tools/perf/page_sets/system_health/expectations.py b/tools/perf/page_sets/system_health/expectations.py index ff6179e9..0ea1568e 100644 --- a/tools/perf/page_sets/system_health/expectations.py +++ b/tools/perf/page_sets/system_health/expectations.py
@@ -24,6 +24,8 @@ 'crbug.com/64939') self.DisableStory('browse:news:cnn', [expectations.ALL_MAC], 'crbug.com/728576') + self.DisableStory('browse:social:facebook_infinite_scroll', + [expectations.ALL_WIN], 'crbug.com/760319') class SystemHealthDesktopMemoryExpectations(expectations.StoryExpectations): @@ -51,6 +53,8 @@ [expectations.ALL_WIN], 'crbug.com/728464') self.DisableStory('multitab:misc:typical24', [expectations.ALL_MAC], 'crbug.com/742475') + self.DisableStory('browse:social:facebook_infinite_scroll', + [expectations.ALL_WIN], 'crbug.com/760319') class SystemHealthMobileCommonExpectations(expectations.StoryExpectations): @@ -85,6 +89,8 @@ self.DisableStory('long_running:tools:gmail-background', [expectations.ANDROID_WEBVIEW], 'Webview does not have tabs') + self.DisableStory('browse:social:facebook_infinite_scroll', + [expectations.ALL_ANDROID], 'crbug.com/760319') self.DisableStory('browse:shopping:avito', [expectations.ANDROID_NEXUS6], 'crbug.com/736497') self.DisableStory('browse:social:pinterest_infinite_scroll', @@ -141,6 +147,8 @@ 'crbug.com/708590') self.DisableStory('browse:news:cnn', [expectations.ALL_MAC], 'crbug.com/728576') + self.DisableStory('browse:social:facebook_infinite_scroll', + [expectations.ALL_WIN], 'crbug.com/760319') # Should only include browse:*:* stories. @@ -162,6 +170,8 @@ 'Webview does not have NTP') self.DisableStory('browse:social:pinterest_infinite_scroll', [expectations.ANDROID_WEBVIEW], 'crbug.com/728528') + self.DisableStory('browse:social:facebook_infinite_scroll', + [expectations.ALL_ANDROID], 'crbug.com/760319') class SystemHealthWebviewStartupExpectations(expectations.StoryExpectations):
diff --git a/tools/vim/chromium.ycm_extra_conf.py b/tools/vim/chromium.ycm_extra_conf.py index 04ac19d..58133c09 100644 --- a/tools/vim/chromium.ycm_extra_conf.py +++ b/tools/vim/chromium.ycm_extra_conf.py
@@ -238,7 +238,7 @@ # Parse flags that are important for YCM's purposes. clang_tokens = shlex.split(clang_commandline) - include_pattern = re.compile(r'^(-I|-isystem)(.*)$') + include_pattern = re.compile(r'^(-I|-isystem)(.+)$') for flag_index, flag in enumerate(clang_tokens): include_match = include_pattern.match(flag) if include_match: @@ -254,9 +254,7 @@ # are fixed. continue clang_flags.append(flag) - elif flag == '-isysroot': - # On Mac -isysroot <path> is used to find the system headers. - # Copy over both flags. + elif flag == '-isysroot' or flag == '-isystem' or flag == '-I': if flag_index + 1 < len(clang_tokens): clang_flags.append(flag) clang_flags.append(abspath(clang_tokens[flag_index + 1]))
diff --git a/tools/vim/tests/chromium.ycm_extra_conf_unittest.py b/tools/vim/tests/chromium.ycm_extra_conf_unittest.py index f1c3ef6..3662fee 100755 --- a/tools/vim/tests/chromium.ycm_extra_conf_unittest.py +++ b/tools/vim/tests/chromium.ycm_extra_conf_unittest.py
@@ -368,6 +368,42 @@ '[SRC]/build/mac.sdk', ]) + def testGetFlagsForIsystem(self): + result = self.ycm_extra_conf.FlagsForFile( + os.path.join(self.chrome_root, 'ten.cc')) + self.assertTrue(result) + self.assertTrue('flags' in result) + self.assertEquals( + self.NormalizeStringsInList(result['flags']), [ + '-DUSE_CLANG_COMPLETER', + '-std=c++14', + '-x', + 'c++', + '-I[SRC]', + '-Wno-unknown-warning-option', + '-I[OUT]/b', + '-isystem[OUT]/a', + '-isystem', '[SRC]/build/c', + '-isystem', '/usr/lib/include' + ]) + + def testGetFlagsTwoPartI(self): + result = self.ycm_extra_conf.FlagsForFile( + os.path.join(self.chrome_root, 'eleven.cc')) + self.assertTrue(result) + self.assertTrue('flags' in result) + self.assertEquals( + self.NormalizeStringsInList(result['flags']), [ + '-DUSE_CLANG_COMPLETER', + '-std=c++14', + '-x', + 'c++', + '-I[SRC]', + '-Wno-unknown-warning-option', + '-I', '[OUT]/a', + '-I', '[OUT]/tag-eleven' + ]) + if __name__ == '__main__': if not os.path.isfile('chromium.ycm_extra_conf.py'):
diff --git a/tools/vim/tests/data/fake_build_ninja.txt b/tools/vim/tests/data/fake_build_ninja.txt index 5fffada..ed2cfbc 100644 --- a/tools/vim/tests/data/fake_build_ninja.txt +++ b/tools/vim/tests/data/fake_build_ninja.txt
@@ -13,12 +13,18 @@ rule cxx command = $cxx -Ia -Itag-$tag $in -o $out +rule cxx_i + command = $cxx -I a -I tag-$tag $in -o $out + rule cxx_sysroot_abs command = $cxx -Ia --sysroot=/usr/lib/sysroot-image -isysroot /mac.sdk $in -o $out rule cxx_sysroot_rel command = $cxx -Ia --sysroot=../../build/sysroot-image -isysroot ../../build/mac.sdk $in -o $out +rule cxx_isystem + command = $cxx -Ib -isystema -isystem ../../build/c -isystem /usr/lib/include $in -o $out + rule link command = $link $in $out @@ -56,3 +62,9 @@ build obj/eight.o: cxx ../../eight.m build obj/nine.o: cxx ../../nine.mm + +build obj/ten.o: cxx_isystem ../../ten.cc + +build obj/eleven.o: cxx_i ../../eleven.cc + tag = eleven +
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn index c4169a08..e0ebf1a 100644 --- a/ui/accessibility/BUILD.gn +++ b/ui/accessibility/BUILD.gn
@@ -18,6 +18,8 @@ sources = [ "ax_action_data.cc", "ax_action_data.h", + "ax_event_generator.cc", + "ax_event_generator.h", "ax_export.h", "ax_host_delegate.cc", "ax_host_delegate.h", @@ -159,6 +161,7 @@ test("accessibility_unittests") { testonly = true sources = [ + "ax_event_generator_unittest.cc", "ax_generated_tree_unittest.cc", "ax_node_position_unittest.cc", "ax_text_utils_unittest.cc",
diff --git a/ui/accessibility/ax_event_generator.cc b/ui/accessibility/ax_event_generator.cc new file mode 100644 index 0000000..dfe82d7 --- /dev/null +++ b/ui/accessibility/ax_event_generator.cc
@@ -0,0 +1,305 @@ +// 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 "ui/accessibility/ax_event_generator.h" + +#include "ui/accessibility/ax_node.h" +#include "ui/accessibility/ax_role_properties.h" + +namespace ui { + +AXEventGenerator::TargetedEvent::TargetedEvent(ui::AXNode* node, Event event) + : node(node), event(event) {} + +AXEventGenerator::Iterator::Iterator( + const std::map<AXNode*, std::set<Event>>& map, + const std::map<AXNode*, std::set<Event>>::const_iterator& head) + : map_(map), map_iter_(head) { + if (map_iter_ != map.end()) + set_iter_ = map_iter_->second.begin(); +} + +AXEventGenerator::Iterator::Iterator(const AXEventGenerator::Iterator& other) = + default; + +bool AXEventGenerator::Iterator::operator!=( + const AXEventGenerator::Iterator& rhs) const { + return map_iter_ != rhs.map_iter_ || + (map_iter_ != map_.end() && set_iter_ != rhs.set_iter_); +} + +AXEventGenerator::Iterator& AXEventGenerator::Iterator::operator++() { + if (map_iter_ == map_.end()) + return *this; + + set_iter_++; + while (map_iter_ != map_.end() && set_iter_ == map_iter_->second.end()) { + map_iter_++; + if (map_iter_ != map_.end()) + set_iter_ = map_iter_->second.begin(); + } + + return *this; +} + +AXEventGenerator::TargetedEvent AXEventGenerator::Iterator::operator*() const { + DCHECK(map_iter_ != map_.end() && set_iter_ != map_iter_->second.end()); + return AXEventGenerator::TargetedEvent(map_iter_->first, *set_iter_); +} + +AXEventGenerator::AXEventGenerator(AXTree* tree) : tree_(tree) { + DCHECK(tree_); + tree_->SetDelegate(this); +} + +AXEventGenerator::~AXEventGenerator() { + DCHECK(tree_); + tree_->SetDelegate(nullptr); +} + +void AXEventGenerator::Clear() { + tree_events_.clear(); +} + +void AXEventGenerator::AddEvent(ui::AXNode* node, + AXEventGenerator::Event event) { + tree_events_[node].insert(event); +} + +void AXEventGenerator::OnNodeDataWillChange(AXTree* tree, + const AXNodeData& old_node_data, + const AXNodeData& new_node_data) { + DCHECK_EQ(tree_, tree); + // Fire CHILDREN_CHANGED events when the list of children updates. + // Internally we store inline text box nodes as children of a static text + // node, which enables us to determine character bounds and line layout. + // We don't expose those to platform APIs, though, so suppress + // CHILDREN_CHANGED events on static text nodes. + if (new_node_data.child_ids != old_node_data.child_ids && + new_node_data.role != ui::AX_ROLE_STATIC_TEXT) { + AXNode* node = tree_->GetFromId(new_node_data.id); + tree_events_[node].insert(Event::CHILDREN_CHANGED); + } +} + +void AXEventGenerator::OnRoleChanged(AXTree* tree, + AXNode* node, + AXRole old_role, + AXRole new_role) { + DCHECK_EQ(tree_, tree); + AddEvent(node, Event::ROLE_CHANGED); +} + +void AXEventGenerator::OnStateChanged(AXTree* tree, + AXNode* node, + AXState state, + bool new_value) { + DCHECK_EQ(tree_, tree); + + AddEvent(node, Event::STATE_CHANGED); + if (state == ui::AX_STATE_EXPANDED) { + AddEvent(node, new_value ? Event::EXPANDED : Event::COLLAPSED); + if (node->data().role == ui::AX_ROLE_ROW || + node->data().role == ui::AX_ROLE_TREE_ITEM) { + ui::AXNode* container = node; + while (container && !ui::IsRowContainer(container->data().role)) + container = container->parent(); + if (container) + AddEvent(container, Event::ROW_COUNT_CHANGED); + } + } + if (state == ui::AX_STATE_SELECTED) { + AddEvent(node, Event::SELECTED_CHANGED); + ui::AXNode* container = node; + while (container && + !ui::IsContainerWithSelectableChildrenRole(container->data().role)) + container = container->parent(); + if (container) + AddEvent(container, Event::SELECTED_CHILDREN_CHANGED); + } +} + +void AXEventGenerator::OnStringAttributeChanged(AXTree* tree, + AXNode* node, + AXStringAttribute attr, + const std::string& old_value, + const std::string& new_value) { + DCHECK_EQ(tree_, tree); + + switch (attr) { + case ui::AX_ATTR_NAME: + AddEvent(node, Event::NAME_CHANGED); + break; + case ui::AX_ATTR_DESCRIPTION: + AddEvent(node, Event::DESCRIPTION_CHANGED); + break; + case ui::AX_ATTR_VALUE: + AddEvent(node, Event::VALUE_CHANGED); + break; + case ui::AX_ATTR_ARIA_INVALID_VALUE: + AddEvent(node, Event::INVALID_STATUS_CHANGED); + break; + case ui::AX_ATTR_LIVE_STATUS: + if (node->data().role != ui::AX_ROLE_ALERT) + AddEvent(node, Event::LIVE_REGION_CREATED); + break; + default: + AddEvent(node, Event::OTHER_ATTRIBUTE_CHANGED); + break; + } +} + +void AXEventGenerator::OnIntAttributeChanged(AXTree* tree, + AXNode* node, + AXIntAttribute attr, + int32_t old_value, + int32_t new_value) { + DCHECK_EQ(tree_, tree); + + switch (attr) { + case ui::AX_ATTR_ACTIVEDESCENDANT_ID: + AddEvent(node, Event::ACTIVE_DESCENDANT_CHANGED); + break; + case ui::AX_ATTR_CHECKED_STATE: + AddEvent(node, Event::CHECKED_STATE_CHANGED); + break; + case ui::AX_ATTR_INVALID_STATE: + AddEvent(node, Event::INVALID_STATUS_CHANGED); + break; + case ui::AX_ATTR_RESTRICTION: + AddEvent(node, Event::STATE_CHANGED); + break; + case ui::AX_ATTR_SCROLL_X: + case ui::AX_ATTR_SCROLL_Y: + AddEvent(node, Event::SCROLL_POSITION_CHANGED); + break; + default: + AddEvent(node, Event::OTHER_ATTRIBUTE_CHANGED); + break; + } +} + +void AXEventGenerator::OnFloatAttributeChanged(AXTree* tree, + AXNode* node, + AXFloatAttribute attr, + float old_value, + float new_value) { + DCHECK_EQ(tree_, tree); + + if (attr == ui::AX_ATTR_VALUE_FOR_RANGE) + AddEvent(node, Event::VALUE_CHANGED); + else + AddEvent(node, Event::OTHER_ATTRIBUTE_CHANGED); +} + +void AXEventGenerator::OnBoolAttributeChanged(AXTree* tree, + AXNode* node, + AXBoolAttribute attr, + bool new_value) { + DCHECK_EQ(tree_, tree); + + AddEvent(node, Event::OTHER_ATTRIBUTE_CHANGED); +} + +void AXEventGenerator::OnIntListAttributeChanged( + AXTree* tree, + AXNode* node, + AXIntListAttribute attr, + const std::vector<int32_t>& old_value, + const std::vector<int32_t>& new_value) { + DCHECK_EQ(tree_, tree); + AddEvent(node, Event::OTHER_ATTRIBUTE_CHANGED); +} + +void AXEventGenerator::OnStringListAttributeChanged( + AXTree* tree, + AXNode* node, + AXStringListAttribute attr, + const std::vector<std::string>& old_value, + const std::vector<std::string>& new_value) { + DCHECK_EQ(tree_, tree); +} + +void AXEventGenerator::OnTreeDataChanged(AXTree* tree, + const ui::AXTreeData& old_tree_data, + const ui::AXTreeData& new_tree_data) { + DCHECK_EQ(tree_, tree); + + if (new_tree_data.loaded && !old_tree_data.loaded) + AddEvent(tree->root(), Event::LOAD_COMPLETE); + if (new_tree_data.sel_anchor_object_id != + old_tree_data.sel_anchor_object_id || + new_tree_data.sel_anchor_offset != old_tree_data.sel_anchor_offset || + new_tree_data.sel_anchor_affinity != old_tree_data.sel_anchor_affinity || + new_tree_data.sel_focus_object_id != old_tree_data.sel_focus_object_id || + new_tree_data.sel_focus_offset != old_tree_data.sel_focus_offset || + new_tree_data.sel_focus_affinity != old_tree_data.sel_focus_affinity) { + AddEvent(tree->root(), Event::DOCUMENT_SELECTION_CHANGED); + } + if (new_tree_data.title != old_tree_data.title) + AddEvent(tree->root(), Event::DOCUMENT_TITLE_CHANGED); +} + +void AXEventGenerator::OnNodeWillBeDeleted(AXTree* tree, AXNode* node) { + DCHECK_EQ(tree_, tree); + tree_events_.erase(node); +} + +void AXEventGenerator::OnSubtreeWillBeDeleted(AXTree* tree, AXNode* node) { + DCHECK_EQ(tree_, tree); +} + +void AXEventGenerator::OnNodeWillBeReparented(AXTree* tree, AXNode* node) { + DCHECK_EQ(tree_, tree); +} + +void AXEventGenerator::OnSubtreeWillBeReparented(AXTree* tree, AXNode* node) { + DCHECK_EQ(tree_, tree); +} + +void AXEventGenerator::OnNodeCreated(AXTree* tree, AXNode* node) { + DCHECK_EQ(tree_, tree); +} + +void AXEventGenerator::OnNodeReparented(AXTree* tree, AXNode* node) { + DCHECK_EQ(tree_, tree); +} + +void AXEventGenerator::OnNodeChanged(AXTree* tree, AXNode* node) { + DCHECK_EQ(tree_, tree); +} + +void AXEventGenerator::OnAtomicUpdateFinished( + AXTree* tree, + bool root_changed, + const std::vector<Change>& changes) { + DCHECK_EQ(tree_, tree); + + if (root_changed && tree->data().loaded) + AddEvent(tree->root(), Event::LOAD_COMPLETE); + + for (const auto& change : changes) { + if ((change.type == NODE_CREATED || change.type == SUBTREE_CREATED) && + change.node->data().HasStringAttribute(ui::AX_ATTR_LIVE_STATUS)) { + if (change.node->data().role == ui::AX_ROLE_ALERT) + AddEvent(change.node, Event::ALERT); + else + AddEvent(change.node, Event::LIVE_REGION_CREATED); + continue; + } + if (change.node->data().HasStringAttribute( + ui::AX_ATTR_CONTAINER_LIVE_STATUS)) { + if (!change.node->data().GetStringAttribute(ui::AX_ATTR_NAME).empty()) + AddEvent(change.node, Event::LIVE_REGION_NODE_CHANGED); + ui::AXNode* live_root = change.node; + while (live_root && + !live_root->data().HasStringAttribute(ui::AX_ATTR_LIVE_STATUS)) + live_root = live_root->parent(); + if (live_root) + AddEvent(live_root, Event::LIVE_REGION_CHANGED); + } + } +} + +} // namespace ui
diff --git a/ui/accessibility/ax_event_generator.h b/ui/accessibility/ax_event_generator.h new file mode 100644 index 0000000..ee49968 --- /dev/null +++ b/ui/accessibility/ax_event_generator.h
@@ -0,0 +1,161 @@ +// 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 UI_ACCESSIBILITY_AX_EVENT_GENERATOR_H_ +#define UI_ACCESSIBILITY_AX_EVENT_GENERATOR_H_ + +#include <map> +#include <set> +#include <vector> + +#include "ui/accessibility/ax_export.h" +#include "ui/accessibility/ax_tree.h" + +namespace ui { + +// Subclass of AXTreeDelegate that automatically generates AXEvents to fire +// based on changes to an accessibility tree. Every platform +// tends to want different events, so this class lets each platform +// handle the events it wants and ignore the others. +class AX_EXPORT AXEventGenerator : public AXTreeDelegate { + public: + enum class Event : int32_t { + ACTIVE_DESCENDANT_CHANGED, + ALERT, + CHECKED_STATE_CHANGED, + CHILDREN_CHANGED, + COLLAPSED, + DESCRIPTION_CHANGED, + DOCUMENT_SELECTION_CHANGED, + DOCUMENT_TITLE_CHANGED, + EXPANDED, + INVALID_STATUS_CHANGED, + LIVE_REGION_CHANGED, + LIVE_REGION_CREATED, + LIVE_REGION_NODE_CHANGED, + LOAD_COMPLETE, + NAME_CHANGED, + OTHER_ATTRIBUTE_CHANGED, + ROLE_CHANGED, + ROW_COUNT_CHANGED, + SCROLL_POSITION_CHANGED, + SELECTED_CHANGED, + SELECTED_CHILDREN_CHANGED, + STATE_CHANGED, + VALUE_CHANGED, + }; + + struct TargetedEvent { + TargetedEvent(ui::AXNode* node, Event event); + ui::AXNode* node; + Event event; + }; + + class AX_EXPORT Iterator + : public std::iterator<std::input_iterator_tag, TargetedEvent> { + public: + Iterator(const std::map<AXNode*, std::set<Event>>& map, + const std::map<AXNode*, std::set<Event>>::const_iterator& head); + Iterator(const Iterator& other); + + bool operator!=(const Iterator& rhs) const; + Iterator& operator++(); + TargetedEvent operator*() const; + + private: + const std::map<AXNode*, std::set<Event>>& map_; + std::map<AXNode*, std::set<Event>>::const_iterator map_iter_; + std::set<Event>::const_iterator set_iter_; + }; + + // Automatically registers itself as the delegate of |tree| and + // clears it on desctruction. |tree| must be valid for the lifetime + // of this object. + AXEventGenerator(AXTree* tree); + + ~AXEventGenerator() override; + + Iterator begin() const { + return Iterator(tree_events_, tree_events_.begin()); + } + Iterator end() const { return Iterator(tree_events_, tree_events_.end()); } + + // Clear any previously added events. + void Clear(); + + // This is called automatically based on changes to the tree observed + // by AXTreeDelegate, but you can also call it directly to add events + // and retrieve them later. + // + // Note that events are organized by node and then by event id to + // efficiently remove duplicates, so events won't be retrieved in the + // same order they were added. + void AddEvent(ui::AXNode* node, Event event); + + protected: + // AXTreeDelegate overrides. + void OnNodeDataWillChange(AXTree* tree, + const AXNodeData& old_node_data, + const AXNodeData& new_node_data) override; + void OnRoleChanged(AXTree* tree, + AXNode* node, + AXRole old_role, + AXRole new_role) override; + void OnStateChanged(AXTree* tree, + AXNode* node, + AXState state, + bool new_value) override; + void OnStringAttributeChanged(AXTree* tree, + AXNode* node, + AXStringAttribute attr, + const std::string& old_value, + const std::string& new_value) override; + void OnIntAttributeChanged(AXTree* tree, + AXNode* node, + AXIntAttribute attr, + int32_t old_value, + int32_t new_value) override; + void OnFloatAttributeChanged(AXTree* tree, + AXNode* node, + AXFloatAttribute attr, + float old_value, + float new_value) override; + void OnBoolAttributeChanged(AXTree* tree, + AXNode* node, + AXBoolAttribute attr, + bool new_value) override; + void OnIntListAttributeChanged( + AXTree* tree, + AXNode* node, + AXIntListAttribute attr, + const std::vector<int32_t>& old_value, + const std::vector<int32_t>& new_value) override; + void OnStringListAttributeChanged( + AXTree* tree, + AXNode* node, + AXStringListAttribute attr, + const std::vector<std::string>& old_value, + const std::vector<std::string>& new_value) override; + void OnTreeDataChanged(AXTree* tree, + const ui::AXTreeData& old_data, + const ui::AXTreeData& new_data) override; + void OnNodeWillBeDeleted(AXTree* tree, AXNode* node) override; + void OnSubtreeWillBeDeleted(AXTree* tree, AXNode* node) override; + void OnNodeWillBeReparented(AXTree* tree, AXNode* node) override; + void OnSubtreeWillBeReparented(AXTree* tree, AXNode* node) override; + void OnNodeCreated(AXTree* tree, AXNode* node) override; + void OnNodeReparented(AXTree* tree, AXNode* node) override; + void OnNodeChanged(AXTree* tree, AXNode* node) override; + void OnAtomicUpdateFinished(AXTree* tree, + bool root_changed, + const std::vector<Change>& changes) override; + + private: + AXTree* tree_; // Not owned. + std::map<AXNode*, std::set<Event>> tree_events_; +}; + +} // namespace ui + +#endif // UI_ACCESSIBILITY_AX_EVENT_GENERATOR_H_
diff --git a/ui/accessibility/ax_event_generator_unittest.cc b/ui/accessibility/ax_event_generator_unittest.cc new file mode 100644 index 0000000..c9bbb07 --- /dev/null +++ b/ui/accessibility/ax_event_generator_unittest.cc
@@ -0,0 +1,567 @@ +// 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 "ui/accessibility/ax_event_generator.h" + +#include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/accessibility/ax_node.h" +#include "ui/accessibility/ax_serializable_tree.h" +#include "ui/accessibility/ax_tree_serializer.h" + +namespace ui { + +namespace { + +std::string DumpEvents(AXEventGenerator* generator) { + std::vector<std::string> event_strs; + for (auto targeted_event : *generator) { + const char* event_name; + switch (targeted_event.event) { + case AXEventGenerator::Event::ACTIVE_DESCENDANT_CHANGED: + event_name = "ACTIVE_DESCENDANT_CHANGED"; + break; + case AXEventGenerator::Event::ALERT: + event_name = "ALERT"; + break; + case AXEventGenerator::Event::CHECKED_STATE_CHANGED: + event_name = "CHECKED_STATE_CHANGED"; + break; + case AXEventGenerator::Event::CHILDREN_CHANGED: + event_name = "CHILDREN_CHANGED"; + break; + case AXEventGenerator::Event::COLLAPSED: + event_name = "COLLAPSED"; + break; + case AXEventGenerator::Event::DESCRIPTION_CHANGED: + event_name = "DESCRIPTION_CHANGED"; + break; + case AXEventGenerator::Event::DOCUMENT_SELECTION_CHANGED: + event_name = "DOCUMENT_SELECTION_CHANGED"; + break; + case AXEventGenerator::Event::DOCUMENT_TITLE_CHANGED: + event_name = "DOCUMENT_TITLE_CHANGED"; + break; + case AXEventGenerator::Event::EXPANDED: + event_name = "EXPANDED"; + break; + case AXEventGenerator::Event::INVALID_STATUS_CHANGED: + event_name = "INVALID_STATUS_CHANGED"; + break; + case AXEventGenerator::Event::LIVE_REGION_CHANGED: + event_name = "LIVE_REGION_CHANGED"; + break; + case AXEventGenerator::Event::LIVE_REGION_CREATED: + event_name = "LIVE_REGION_CREATED"; + break; + case AXEventGenerator::Event::LIVE_REGION_NODE_CHANGED: + event_name = "LIVE_REGION_NODE_CHANGED"; + break; + case AXEventGenerator::Event::LOAD_COMPLETE: + event_name = "LOAD_COMPLETE"; + break; + case AXEventGenerator::Event::NAME_CHANGED: + event_name = "NAME_CHANGED"; + break; + case AXEventGenerator::Event::OTHER_ATTRIBUTE_CHANGED: + event_name = "OTHER_ATTRIBUTE_CHANGED"; + break; + case AXEventGenerator::Event::ROLE_CHANGED: + event_name = "ROLE_CHANGED"; + break; + case AXEventGenerator::Event::ROW_COUNT_CHANGED: + event_name = "ROW_COUNT_CHANGED"; + break; + case AXEventGenerator::Event::SCROLL_POSITION_CHANGED: + event_name = "SCROLL_POSITION_CHANGED"; + break; + case AXEventGenerator::Event::SELECTED_CHANGED: + event_name = "SELECTED_CHANGED"; + break; + case AXEventGenerator::Event::SELECTED_CHILDREN_CHANGED: + event_name = "SELECTED_CHILDREN_CHANGED"; + break; + case AXEventGenerator::Event::STATE_CHANGED: + event_name = "STATE_CHANGED"; + break; + case AXEventGenerator::Event::VALUE_CHANGED: + event_name = "VALUE_CHANGED"; + break; + default: + NOTREACHED(); + event_name = "UNKNOWN"; + break; + } + event_strs.push_back( + base::StringPrintf("%s on %d", event_name, targeted_event.node->id())); + } + + // The order of events is arbitrary, so just sort the strings + // alphabetically to make the test output predictable. + std::sort(event_strs.begin(), event_strs.end()); + + return base::JoinString(event_strs, ", "); +} + +} // namespace + +TEST(AXEventGeneratorTest, LoadCompleteSameTree) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.has_tree_data = true; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate load_complete_update = initial_state; + load_complete_update.tree_data.loaded = true; + EXPECT_TRUE(tree.Unserialize(load_complete_update)); + EXPECT_EQ("LOAD_COMPLETE on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, LoadCompleteNewTree) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.has_tree_data = true; + initial_state.tree_data.loaded = true; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate load_complete_update; + load_complete_update.root_id = 2; + load_complete_update.nodes.resize(1); + load_complete_update.nodes[0].id = 2; + load_complete_update.has_tree_data = true; + load_complete_update.tree_data.loaded = true; + EXPECT_TRUE(tree.Unserialize(load_complete_update)); + EXPECT_EQ("LOAD_COMPLETE on 2", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, DocumentSelectionChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.has_tree_data = true; + initial_state.tree_data.sel_focus_object_id = 1; + initial_state.tree_data.sel_focus_offset = 1; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.tree_data.sel_focus_offset = 2; + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("DOCUMENT_SELECTION_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, DocumentTitleChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.has_tree_data = true; + initial_state.tree_data.title = "Before"; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.tree_data.title = "After"; + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("DOCUMENT_TITLE_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, ExpandedAndRowCount) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(4); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = ui::AX_ROLE_ROOT_WEB_AREA; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(4); + initial_state.nodes[1].id = 2; + initial_state.nodes[1].role = ui::AX_ROLE_TABLE; + initial_state.nodes[1].child_ids.push_back(3); + initial_state.nodes[2].id = 3; + initial_state.nodes[2].role = ui::AX_ROLE_ROW; + initial_state.nodes[3].id = 4; + initial_state.nodes[3].role = ui::AX_ROLE_POP_UP_BUTTON; + initial_state.nodes[3].AddState(ui::AX_STATE_EXPANDED); + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[2].AddState(ui::AX_STATE_EXPANDED); + update.nodes[3].state = 0; + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ( + "COLLAPSED on 4, " + "EXPANDED on 3, " + "ROW_COUNT_CHANGED on 2, " + "STATE_CHANGED on 3, " + "STATE_CHANGED on 4", + DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, SelectedAndSelectedChildren) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(4); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = ui::AX_ROLE_ROOT_WEB_AREA; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(4); + initial_state.nodes[1].id = 2; + initial_state.nodes[1].role = ui::AX_ROLE_MENU; + initial_state.nodes[1].child_ids.push_back(3); + initial_state.nodes[2].id = 3; + initial_state.nodes[2].role = ui::AX_ROLE_MENU_ITEM; + initial_state.nodes[3].id = 4; + initial_state.nodes[3].role = ui::AX_ROLE_LIST_BOX_OPTION; + initial_state.nodes[3].AddState(ui::AX_STATE_SELECTED); + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[2].AddState(ui::AX_STATE_SELECTED); + update.nodes[3].state = 0; + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ( + "SELECTED_CHANGED on 3, " + "SELECTED_CHANGED on 4, " + "SELECTED_CHILDREN_CHANGED on 2, " + "STATE_CHANGED on 3, " + "STATE_CHANGED on 4", + DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, StringValueChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = ui::AX_ROLE_TEXT_FIELD; + initial_state.nodes[0].AddStringAttribute(ui::AX_ATTR_VALUE, "Before"); + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].string_attributes.clear(); + update.nodes[0].AddStringAttribute(ui::AX_ATTR_VALUE, "After"); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("VALUE_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, FloatValueChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = ui::AX_ROLE_SLIDER; + initial_state.nodes[0].AddFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, 1.0); + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].float_attributes.clear(); + update.nodes[0].AddFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, 2.0); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("VALUE_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, InvalidStatusChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = ui::AX_ROLE_TEXT_FIELD; + initial_state.nodes[0].AddStringAttribute(ui::AX_ATTR_VALUE, "Text"); + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].AddIntAttribute(ui::AX_ATTR_INVALID_STATE, + ui::AX_INVALID_STATE_SPELLING); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("INVALID_STATUS_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, AddLiveRegionAttribute) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].AddStringAttribute(ui::AX_ATTR_LIVE_STATUS, "polite"); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("LIVE_REGION_CREATED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, CheckedStateChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = ui::AX_ROLE_CHECK_BOX; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].AddIntAttribute(ui::AX_ATTR_CHECKED_STATE, + ui::AX_CHECKED_STATE_TRUE); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("CHECKED_STATE_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, ActiveDescendantChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(3); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].role = ui::AX_ROLE_LIST_BOX; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(3); + initial_state.nodes[0].AddIntAttribute(ui::AX_ATTR_ACTIVEDESCENDANT_ID, 2); + initial_state.nodes[1].id = 2; + initial_state.nodes[1].role = ui::AX_ROLE_LIST_BOX_OPTION; + initial_state.nodes[2].id = 3; + initial_state.nodes[2].role = ui::AX_ROLE_LIST_BOX_OPTION; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].int_attributes.clear(); + update.nodes[0].AddIntAttribute(ui::AX_ATTR_ACTIVEDESCENDANT_ID, 3); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("ACTIVE_DESCENDANT_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, CreateAlertAndLiveRegion) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes.resize(3); + update.nodes[0].child_ids.push_back(2); + update.nodes[0].child_ids.push_back(3); + update.nodes[1].id = 2; + update.nodes[1].AddStringAttribute(ui::AX_ATTR_LIVE_STATUS, "polite"); + update.nodes[2].id = 3; + update.nodes[2].role = ui::AX_ROLE_ALERT; + update.nodes[2].AddStringAttribute(ui::AX_ATTR_LIVE_STATUS, "polite"); + + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ( + "ALERT on 3, " + "CHILDREN_CHANGED on 1, " + "LIVE_REGION_CREATED on 2", + DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, LiveRegionChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(3); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].AddStringAttribute(ui::AX_ATTR_LIVE_STATUS, "polite"); + initial_state.nodes[0].AddStringAttribute(ui::AX_ATTR_CONTAINER_LIVE_STATUS, + "polite"); + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(3); + initial_state.nodes[1].id = 2; + initial_state.nodes[1].role = ui::AX_ROLE_STATIC_TEXT; + initial_state.nodes[1].AddStringAttribute(ui::AX_ATTR_CONTAINER_LIVE_STATUS, + "polite"); + initial_state.nodes[1].AddStringAttribute(ui::AX_ATTR_NAME, "Before 1"); + initial_state.nodes[2].id = 3; + initial_state.nodes[2].role = ui::AX_ROLE_STATIC_TEXT; + initial_state.nodes[2].AddStringAttribute(ui::AX_ATTR_CONTAINER_LIVE_STATUS, + "polite"); + initial_state.nodes[2].AddStringAttribute(ui::AX_ATTR_NAME, "Before 2"); + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[1].string_attributes.clear(); + update.nodes[1].AddStringAttribute(ui::AX_ATTR_CONTAINER_LIVE_STATUS, + "polite"); + update.nodes[1].AddStringAttribute(ui::AX_ATTR_NAME, "After 1"); + update.nodes[2].string_attributes.clear(); + update.nodes[2].AddStringAttribute(ui::AX_ATTR_CONTAINER_LIVE_STATUS, + "polite"); + update.nodes[2].AddStringAttribute(ui::AX_ATTR_NAME, "After 2"); + + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ( + "LIVE_REGION_CHANGED on 1, " + "LIVE_REGION_NODE_CHANGED on 2, " + "LIVE_REGION_NODE_CHANGED on 3, " + "NAME_CHANGED on 2, " + "NAME_CHANGED on 3", + DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, AddChild) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(2); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[1].id = 2; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes.resize(3); + update.nodes[0].child_ids.push_back(3); + update.nodes[2].id = 3; + + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("CHILDREN_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, RemoveChild) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(3); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(3); + initial_state.nodes[1].id = 2; + initial_state.nodes[2].id = 3; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes.resize(2); + update.nodes[0].child_ids.clear(); + update.nodes[0].child_ids.push_back(2); + + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("CHILDREN_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, ReorderChildren) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(3); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(3); + initial_state.nodes[1].id = 2; + initial_state.nodes[2].id = 3; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].child_ids.clear(); + update.nodes[0].child_ids.push_back(3); + update.nodes[0].child_ids.push_back(2); + + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("CHILDREN_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, ScrollPositionChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].AddIntAttribute(ui::AX_ATTR_SCROLL_Y, 10); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("SCROLL_POSITION_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, OtherAttributeChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(6); + initial_state.nodes[0].id = 1; + initial_state.nodes[0].child_ids.push_back(2); + initial_state.nodes[0].child_ids.push_back(3); + initial_state.nodes[0].child_ids.push_back(4); + initial_state.nodes[0].child_ids.push_back(5); + initial_state.nodes[0].child_ids.push_back(6); + initial_state.nodes[1].id = 2; + initial_state.nodes[2].id = 3; + initial_state.nodes[3].id = 4; + initial_state.nodes[4].id = 5; + initial_state.nodes[5].id = 6; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[1].AddStringAttribute(ui::AX_ATTR_LANGUAGE, "de"); + update.nodes[2].AddIntAttribute(ui::AX_ATTR_ARIA_CELL_COLUMN_INDEX, 7); + update.nodes[3].AddFloatAttribute(ui::AX_ATTR_FONT_SIZE, 12.0f); + update.nodes[4].AddBoolAttribute(ui::AX_ATTR_MODAL, true); + std::vector<int> ids = {2}; + update.nodes[5].AddIntListAttribute(ui::AX_ATTR_CONTROLS_IDS, ids); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ( + "OTHER_ATTRIBUTE_CHANGED on 2, " + "OTHER_ATTRIBUTE_CHANGED on 3, " + "OTHER_ATTRIBUTE_CHANGED on 4, " + "OTHER_ATTRIBUTE_CHANGED on 5, " + "OTHER_ATTRIBUTE_CHANGED on 6", + DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, NameChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].AddStringAttribute(ui::AX_ATTR_NAME, "Hello"); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("NAME_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, DescriptionChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].AddStringAttribute(ui::AX_ATTR_DESCRIPTION, "Hello"); + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("DESCRIPTION_CHANGED on 1", DumpEvents(&event_generator)); +} + +TEST(AXEventGeneratorTest, RoleChanged) { + AXTreeUpdate initial_state; + initial_state.root_id = 1; + initial_state.nodes.resize(1); + initial_state.nodes[0].id = 1; + AXTree tree(initial_state); + + AXEventGenerator event_generator(&tree); + AXTreeUpdate update = initial_state; + update.nodes[0].role = ui::AX_ROLE_CHECK_BOX; + EXPECT_TRUE(tree.Unserialize(update)); + EXPECT_EQ("ROLE_CHANGED on 1", DumpEvents(&event_generator)); +} + +} // namespace ui
diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h index 95885de..c45f53a 100644 --- a/ui/accessibility/ax_tree.h +++ b/ui/accessibility/ax_tree.h
@@ -163,6 +163,7 @@ virtual ~AXTree(); virtual void SetDelegate(AXTreeDelegate* delegate); + AXTreeDelegate* delegate() const { return delegate_; } AXNode* root() const { return root_; }
diff --git a/ui/android/overscroll_glow.cc b/ui/android/overscroll_glow.cc index 7f3c43da..0470d11 100644 --- a/ui/android/overscroll_glow.cc +++ b/ui/android/overscroll_glow.cc
@@ -74,10 +74,10 @@ } bool OverscrollGlow::OnOverscrolled(base::TimeTicks current_time, - const gfx::Vector2dF& accumulated_overscroll, - gfx::Vector2dF overscroll_delta, - gfx::Vector2dF velocity, - const gfx::Vector2dF& overscroll_location) { + gfx::Vector2dF accumulated_overscroll, + gfx::Vector2dF overscroll_delta, + gfx::Vector2dF velocity, + gfx::Vector2dF overscroll_location) { // The size of the glow determines the relative effect of the inputs; an // empty-sized effect is effectively disabled. if (viewport_size_.IsEmpty())
diff --git a/ui/android/overscroll_glow.h b/ui/android/overscroll_glow.h index 8253de0..cdefeb9d 100644 --- a/ui/android/overscroll_glow.h +++ b/ui/android/overscroll_glow.h
@@ -40,18 +40,19 @@ // The effect is enabled by default, but will remain dormant until the first // overscroll event. explicit OverscrollGlow(OverscrollGlowClient* client); - ~OverscrollGlow(); + virtual ~OverscrollGlow(); // Called when the root content layer overscrolls. // |accumulated_overscroll| and |overscroll_delta| are in device pixels, while // |velocity| is in device pixels / second. // |overscroll_location| is the coordinate of the causal overscrolling event. // Returns true if the effect still needs animation ticks. - bool OnOverscrolled(base::TimeTicks current_time, - const gfx::Vector2dF& accumulated_overscroll, - gfx::Vector2dF overscroll_delta, - gfx::Vector2dF velocity, - const gfx::Vector2dF& overscroll_location); + // This method is made virtual for mocking. + virtual bool OnOverscrolled(base::TimeTicks current_time, + gfx::Vector2dF accumulated_overscroll, + gfx::Vector2dF overscroll_delta, + gfx::Vector2dF velocity, + gfx::Vector2dF overscroll_location); // Returns true if the effect still needs animation ticks, with effect layers // attached to |parent_layer| if necessary.
diff --git a/ui/android/overscroll_refresh.cc b/ui/android/overscroll_refresh.cc index 2f2af62..60b54aa 100644 --- a/ui/android/overscroll_refresh.cc +++ b/ui/android/overscroll_refresh.cc
@@ -24,6 +24,12 @@ DCHECK(handler); } +OverscrollRefresh::OverscrollRefresh() + : scrolled_to_top_(true), + overflow_y_hidden_(false), + scroll_consumption_state_(DISABLED), + handler_(nullptr) {} + OverscrollRefresh::~OverscrollRefresh() { } @@ -43,15 +49,10 @@ Release(allow_activation); } -void OverscrollRefresh::OnScrollUpdateAck(bool was_consumed) { +void OverscrollRefresh::OnOverscrolled() { if (scroll_consumption_state_ != AWAITING_SCROLL_UPDATE_ACK) return; - if (was_consumed) { - scroll_consumption_state_ = DISABLED; - return; - } - scroll_consumption_state_ = handler_->PullStart() ? ENABLED : DISABLED; }
diff --git a/ui/android/overscroll_refresh.h b/ui/android/overscroll_refresh.h index 7cb98e27..ebaf795 100644 --- a/ui/android/overscroll_refresh.h +++ b/ui/android/overscroll_refresh.h
@@ -30,16 +30,19 @@ enum { kMinPullsToActivate = 3 }; explicit OverscrollRefresh(OverscrollRefreshHandler* handler); - ~OverscrollRefresh(); + + virtual ~OverscrollRefresh(); // Scroll event stream listening methods. void OnScrollBegin(); // Returns whether the refresh was activated. void OnScrollEnd(const gfx::Vector2dF& velocity); - // Scroll ack listener. The effect will only be activated if the initial - // updates go unconsumed. - void OnScrollUpdateAck(bool was_consumed); + // Scroll ack listener. The effect will only be activated if |can_navigate| + // is true which happens when the scroll update is not consumed and the + // scroll_boundary_behavior on y axis is 'auto'. + // This method is made virtual for mocking. + virtual void OnOverscrolled(); // Returns true if the effect has consumed the |scroll_delta|. bool WillHandleScrollUpdate(const gfx::Vector2dF& scroll_delta); @@ -55,13 +58,20 @@ // Reset the effect to its inactive state, immediately detaching and // disabling any active effects. - void Reset(); + // This method is made virtual for mocking. + virtual void Reset(); // Returns true if the refresh effect is either being manipulated or animated. - bool IsActive() const; + // This method is made virtual for mocking. + virtual bool IsActive() const; // Returns true if the effect is waiting for an unconsumed scroll to start. - bool IsAwaitingScrollUpdateAck() const; + // This method is made virtual for mocking. + virtual bool IsAwaitingScrollUpdateAck() const; + + protected: + // This constructor is for mocking only. + OverscrollRefresh(); private: void Release(bool allow_refresh);
diff --git a/ui/android/overscroll_refresh_unittest.cc b/ui/android/overscroll_refresh_unittest.cc index c133d75..f31b85f45 100644 --- a/ui/android/overscroll_refresh_unittest.cc +++ b/ui/android/overscroll_refresh_unittest.cc
@@ -86,7 +86,7 @@ EXPECT_TRUE(effect.IsAwaitingScrollUpdateAck()); // The unconsumed, overscrolling scroll will trigger the effect. - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); EXPECT_TRUE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); EXPECT_TRUE(GetAndResetPullStarted()); @@ -124,7 +124,7 @@ ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); @@ -145,7 +145,7 @@ ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); @@ -164,7 +164,7 @@ EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); @@ -180,11 +180,12 @@ // Consumption of the initial touchmove or scroll should prevent future // activation. - effect.OnScrollUpdateAck(true); + effect.Reset(); + effect.OnOverscrolled(); EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); EXPECT_FALSE(effect.IsActive()); EXPECT_FALSE(effect.IsAwaitingScrollUpdateAck()); EXPECT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 500))); @@ -198,7 +199,7 @@ effect.OnScrollBegin(); ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); ASSERT_TRUE(effect.IsActive()); EXPECT_TRUE(GetAndResetPullStarted()); @@ -213,7 +214,7 @@ effect.OnScrollBegin(); ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); ASSERT_TRUE(effect.IsActive()); EXPECT_TRUE(GetAndResetPullStarted()); @@ -229,7 +230,7 @@ effect.OnScrollBegin(); ASSERT_FALSE(effect.WillHandleScrollUpdate(gfx::Vector2dF(0, 10))); ASSERT_TRUE(effect.IsAwaitingScrollUpdateAck()); - effect.OnScrollUpdateAck(false); + effect.OnOverscrolled(); ASSERT_TRUE(effect.IsActive()); EXPECT_TRUE(GetAndResetPullStarted());
diff --git a/ui/app_list/BUILD.gn b/ui/app_list/BUILD.gn index 75b61ee6f..b009243 100644 --- a/ui/app_list/BUILD.gn +++ b/ui/app_list/BUILD.gn
@@ -156,7 +156,6 @@ "views/search_result_container_view.h", "views/search_result_list_view.cc", "views/search_result_list_view.h", - "views/search_result_list_view_delegate.h", "views/search_result_page_view.cc", "views/search_result_page_view.h", "views/search_result_tile_item_list_view.cc",
diff --git a/ui/app_list/views/app_list_main_view.cc b/ui/app_list/views/app_list_main_view.cc index 225dbab4..c0dcfda9 100644 --- a/ui/app_list/views/app_list_main_view.cc +++ b/ui/app_list/views/app_list_main_view.cc
@@ -201,6 +201,12 @@ ->EndDrag(true); } +void AppListMainView::OnResultInstalled(SearchResult* result) { + // Clears the search to show the apps grid. The last installed app + // should be highlighted and made visible already. + search_box_view_->ClearSearch(); +} + void AppListMainView::QueryChanged(SearchBoxView* sender) { base::string16 query; base::TrimWhitespace(model_->search_box()->text(), base::TRIM_ALL, &query); @@ -219,10 +225,4 @@ contents_view_->search_results_page_view()->SetSelection(select); } -void AppListMainView::OnResultInstalled(SearchResult* result) { - // Clears the search to show the apps grid. The last installed app - // should be highlighted and made visible already. - search_box_view_->ClearSearch(); -} - } // namespace app_list
diff --git a/ui/app_list/views/app_list_main_view.h b/ui/app_list/views/app_list_main_view.h index 98bdaec..526c511 100644 --- a/ui/app_list/views/app_list_main_view.h +++ b/ui/app_list/views/app_list_main_view.h
@@ -13,7 +13,6 @@ #include "ui/app_list/app_list_export.h" #include "ui/app_list/app_list_model_observer.h" #include "ui/app_list/views/search_box_view_delegate.h" -#include "ui/app_list/views/search_result_list_view_delegate.h" #include "ui/views/view.h" namespace app_list { @@ -31,8 +30,7 @@ // when the user is signed in. class APP_LIST_EXPORT AppListMainView : public views::View, public AppListModelObserver, - public SearchBoxViewDelegate, - public SearchResultListViewDelegate { + public SearchBoxViewDelegate { public: AppListMainView(AppListViewDelegate* delegate, AppListView* app_list_view); ~AppListMainView() override; @@ -82,6 +80,9 @@ // changes, necessitating a cancel of the drag operation. void CancelDragInActiveFolder(); + // Called when the app represented by |result| is installed. + void OnResultInstalled(SearchResult* result); + private: // Adds the ContentsView. void AddContentsViews(); @@ -94,9 +95,6 @@ void BackButtonPressed() override; void SetSearchResultSelection(bool select) override; - // Overridden from SearchResultListViewDelegate: - void OnResultInstalled(SearchResult* result) override; - AppListViewDelegate* delegate_; // Owned by parent view (AppListView). AppListModel* model_; // Unowned; ownership is handled by |delegate_|.
diff --git a/ui/app_list/views/contents_view.cc b/ui/app_list/views/contents_view.cc index a035cbd..3374acd 100644 --- a/ui/app_list/views/contents_view.cc +++ b/ui/app_list/views/contents_view.cc
@@ -51,14 +51,8 @@ ContentsView::ContentsView(AppListMainView* app_list_main_view, AppListView* app_list_view) - : model_(nullptr), - apps_container_view_(nullptr), - search_results_page_view_(nullptr), - start_page_view_(nullptr), - custom_page_view_(nullptr), - app_list_main_view_(app_list_main_view), + : app_list_main_view_(app_list_main_view), app_list_view_(app_list_view), - page_before_search_(0), is_fullscreen_app_list_enabled_(features::IsFullscreenAppListEnabled()) { pagination_model_.SetTransitionDurations(kPageTransitionDurationInMs, kOverscrollPageTransitionDurationMs); @@ -110,12 +104,16 @@ results, new SearchResultAnswerCardView(view_delegate)); } + search_result_tile_item_list_view_ = new SearchResultTileItemListView( + GetSearchBoxView()->search_box(), view_delegate); search_results_page_view_->AddSearchResultContainerView( - results, new SearchResultListView(app_list_main_view_, view_delegate)); + results, search_result_tile_item_list_view_); + search_result_list_view_ = + new SearchResultListView(app_list_main_view_, view_delegate); search_results_page_view_->AddSearchResultContainerView( - results, new SearchResultTileItemListView( - GetSearchBoxView()->search_box(), view_delegate)); + results, search_result_list_view_); + AddLauncherPage(search_results_page_view_, AppListModel::STATE_SEARCH_RESULTS);
diff --git a/ui/app_list/views/contents_view.h b/ui/app_list/views/contents_view.h index 11dc999a5..f680813e0 100644 --- a/ui/app_list/views/contents_view.h +++ b/ui/app_list/views/contents_view.h
@@ -24,17 +24,19 @@ namespace app_list { -class AppsGridView; class AppListPage; class AppListView; class ApplicationDragAndDropHost; class AppListFolderItem; class AppListMainView; class AppsContainerView; +class AppsGridView; class CustomLauncherPageView; class PaginationModel; class SearchBoxView; +class SearchResultListView; class SearchResultPageView; +class SearchResultTileItemListView; class StartPageView; // A view to manage launcher pages within the Launcher (eg. start page, apps @@ -96,9 +98,16 @@ } StartPageView* start_page_view() const { return start_page_view_; } CustomLauncherPageView* custom_page_view() const { return custom_page_view_; } - SearchResultPageView* search_results_page_view() { + SearchResultPageView* search_results_page_view() const { return search_results_page_view_; } + SearchResultTileItemListView* search_result_tile_item_list_view_for_test() + const { + return search_result_tile_item_list_view_; + } + SearchResultListView* search_result_list_view_for_test() const { + return search_result_list_view_; + } AppListPage* GetPageView(int index) const; SearchBoxView* GetSearchBoxView() const; @@ -192,13 +201,15 @@ PaginationModel* GetAppsPaginationModel(); // Unowned pointer to application list model. - AppListModel* model_; + AppListModel* model_ = nullptr; // Sub-views of the ContentsView. All owned by the views hierarchy. - AppsContainerView* apps_container_view_; - SearchResultPageView* search_results_page_view_; - StartPageView* start_page_view_; - CustomLauncherPageView* custom_page_view_; + AppsContainerView* apps_container_view_ = nullptr; + SearchResultPageView* search_results_page_view_ = nullptr; + SearchResultTileItemListView* search_result_tile_item_list_view_ = nullptr; + SearchResultListView* search_result_list_view_ = nullptr; + StartPageView* start_page_view_ = nullptr; + CustomLauncherPageView* custom_page_view_ = nullptr; // The child page views. Owned by the views hierarchy. std::vector<AppListPage*> app_list_pages_; @@ -216,7 +227,7 @@ std::map<int, AppListModel::State> view_to_state_; // The page that was showing before ShowSearchResults(true) was invoked. - int page_before_search_; + int page_before_search_ = 0; // Manages the pagination for the launcher pages. PaginationModel pagination_model_;
diff --git a/ui/app_list/views/search_result_answer_card_view_unittest.cc b/ui/app_list/views/search_result_answer_card_view_unittest.cc index 3e4d803..b80fa6c6 100644 --- a/ui/app_list/views/search_result_answer_card_view_unittest.cc +++ b/ui/app_list/views/search_result_answer_card_view_unittest.cc
@@ -4,6 +4,8 @@ #include "ui/app_list/views/search_result_answer_card_view.h" +#include <memory> + #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/strings/utf_string_conversions.h" @@ -11,7 +13,6 @@ #include "ui/app_list/app_list_constants.h" #include "ui/app_list/test/app_list_test_view_delegate.h" #include "ui/app_list/test/test_search_result.h" -#include "ui/app_list/views/search_result_list_view_delegate.h" #include "ui/app_list/views/search_result_view.h" #include "ui/views/background.h" #include "ui/views/test/views_test_base.h"
diff --git a/ui/app_list/views/search_result_list_view.cc b/ui/app_list/views/search_result_list_view.cc index 6d070a1..6cfaa9c 100644 --- a/ui/app_list/views/search_result_list_view.cc +++ b/ui/app_list/views/search_result_list_view.cc
@@ -12,10 +12,9 @@ #include "base/time/time.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/app_list/app_list_features.h" -#include "ui/app_list/app_list_switches.h" #include "ui/app_list/app_list_view_delegate.h" #include "ui/app_list/search_result.h" -#include "ui/app_list/views/search_result_list_view_delegate.h" +#include "ui/app_list/views/app_list_main_view.h" #include "ui/app_list/views/search_result_view.h" #include "ui/events/event.h" #include "ui/gfx/animation/linear_animation.h" @@ -36,10 +35,9 @@ namespace app_list { -SearchResultListView::SearchResultListView( - SearchResultListViewDelegate* delegate, - AppListViewDelegate* view_delegate) - : delegate_(delegate), +SearchResultListView::SearchResultListView(AppListMainView* main_view, + AppListViewDelegate* view_delegate) + : main_view_(main_view), view_delegate_(view_delegate), results_container_(new views::View), auto_launch_indicator_(new views::View), @@ -283,8 +281,8 @@ } void SearchResultListView::OnSearchResultInstalled(SearchResultView* view) { - if (delegate_ && view->result()) - delegate_->OnResultInstalled(view->result()); + if (main_view_ && view->result()) + main_view_->OnResultInstalled(view->result()); } } // namespace app_list
diff --git a/ui/app_list/views/search_result_list_view.h b/ui/app_list/views/search_result_list_view.h index 13e9d7b..fc56b8cd9 100644 --- a/ui/app_list/views/search_result_list_view.h +++ b/ui/app_list/views/search_result_list_view.h
@@ -22,8 +22,8 @@ class SearchResultListViewTest; } +class AppListMainView; class AppListViewDelegate; -class SearchResultListViewDelegate; class SearchResultView; // SearchResultListView displays SearchResultList with a list of @@ -31,7 +31,7 @@ class APP_LIST_EXPORT SearchResultListView : public gfx::AnimationDelegate, public SearchResultContainerView { public: - SearchResultListView(SearchResultListViewDelegate* delegate, + SearchResultListView(AppListMainView* main_view, AppListViewDelegate* view_delegate); ~SearchResultListView() override; @@ -87,7 +87,7 @@ void AnimationEnded(const gfx::Animation* animation) override; void AnimationProgressed(const gfx::Animation* animation) override; - SearchResultListViewDelegate* delegate_; // Not owned. + AppListMainView* main_view_; // Owned by views hierarchy. AppListViewDelegate* view_delegate_; // Not owned. views::View* results_container_;
diff --git a/ui/app_list/views/search_result_list_view_delegate.h b/ui/app_list/views/search_result_list_view_delegate.h deleted file mode 100644 index cd5f51b..0000000 --- a/ui/app_list/views/search_result_list_view_delegate.h +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2013 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_APP_LIST_VIEWS_SEARCH_RESULT_LIST_VIEW_DELEGATE_H_ -#define UI_APP_LIST_VIEWS_SEARCH_RESULT_LIST_VIEW_DELEGATE_H_ - -#include "ui/app_list/app_list_export.h" - -namespace app_list { - -class SearchResult; - -class APP_LIST_EXPORT SearchResultListViewDelegate { - public: - // Called when the app represented by |result| is installed. - virtual void OnResultInstalled(SearchResult* result) = 0; - - protected: - virtual ~SearchResultListViewDelegate() {} -}; - -} // namespace app_list - -#endif // UI_APP_LIST_VIEWS_SEARCH_RESULT_LIST_VIEW_DELEGATE_H_
diff --git a/ui/app_list/views/search_result_list_view_unittest.cc b/ui/app_list/views/search_result_list_view_unittest.cc index d7578d7..68f8ab2 100644 --- a/ui/app_list/views/search_result_list_view_unittest.cc +++ b/ui/app_list/views/search_result_list_view_unittest.cc
@@ -7,16 +7,17 @@ #include <stddef.h> #include <map> +#include <memory> #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/scoped_feature_list.h" #include "ui/app_list/app_list_features.h" #include "ui/app_list/app_list_model.h" #include "ui/app_list/test/app_list_test_view_delegate.h" #include "ui/app_list/test/test_search_result.h" -#include "ui/app_list/views/search_result_list_view_delegate.h" #include "ui/app_list/views/search_result_view.h" #include "ui/views/controls/progress_bar.h" #include "ui/views/test/views_test_base.h" @@ -29,22 +30,27 @@ } // namespace class SearchResultListViewTest : public views::ViewsTestBase, - public SearchResultListViewDelegate { + public testing::WithParamInterface<bool> { public: - SearchResultListViewTest() {} - ~SearchResultListViewTest() override {} + SearchResultListViewTest() = default; + ~SearchResultListViewTest() override = default; // Overridden from testing::Test: void SetUp() override { views::ViewsTestBase::SetUp(); - view_.reset(new SearchResultListView(this, &view_delegate_)); + if (!GetParam()) { + scoped_feature_list_.InitAndDisableFeature( + features::kEnableFullscreenAppList); + } + + view_.reset(new SearchResultListView(nullptr, &view_delegate_)); view_->SetResults(view_delegate_.GetModel()->results()); } protected: - SearchResultListView* view() { return view_.get(); } + SearchResultListView* view() const { return view_.get(); } - SearchResultView* GetResultViewAt(int index) { + SearchResultView* GetResultViewAt(int index) const { return view_->GetResultViewAt(index); } @@ -85,9 +91,9 @@ return result; } - int GetResultCount() { return view_->num_results(); } + int GetResultCount() const { return view_->num_results(); } - int GetSelectedIndex() { return view_->selected_index(); } + int GetSelectedIndex() const { return view_->selected_index(); } void ResetSelectedIndex() { view_->SetSelectedIndex(0); } @@ -102,7 +108,7 @@ return view_->OnKeyPressed(event); } - bool IsAutoLaunching() { return !!view_->auto_launch_animation_; } + bool IsAutoLaunching() const { return !!view_->auto_launch_animation_; } void ForceAutoLaunch() { view_->ForceAutoLaunchForTest(); } @@ -116,20 +122,23 @@ } } - views::ProgressBar* GetProgressBarAt(size_t index) { + views::ProgressBar* GetProgressBarAt(size_t index) const { return GetResultViewAt(index)->progress_bar_; } private: - void OnResultInstalled(SearchResult* result) override {} - AppListTestViewDelegate view_delegate_; std::unique_ptr<SearchResultListView> view_; + base::test::ScopedFeatureList scoped_feature_list_; DISALLOW_COPY_AND_ASSIGN(SearchResultListViewTest); }; -TEST_F(SearchResultListViewTest, Basic) { +// Instantiate the Boolean which is used to toggle the Fullscreen app list in +// the parameterized tests. +INSTANTIATE_TEST_CASE_P(, SearchResultListViewTest, testing::Bool()); + +TEST_P(SearchResultListViewTest, Basic) { SetUpSearchResults(); const int results = GetResultCount(); @@ -167,7 +176,7 @@ EXPECT_EQ(results - 1, GetSelectedIndex()); } -TEST_F(SearchResultListViewTest, AutoLaunch) { +TEST_P(SearchResultListViewTest, AutoLaunch) { SetLongAutoLaunchTimeout(); SetUpSearchResults(); @@ -182,7 +191,7 @@ EXPECT_EQ(base::TimeDelta(), GetAutoLaunchTimeout()); } -TEST_F(SearchResultListViewTest, CancelAutoLaunch) { +TEST_P(SearchResultListViewTest, CancelAutoLaunch) { SetLongAutoLaunchTimeout(); SetUpSearchResults(); @@ -203,7 +212,7 @@ EXPECT_TRUE(IsAutoLaunching()); } -TEST_F(SearchResultListViewTest, SpokenFeedback) { +TEST_P(SearchResultListViewTest, SpokenFeedback) { SetUpSearchResults(); // Result 0 has a detail text. Expect that the detail is appended to the @@ -216,21 +225,20 @@ GetResultViewAt(2)->ComputeAccessibleName()); } -TEST_F(SearchResultListViewTest, ModelObservers) { - // TODO(newcomer): this test needs to be reevaluated for the fullscreen app - // list (http://crbug.com/759779). - if (features::IsFullscreenAppListEnabled()) - return; - +TEST_P(SearchResultListViewTest, ModelObservers) { SetUpSearchResults(); ExpectConsistent(); + // Remove from end. + DeleteResultAt(kDefaultSearchItems - 1); + ExpectConsistent(); + // Insert at start. AddTestResultAtIndex(0); ExpectConsistent(); // Remove from end. - DeleteResultAt(kDefaultSearchItems); + DeleteResultAt(kDefaultSearchItems - 1); ExpectConsistent(); // Insert at end. @@ -244,7 +252,7 @@ // Regression test for http://crbug.com/402859 to ensure ProgressBar is // initialized properly in SearchResultListView::SetResult(). -TEST_F(SearchResultListViewTest, ProgressBar) { +TEST_P(SearchResultListViewTest, ProgressBar) { SetUpSearchResults(); GetResults()->GetItemAt(0)->SetIsInstalling(true);
diff --git a/ui/app_list/views/search_result_page_view_unittest.cc b/ui/app_list/views/search_result_page_view_unittest.cc index cfca4e3..98261e9 100644 --- a/ui/app_list/views/search_result_page_view_unittest.cc +++ b/ui/app_list/views/search_result_page_view_unittest.cc
@@ -4,30 +4,31 @@ #include "ui/app_list/views/search_result_page_view.h" +#include <memory> #include <utility> #include <vector> -#include "base/command_line.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/test/scoped_feature_list.h" #include "ui/app_list/app_list_features.h" #include "ui/app_list/app_list_model.h" -#include "ui/app_list/app_list_switches.h" #include "ui/app_list/test/app_list_test_view_delegate.h" #include "ui/app_list/test/test_search_result.h" +#include "ui/app_list/views/app_list_main_view.h" +#include "ui/app_list/views/app_list_view.h" +#include "ui/app_list/views/contents_view.h" #include "ui/app_list/views/search_result_list_view.h" -#include "ui/app_list/views/search_result_list_view_delegate.h" #include "ui/app_list/views/search_result_tile_item_list_view.h" #include "ui/app_list/views/search_result_view.h" -#include "ui/views/controls/textfield/textfield.h" +#include "ui/aura/window.h" #include "ui/views/test/views_test_base.h" namespace app_list { namespace test { class SearchResultPageViewTest : public views::ViewsTestBase, - public SearchResultListViewDelegate { + public testing::WithParamInterface<bool> { public: SearchResultPageViewTest() = default; ~SearchResultPageViewTest() override = default; @@ -35,27 +36,50 @@ // Overridden from testing::Test: void SetUp() override { views::ViewsTestBase::SetUp(); - view_.reset(new SearchResultPageView()); - list_view_ = new SearchResultListView(this, &view_delegate_); - view_->AddSearchResultContainerView(GetResults(), list_view_); - textfield_.reset(new views::Textfield()); + + if (testing::UnitTest::GetInstance()->current_test_info()->value_param()) + test_with_fullscreen_ = GetParam(); + if (!test_with_fullscreen_) { + scoped_feature_list_.InitAndDisableFeature( + features::kEnableFullscreenAppList); + } + + delegate_.reset(new AppListTestViewDelegate); + app_list_view_ = new AppListView(delegate_.get()); + gfx::NativeView parent = GetContext(); + app_list_view_->Initialize(parent, 0, false, false); + // TODO(warx): remove MaybeSetAnchorPoint setup when bubble launcher is + // removed from code base. + app_list_view_->MaybeSetAnchorPoint( + parent->GetBoundsInRootWindow().CenterPoint()); + app_list_view_->GetWidget()->Show(); + + ContentsView* contents_view = + app_list_view_->app_list_main_view()->contents_view(); + view_ = contents_view->search_results_page_view(); tile_list_view_ = - new SearchResultTileItemListView(textfield_.get(), &view_delegate_); - view_->AddSearchResultContainerView(GetResults(), tile_list_view_); + contents_view->search_result_tile_item_list_view_for_test(); + list_view_ = contents_view->search_result_list_view_for_test(); + } + void TearDown() override { + app_list_view_->GetWidget()->Close(); + views::ViewsTestBase::TearDown(); } protected: - SearchResultPageView* view() { return view_.get(); } + SearchResultPageView* view() const { return view_; } - SearchResultListView* list_view() { return list_view_; } - SearchResultTileItemListView* tile_list_view() { return tile_list_view_; } + SearchResultTileItemListView* tile_list_view() const { + return tile_list_view_; + } + SearchResultListView* list_view() const { return list_view_; } - AppListModel::SearchResults* GetResults() { - return view_delegate_.GetModel()->results(); + AppListModel::SearchResults* GetResults() const { + return delegate_->GetModel()->results(); } void SetUpSearchResults( - const std::vector<std::pair<SearchResult::DisplayType, int>> + const std::vector<std::pair<SearchResult::DisplayType, int>>& result_types) { AppListModel::SearchResults* results = GetResults(); results->DeleteAll(); @@ -77,46 +101,6 @@ RunPendingMessages(); } - int GetSelectedIndex() { return view_->selected_index(); } - - bool KeyPress(ui::KeyboardCode key_code) { return KeyPress(key_code, false); } - - bool KeyPress(ui::KeyboardCode key_code, bool shift_down) { - int flags = ui::EF_NONE; - if (shift_down) - flags |= ui::EF_SHIFT_DOWN; - ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, flags); - return view_->OnKeyPressed(event); - } - - private: - void OnResultInstalled(SearchResult* result) override {} - - SearchResultListView* list_view_; - SearchResultTileItemListView* tile_list_view_; - - AppListTestViewDelegate view_delegate_; - std::unique_ptr<SearchResultPageView> view_; - std::unique_ptr<views::Textfield> textfield_; - - DISALLOW_COPY_AND_ASSIGN(SearchResultPageViewTest); -}; - -class SearchResultPageViewFullscreenTest - : public SearchResultPageViewTest, - public testing::WithParamInterface<bool> { - public: - SearchResultPageViewFullscreenTest() = default; - ~SearchResultPageViewFullscreenTest() override = default; - - // Overridden from testing::Test: - void SetUp() override { - scoped_feature_list_.InitAndEnableFeature( - features::kEnableFullscreenAppList); - SearchResultPageViewTest::SetUp(); - } - - protected: // Add search results for test on focus movement. void SetUpFocusTestEnv() { std::vector<std::pair<SearchResult::DisplayType, int>> result_types; @@ -133,30 +117,44 @@ SetUpSearchResults(result_types); } + int GetSelectedIndex() const { return view_->selected_index(); } + + bool KeyPress(ui::KeyboardCode key_code) { return KeyPress(key_code, false); } + + bool KeyPress(ui::KeyboardCode key_code, bool shift_down) { + int flags = ui::EF_NONE; + if (shift_down) + flags |= ui::EF_SHIFT_DOWN; + ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, flags); + return view_->OnKeyPressed(event); + } + + bool test_with_fullscreen() const { return test_with_fullscreen_; } + private: + AppListView* app_list_view_ = nullptr; // Owned by native widget. + SearchResultPageView* view_ = nullptr; // Owned by views hierarchy. + SearchResultTileItemListView* tile_list_view_ = + nullptr; // Owned by views hierarchy. + SearchResultListView* list_view_ = nullptr; // Owned by views hierarchy. + std::unique_ptr<AppListTestViewDelegate> delegate_; + bool test_with_fullscreen_ = true; base::test::ScopedFeatureList scoped_feature_list_; - DISALLOW_COPY_AND_ASSIGN(SearchResultPageViewFullscreenTest); + DISALLOW_COPY_AND_ASSIGN(SearchResultPageViewTest); }; -TEST_F(SearchResultPageViewTest, DirectionalMovement) { - // TODO(newcomer): this test needs to be reevaluated for the fullscreen app - // list (http://crbug.com/759779). - if (features::IsFullscreenAppListEnabled()) - return; - std::vector<std::pair<SearchResult::DisplayType, int>> result_types; - // 3 tile results, followed by 2 list results. - const int kTileResults = 3; - const int kListResults = 2; - const int kNoneResults = 3; - result_types.push_back( - std::make_pair(SearchResult::DISPLAY_TILE, kTileResults)); - result_types.push_back( - std::make_pair(SearchResult::DISPLAY_LIST, kListResults)); - result_types.push_back( - std::make_pair(SearchResult::DISPLAY_NONE, kNoneResults)); +// Instantiate the Boolean which is used to toggle the Fullscreen app list in +// the parameterized tests. +INSTANTIATE_TEST_CASE_P(, SearchResultPageViewTest, testing::Bool()); - SetUpSearchResults(result_types); +// TODO(warx): This test applies to bubble launcher only. Remove this test once +// bubble launcher is removed from code base. +TEST_P(SearchResultPageViewTest, DirectionalMovement) { + if (test_with_fullscreen()) + return; + + SetUpFocusTestEnv(); EXPECT_EQ(0, GetSelectedIndex()); EXPECT_EQ(0, tile_list_view()->selected_index()); @@ -197,20 +195,8 @@ EXPECT_EQ(0, tile_list_view()->selected_index()); } -TEST_F(SearchResultPageViewTest, TabMovement) { - std::vector<std::pair<SearchResult::DisplayType, int>> result_types; - // 3 tile results, followed by 2 list results. - const int kTileResults = 3; - const int kListResults = 2; - const int kNoneResults = 3; - result_types.push_back( - std::make_pair(SearchResult::DISPLAY_TILE, kTileResults)); - result_types.push_back( - std::make_pair(SearchResult::DISPLAY_LIST, kListResults)); - result_types.push_back( - std::make_pair(SearchResult::DISPLAY_NONE, kNoneResults)); - - SetUpSearchResults(result_types); +TEST_P(SearchResultPageViewTest, TabMovement) { + SetUpFocusTestEnv(); EXPECT_EQ(0, GetSelectedIndex()); EXPECT_EQ(0, tile_list_view()->selected_index()); @@ -229,11 +215,6 @@ EXPECT_EQ(-1, tile_list_view()->selected_index()); EXPECT_EQ(0, list_view()->selected_index()); - // TODO(newcomer): this test needs to be reevaluated for the fullscreen app - // list (http://crbug.com/759779). - if (app_list::features::IsFullscreenAppListEnabled()) - return; - // Navigate to the second result in the list view. EXPECT_TRUE(KeyPress(ui::VKEY_TAB)); EXPECT_EQ(1, GetSelectedIndex()); @@ -254,16 +235,25 @@ EXPECT_EQ(-1, list_view()->selected_index()); // Navigate off top of list. - EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_EQ(1, tile_list_view()->selected_index()); - EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_EQ(0, tile_list_view()->selected_index()); - EXPECT_FALSE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_EQ(0, GetSelectedIndex()); - EXPECT_EQ(0, tile_list_view()->selected_index()); + if (test_with_fullscreen()) { + EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); + EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); + EXPECT_FALSE(KeyPress(ui::VKEY_TAB, true)); + EXPECT_EQ(-1, GetSelectedIndex()); + EXPECT_EQ(-1, tile_list_view()->selected_index()); + EXPECT_EQ(-1, list_view()->selected_index()); + } else { + EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); + EXPECT_EQ(1, tile_list_view()->selected_index()); + EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); + EXPECT_EQ(0, tile_list_view()->selected_index()); + EXPECT_FALSE(KeyPress(ui::VKEY_TAB, true)); + EXPECT_EQ(0, GetSelectedIndex()); + EXPECT_EQ(0, tile_list_view()->selected_index()); + } } -TEST_F(SearchResultPageViewTest, ResultsSorted) { +TEST_P(SearchResultPageViewTest, ResultsSorted) { AppListModel::SearchResults* results = GetResults(); // Add 3 results and expect the tile list view to be the first result @@ -293,19 +283,18 @@ // Change the relevance of the tile result and expect the list results to be // displayed first. + // TODO(warx): fullscreen launcher should always have tile list view to be + // displayed first over list view. tile_result->set_relevance(0.4); results->NotifyItemsChanged(0, 1); RunPendingMessages(); - // TODO(newcomer): this test needs to be reevaluated for the fullscreen app - // list (http://crbug.com/759779). - if (app_list::features::IsFullscreenAppListEnabled()) - return; + EXPECT_EQ(list_view(), view()->result_container_views()[0]); EXPECT_EQ(tile_list_view(), view()->result_container_views()[1]); } -TEST_F(SearchResultPageViewTest, UpdateWithSelection) { +TEST_P(SearchResultPageViewTest, UpdateWithSelection) { { std::vector<std::pair<SearchResult::DisplayType, int>> result_types; result_types.push_back(std::make_pair(SearchResult::DISPLAY_TILE, 3)); @@ -383,6 +372,8 @@ EXPECT_EQ(0, list_view()->selected_index()); } +using SearchResultPageViewFullscreenTest = SearchResultPageViewTest; + TEST_F(SearchResultPageViewFullscreenTest, LeftRightMovement) { SetUpFocusTestEnv(); EXPECT_EQ(0, GetSelectedIndex()); @@ -468,52 +459,5 @@ EXPECT_EQ(-1, list_view()->selected_index()); } -TEST_F(SearchResultPageViewFullscreenTest, TabMovement) { - SetUpFocusTestEnv(); - EXPECT_EQ(0, GetSelectedIndex()); - EXPECT_EQ(0, tile_list_view()->selected_index()); - EXPECT_EQ(-1, list_view()->selected_index()); - - // Navigate to the second tile in the tile group. - EXPECT_TRUE(KeyPress(ui::VKEY_TAB)); - EXPECT_EQ(0, GetSelectedIndex()); - EXPECT_EQ(1, tile_list_view()->selected_index()); - EXPECT_EQ(-1, list_view()->selected_index()); - - // Navigate to the list group. - EXPECT_TRUE(KeyPress(ui::VKEY_TAB)); - EXPECT_TRUE(KeyPress(ui::VKEY_TAB)); - EXPECT_EQ(1, GetSelectedIndex()); - EXPECT_EQ(-1, tile_list_view()->selected_index()); - EXPECT_EQ(0, list_view()->selected_index()); - - // Navigate to the second result in the list view. - EXPECT_TRUE(KeyPress(ui::VKEY_TAB)); - EXPECT_EQ(1, GetSelectedIndex()); - EXPECT_EQ(1, list_view()->selected_index()); - - // Attempt to navigate off bottom of list items. - EXPECT_FALSE(KeyPress(ui::VKEY_TAB)); - EXPECT_EQ(1, GetSelectedIndex()); - EXPECT_EQ(1, list_view()->selected_index()); - - // Navigate back to the tile group (should select the last tile result). - EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_EQ(1, GetSelectedIndex()); - EXPECT_EQ(0, list_view()->selected_index()); - EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_EQ(0, GetSelectedIndex()); - EXPECT_EQ(2, tile_list_view()->selected_index()); - EXPECT_EQ(-1, list_view()->selected_index()); - - // Navigate off top of list. - EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_TRUE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_FALSE(KeyPress(ui::VKEY_TAB, true)); - EXPECT_EQ(-1, GetSelectedIndex()); - EXPECT_EQ(-1, tile_list_view()->selected_index()); - EXPECT_EQ(-1, list_view()->selected_index()); -} - } // namespace test } // namespace app_list
diff --git a/ui/app_list/views/search_result_tile_item_list_view_unittest.cc b/ui/app_list/views/search_result_tile_item_list_view_unittest.cc index a094f12..98de018 100644 --- a/ui/app_list/views/search_result_tile_item_list_view_unittest.cc +++ b/ui/app_list/views/search_result_tile_item_list_view_unittest.cc
@@ -18,7 +18,6 @@ #include "ui/app_list/app_list_model.h" #include "ui/app_list/test/app_list_test_view_delegate.h" #include "ui/app_list/test/test_search_result.h" -#include "ui/app_list/views/search_result_list_view_delegate.h" #include "ui/app_list/views/search_result_view.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/test/views_test_base.h"
diff --git a/ui/app_list/views/suggestions_container_view.cc b/ui/app_list/views/suggestions_container_view.cc index ee04a7a..c86ac21 100644 --- a/ui/app_list/views/suggestions_container_view.cc +++ b/ui/app_list/views/suggestions_container_view.cc
@@ -133,7 +133,8 @@ void SuggestionsContainerView::CreateAppsGrid(int apps_num) { DCHECK(search_result_tile_views_.empty()); - views::GridLayout* tiles_layout_manager = new views::GridLayout(this); + views::GridLayout* tiles_layout_manager = + views::GridLayout::CreateAndInstall(this); SetLayoutManager(tiles_layout_manager); views::ColumnSet* column_set = tiles_layout_manager->AddColumnSet(0);
diff --git a/ui/arc/notification/arc_notification_content_view.cc b/ui/arc/notification/arc_notification_content_view.cc index 5c13ec9..656775a 100644 --- a/ui/arc/notification/arc_notification_content_view.cc +++ b/ui/arc/notification/arc_notification_content_view.cc
@@ -235,6 +235,10 @@ return owner_->control_buttons_view_; } + bool IsExpanded() const override { return owner_->IsExpanded(); } + + void SetExpanded(bool expanded) override { owner_->SetExpanded(expanded); } + private: ArcNotificationContentView* const owner_; @@ -251,6 +255,10 @@ notification_key_(item->GetNotificationKey()), event_forwarder_(new EventForwarder(this)), mouse_enter_exit_handler_(new MouseEnterExitHandler(this)) { + // kNotificationWidth must be 360, since this value is separately defiend in + // ArcNotificationWrapperView class in Android side. + DCHECK_EQ(360, message_center::kNotificationWidth); + SetFocusBehavior(FocusBehavior::ALWAYS); set_notify_enter_exit_on_child(true); @@ -460,6 +468,21 @@ accessible_name_ = item_->GetAccessibleName(); } +bool ArcNotificationContentView::IsExpanded() const { + return item_->GetExpandState() == mojom::ArcNotificationExpandState::EXPANDED; +} + +void ArcNotificationContentView::SetExpanded(bool expanded) { + auto expand_state = item_->GetExpandState(); + if (expanded) { + if (expand_state == mojom::ArcNotificationExpandState::COLLAPSED) + item_->ToggleExpansion(); + } else { + if (expand_state == mojom::ArcNotificationExpandState::EXPANDED) + item_->ToggleExpansion(); + } +} + void ArcNotificationContentView::ViewHierarchyChanged( const views::View::ViewHierarchyChangedDetails& details) { views::Widget* widget = GetWidget();
diff --git a/ui/arc/notification/arc_notification_content_view.h b/ui/arc/notification/arc_notification_content_view.h index 82547bd..3e2706d9 100644 --- a/ui/arc/notification/arc_notification_content_view.h +++ b/ui/arc/notification/arc_notification_content_view.h
@@ -70,6 +70,8 @@ void AttachSurface(); void Activate(); void UpdateAccessibleName(); + void SetExpanded(bool expanded); + bool IsExpanded() const; // views::NativeViewHost void ViewHierarchyChanged(
diff --git a/ui/arc/notification/arc_notification_content_view_delegate.h b/ui/arc/notification/arc_notification_content_view_delegate.h index dec7ee84..a27cad2 100644 --- a/ui/arc/notification/arc_notification_content_view_delegate.h +++ b/ui/arc/notification/arc_notification_content_view_delegate.h
@@ -22,6 +22,8 @@ virtual void OnSlideChanged() = 0; virtual message_center::NotificationControlButtonsView* GetControlButtonsView() const = 0; + virtual bool IsExpanded() const = 0; + virtual void SetExpanded(bool expanded) = 0; }; } // namespace arc
diff --git a/ui/arc/notification/arc_notification_view.cc b/ui/arc/notification/arc_notification_view.cc index 20b629f..85f8e818 100644 --- a/ui/arc/notification/arc_notification_view.cc +++ b/ui/arc/notification/arc_notification_view.cc
@@ -106,6 +106,17 @@ return contents_view_delegate_->GetControlButtonsView(); } +bool ArcNotificationView::IsExpanded() const { + if (contents_view_delegate_) + return contents_view_delegate_->IsExpanded(); + return false; +} + +void ArcNotificationView::SetExpanded(bool expanded) { + if (contents_view_delegate_) + contents_view_delegate_->SetExpanded(expanded); +} + void ArcNotificationView::OnSlideChanged() { if (contents_view_delegate_) contents_view_delegate_->OnSlideChanged(); @@ -113,18 +124,18 @@ gfx::Size ArcNotificationView::CalculatePreferredSize() const { const gfx::Insets insets = GetInsets(); - const int contents_width = - message_center::kNotificationWidth - insets.width(); + const int contents_width = message_center::kNotificationWidth; const int contents_height = contents_view_->GetHeightForWidth(contents_width); - return gfx::Size(message_center::kNotificationWidth, + return gfx::Size(contents_width + insets.width(), contents_height + insets.height()); } void ArcNotificationView::Layout() { - message_center::MessageView::Layout(); - + // Setting the bounds before calling the parent to prevent double Layout. contents_view_->SetBoundsRect(GetContentsBounds()); + message_center::MessageView::Layout(); + // If the content view claims focus, defer focus handling to the content view. if (contents_view_->IsFocusable()) SetFocusBehavior(FocusBehavior::NEVER);
diff --git a/ui/arc/notification/arc_notification_view.h b/ui/arc/notification/arc_notification_view.h index 73ab524..7705c41 100644 --- a/ui/arc/notification/arc_notification_view.h +++ b/ui/arc/notification/arc_notification_view.h
@@ -45,6 +45,8 @@ void GetAccessibleNodeData(ui::AXNodeData* node_data) override; message_center::NotificationControlButtonsView* GetControlButtonsView() const override; + bool IsExpanded() const override; + void SetExpanded(bool expanded) override; // views::SlideOutController::Delegate: void OnSlideChanged() override;
diff --git a/ui/arc/notification/arc_notification_view_unittest.cc b/ui/arc/notification/arc_notification_view_unittest.cc index 2130c3d3..dd8646b 100644 --- a/ui/arc/notification/arc_notification_view_unittest.cc +++ b/ui/arc/notification/arc_notification_view_unittest.cc
@@ -82,6 +82,8 @@ const override { return nullptr; } + bool IsExpanded() const override { return false; } + void SetExpanded(bool expanded) override {} }; class TestNotificationDelegate : public message_center::NotificationDelegate {
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn index 4bd8c3a..1457fc5 100644 --- a/ui/aura/BUILD.gn +++ b/ui/aura/BUILD.gn
@@ -31,6 +31,7 @@ "env_input_state_controller.h", "env_observer.h", "event_injector.h", + "hit_test_data_provider_aura.h", "input_state_lookup.h", "input_state_lookup_win.h", "layout_manager.h", @@ -44,7 +45,6 @@ "mus/focus_synchronizer.h", "mus/focus_synchronizer_delegate.h", "mus/focus_synchronizer_observer.h", - "mus/hit_test_data_provider_aura.h", "mus/in_flight_change.h", "mus/input_method_mus.h", "mus/mus_context_factory.h", @@ -97,6 +97,7 @@ "env.cc", "env_input_state_controller.cc", "event_injector.cc", + "hit_test_data_provider_aura.cc", "input_state_lookup.cc", "input_state_lookup_win.cc", "layout_manager.cc", @@ -106,7 +107,6 @@ "mus/client_surface_embedder.cc", "mus/drag_drop_controller_mus.cc", "mus/focus_synchronizer.cc", - "mus/hit_test_data_provider_aura.cc", "mus/in_flight_change.cc", "mus/input_method_mus.cc", "mus/mus_context_factory.cc", @@ -336,8 +336,8 @@ test("aura_unittests") { sources = [ "gestures/gesture_recognizer_unittest.cc", + "hit_test_data_provider_aura_unittest.cc", "mus/drag_drop_controller_mus_unittest.cc", - "mus/hit_test_data_provider_aura_unittest.cc", "mus/input_method_mus_unittest.cc", "mus/os_exchange_data_provider_mus_unittest.cc", "mus/property_converter_unittest.cc",
diff --git a/ui/aura/DEPS b/ui/aura/DEPS index 10caa1b..5edbb33a 100644 --- a/ui/aura/DEPS +++ b/ui/aura/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+cc/base", "+cc/output", + "+components/viz/client", "+components/viz/common", "+components/viz/host", "+mojo/common",
diff --git a/ui/aura/mus/hit_test_data_provider_aura.cc b/ui/aura/hit_test_data_provider_aura.cc similarity index 98% rename from ui/aura/mus/hit_test_data_provider_aura.cc rename to ui/aura/hit_test_data_provider_aura.cc index db915077..309f5fe 100644 --- a/ui/aura/mus/hit_test_data_provider_aura.cc +++ b/ui/aura/hit_test_data_provider_aura.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 "ui/aura/mus/hit_test_data_provider_aura.h" +#include "ui/aura/hit_test_data_provider_aura.h" #include "base/containers/adapters.h" #include "services/ui/public/interfaces/window_tree_constants.mojom.h"
diff --git a/ui/aura/mus/hit_test_data_provider_aura.h b/ui/aura/hit_test_data_provider_aura.h similarity index 81% rename from ui/aura/mus/hit_test_data_provider_aura.h rename to ui/aura/hit_test_data_provider_aura.h index 04b7748..9993a31 100644 --- a/ui/aura/mus/hit_test_data_provider_aura.h +++ b/ui/aura/hit_test_data_provider_aura.h
@@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef UI_AURA_MUS_HIT_TEST_DATA_PROVIDER_AURA_H_ -#define UI_AURA_MUS_HIT_TEST_DATA_PROVIDER_AURA_H_ +#ifndef UI_AURA_HIT_TEST_DATA_PROVIDER_AURA_H_ +#define UI_AURA_HIT_TEST_DATA_PROVIDER_AURA_H_ #include "base/macros.h" #include "components/viz/client/hit_test_data_provider.h" +#include "ui/aura/aura_export.h" namespace aura { @@ -15,7 +16,7 @@ // A HitTestDataProvider that captures hit-test areas from a aura::Window tree // and packages it to be submitted to compositor frame sink. The |window| used // when creating the HitTestDataProviderAura should outlive the data provider. -class HitTestDataProviderAura : public viz::HitTestDataProvider { +class AURA_EXPORT HitTestDataProviderAura : public viz::HitTestDataProvider { public: explicit HitTestDataProviderAura(Window* window); ~HitTestDataProviderAura() override; @@ -38,4 +39,4 @@ } // namespace aura -#endif // UI_AURA_MUS_HIT_TEST_DATA_PROVIDER_AURA_H_ \ No newline at end of file +#endif // UI_AURA_HIT_TEST_DATA_PROVIDER_AURA_H_ \ No newline at end of file
diff --git a/ui/aura/mus/hit_test_data_provider_aura_unittest.cc b/ui/aura/hit_test_data_provider_aura_unittest.cc similarity index 94% rename from ui/aura/mus/hit_test_data_provider_aura_unittest.cc rename to ui/aura/hit_test_data_provider_aura_unittest.cc index 5f8611fe..09d20bf6 100644 --- a/ui/aura/mus/hit_test_data_provider_aura_unittest.cc +++ b/ui/aura/hit_test_data_provider_aura_unittest.cc
@@ -2,12 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ui/aura/mus/window_tree_client.h" +#include "ui/aura/hit_test_data_provider_aura.h" #include "components/viz/client/hit_test_data_provider.h" #include "ui/aura/client/aura_constants.h" -#include "ui/aura/mus/window_port_mus.h" -#include "ui/aura/test/aura_mus_test_base.h" +#include "ui/aura/test/aura_test_base.h" #include "ui/aura/window.h" #include "ui/aura/window_targeter.h" #include "ui/gfx/geometry/rect.h" @@ -74,8 +73,11 @@ } // namespace -// Creates a root window and child windows. Maintains a cc:LayerTreeFrameSink -// to help exercise its viz::HitTestDataProvider. +// Creates a root window, child windows and a viz::HitTestDataProvider. +// root +// +- window2 +// |_ window3 +// |_ window4 class HitTestDataProviderAuraTest : public test::AuraTestBaseMus { public: HitTestDataProviderAuraTest() {} @@ -106,16 +108,12 @@ root_->AddChild(window2_); root_->AddChild(window3_); - WindowPort* port = WindowPortMus::Get(root_.get()); - sink_ = port->CreateLayerTreeFrameSink(); + hit_test_data_provider_ = base::MakeUnique<HitTestDataProviderAura>(root()); } protected: const viz::HitTestDataProvider* hit_test_data_provider() const { - // TODO(varkha): Find a way to get the HitTestDataProvider without depending - // on WindowPortMus - WindowPortMus* port = WindowPortMus::Get(root_.get()); - return port->local_layer_tree_frame_sink_->hit_test_data_provider(); + return hit_test_data_provider_.get(); } Window* root() { return root_.get(); } @@ -124,11 +122,11 @@ Window* window4() { return window4_; } private: - std::unique_ptr<cc::LayerTreeFrameSink> sink_; std::unique_ptr<Window> root_; Window* window2_; Window* window3_; Window* window4_; + std::unique_ptr<viz::HitTestDataProvider> hit_test_data_provider_; DISALLOW_COPY_AND_ASSIGN(HitTestDataProviderAuraTest); };
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc index 3b937f13..9d8e418 100644 --- a/ui/aura/mus/window_port_mus.cc +++ b/ui/aura/mus/window_port_mus.cc
@@ -9,8 +9,8 @@ #include "ui/aura/client/aura_constants.h" #include "ui/aura/client/transient_window_client.h" #include "ui/aura/env.h" +#include "ui/aura/hit_test_data_provider_aura.h" #include "ui/aura/mus/client_surface_embedder.h" -#include "ui/aura/mus/hit_test_data_provider_aura.h" #include "ui/aura/mus/property_converter.h" #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/mus/window_tree_client_delegate.h"
diff --git a/ui/aura/mus/window_tree_client_unittest.cc b/ui/aura/mus/window_tree_client_unittest.cc index 60bd21c8..9fb47c7 100644 --- a/ui/aura/mus/window_tree_client_unittest.cc +++ b/ui/aura/mus/window_tree_client_unittest.cc
@@ -1085,12 +1085,11 @@ // child1 has a custom targeter set which would always return itself as the // target window therefore event should go to child1. const gfx::Point event_location(50, 60); - const gfx::Point root_location; uint32_t event_id = 1; window_delegate1->set_event_id(event_id); window_delegate2->set_event_id(event_id); std::unique_ptr<ui::Event> ui_event( - new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location, root_location, + new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location, gfx::Point(), ui::EventTimeForNow(), ui::EF_NONE, 0)); window_tree_client()->OnWindowInputEvent( event_id, server_id(child1.get()), window_tree_host->display_id(), @@ -1104,8 +1103,7 @@ window_delegate1->reset(); window_delegate2->reset(); - // Set capture to |child2|. Capture takes precedence, and because the event is - // converted local coordinates are converted from the root. + // The same event should go to child2 if child2 is the capture window. std::unique_ptr<client::DefaultCaptureClient> capture_client( base::MakeUnique<client::DefaultCaptureClient>()); client::SetCaptureClient(top_level, capture_client.get()); @@ -1122,9 +1120,7 @@ window_tree()->GetEventResult(event_id)); EXPECT_EQ(0, window_delegate1->move_count()); EXPECT_EQ(1, window_delegate2->move_count()); - gfx::Point root_point_in_child2; - Window::ConvertPointToTarget(top_level, child2.get(), &root_point_in_child2); - EXPECT_EQ(root_point_in_child2, window_delegate2->last_event_location()); + EXPECT_EQ(gfx::Point(30, 30), window_delegate2->last_event_location()); child2.reset(); child1.reset(); window_tree_host.reset();
diff --git a/ui/aura/window_event_dispatcher.cc b/ui/aura/window_event_dispatcher.cc index 0794030..9b3aa8fe 100644 --- a/ui/aura/window_event_dispatcher.cc +++ b/ui/aura/window_event_dispatcher.cc
@@ -443,36 +443,6 @@ //////////////////////////////////////////////////////////////////////////////// // WindowEventDispatcher, ui::EventProcessor implementation: - -ui::EventTarget* WindowEventDispatcher::GetInitialEventTarget( - ui::Event* event) { - if (Env::GetInstance()->mode() == Env::Mode::LOCAL || - !event->IsLocatedEvent() || !event->target()) { - return nullptr; - } - - ui::LocatedEvent* located_event = event->AsLocatedEvent(); - - Window* priority_target = static_cast<Window*>( - event_targeter_->GetPriorityTargetInRootWindow(window(), *located_event)); - if (!priority_target) - return nullptr; - - // The event has a target but we need to dispatch it using the normal path. - // Reset the target and location so the normal flow is used. - ui::Event::DispatcherApi(event).set_target(nullptr); - located_event->set_location_f(located_event->root_location_f()); - if (event_targeter_->ProcessEventIfTargetsDifferentRootWindow( - window(), static_cast<Window*>(priority_target), event)) { - // Make sure the event was marked handled so that EventProcessor doesn't - // attempt to process the event as well. - event->SetHandled(); - return nullptr; - } - located_event->ConvertLocationToTarget(window(), priority_target); - return priority_target; -} - ui::EventTarget* WindowEventDispatcher::GetRootForEvent(ui::Event* event) { if (Env::GetInstance()->mode() == Env::Mode::LOCAL) return window();
diff --git a/ui/aura/window_event_dispatcher.h b/ui/aura/window_event_dispatcher.h index e3ee61c..9bd63a7 100644 --- a/ui/aura/window_event_dispatcher.h +++ b/ui/aura/window_event_dispatcher.h
@@ -184,7 +184,6 @@ void ReleaseNativeCapture() override; // Overridden from ui::EventProcessor: - ui::EventTarget* GetInitialEventTarget(ui::Event* event) override; ui::EventTarget* GetRootForEvent(ui::Event* event) override; void OnEventProcessingStarted(ui::Event* event) override; void OnEventProcessingFinished(ui::Event* event) override;
diff --git a/ui/aura/window_event_dispatcher_unittest.cc b/ui/aura/window_event_dispatcher_unittest.cc index e8dbf59c..2f5e9f1 100644 --- a/ui/aura/window_event_dispatcher_unittest.cc +++ b/ui/aura/window_event_dispatcher_unittest.cc
@@ -32,7 +32,6 @@ #include "ui/aura/test/test_window_delegate.h" #include "ui/aura/test/test_windows.h" #include "ui/aura/window.h" -#include "ui/aura/window_targeter.h" #include "ui/aura/window_tracker.h" #include "ui/base/hit_test.h" #include "ui/display/screen.h" @@ -485,7 +484,7 @@ namespace { -// ui::EventHandler that tracks the types of events it's seen. +// FilterFilter that tracks the types of events it's seen. class EventFilterRecorder : public ui::EventHandler { public: typedef std::vector<ui::EventType> Events; @@ -2910,57 +2909,6 @@ namespace { -class ExplicitWindowTargeter : public WindowTargeter { - public: - explicit ExplicitWindowTargeter(Window* target) : target_(target) {} - ~ExplicitWindowTargeter() override = default; - - // WindowTargeter: - ui::EventTarget* FindTargetForEvent(ui::EventTarget* root, - ui::Event* event) override { - return target_; - } - ui::EventTarget* FindNextBestTarget(ui::EventTarget* previous_target, - ui::Event* event) override { - return nullptr; - } - - private: - Window* target_; - - DISALLOW_COPY_AND_ASSIGN(ExplicitWindowTargeter); -}; - -} // namespace - -TEST_F(WindowEventDispatcherMusTest, TargetCaptureWindow) { - NonClientDelegate w1_delegate; - NonClientDelegate w2_delegate; - std::unique_ptr<Window> w1( - CreateNormalWindow(-1, root_window(), &w1_delegate)); - std::unique_ptr<Window> w2( - CreateNormalWindow(-1, root_window(), &w2_delegate)); - NonClientDelegate w2_child_delegate; - std::unique_ptr<Window> w2_child( - CreateNormalWindow(-1, w2.get(), &w2_child_delegate)); - ExplicitWindowTargeter* w2_targeter = - new ExplicitWindowTargeter(w2_child.get()); - w2->SetEventTargeter(base::WrapUnique(w2_targeter)); - w2->SetCapture(); - ASSERT_TRUE(w2->HasCapture()); - const gfx::Point mouse_location(15, 25); - ui::MouseEvent mouse(ui::ET_MOUSE_PRESSED, mouse_location, mouse_location, - ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); - ui::Event::DispatcherApi(&mouse).set_target(w1.get()); - DispatchEventUsingWindowDispatcher(&mouse); - EXPECT_EQ(0, w1_delegate.mouse_event_count()); - EXPECT_EQ(1, w2_delegate.mouse_event_count()); - EXPECT_EQ(0, w2_child_delegate.mouse_event_count()); -} - -namespace { - class LocationRecordingEventHandler : public ui::EventHandler { public: LocationRecordingEventHandler() = default; @@ -2993,12 +2941,12 @@ std::unique_ptr<Window> window( test::CreateTestWindowWithBounds(gfx::Rect(0, 0, 10, 20), root_window())); std::unique_ptr<Window> child_window( - CreateNormalWindow(-1, window.get(), nullptr)); + test::CreateTestWindowWithBounds(gfx::Rect(5, 6, 10, 20), window.get())); test::EnvTestHelper().SetAlwaysUseLastMouseLocation(false); LocationRecordingEventHandler event_handler; - child_window->AddPreTargetHandler(&event_handler); + root_window()->AddPreTargetHandler(&event_handler); const gfx::Point mouse_location(1, 2); gfx::Point root_location(mouse_location);
diff --git a/ui/aura/window_targeter.cc b/ui/aura/window_targeter.cc index e04383a..8be8e14 100644 --- a/ui/aura/window_targeter.cc +++ b/ui/aura/window_targeter.cc
@@ -47,9 +47,8 @@ return nullptr; } -Window* WindowTargeter::GetPriorityTargetInRootWindow( - Window* root_window, - const ui::LocatedEvent& event) { +Window* WindowTargeter::FindTargetInRootWindow(Window* root_window, + const ui::LocatedEvent& event) { DCHECK_EQ(root_window, root_window->GetRootWindow()); // Mouse events should be dispatched to the window that processed the @@ -72,27 +71,8 @@ ui::GestureRecognizer::Get()->GetTouchLockedTarget(touch); if (consumer) return static_cast<Window*>(consumer); - } - - return nullptr; -} - -Window* WindowTargeter::FindTargetInRootWindow(Window* root_window, - const ui::LocatedEvent& event) { - DCHECK_EQ(root_window, root_window->GetRootWindow()); - - Window* priority_target = GetPriorityTargetInRootWindow(root_window, event); - if (priority_target) - return priority_target; - - if (event.IsTouchEvent()) { - // Query the gesture-recognizer to find targets for touch events. - const ui::TouchEvent& touch = *event.AsTouchEvent(); - // GetTouchLockedTarget() is handled in GetPriorityTargetInRootWindow(). - DCHECK(!ui::GestureRecognizer::Get()->GetTouchLockedTarget(touch)); - ui::GestureConsumer* consumer = - ui::GestureRecognizer::Get()->GetTargetForLocation( - event.location_f(), touch.source_device_id()); + consumer = ui::GestureRecognizer::Get()->GetTargetForLocation( + event.location_f(), touch.source_device_id()); if (consumer) return static_cast<Window*>(consumer); @@ -104,44 +84,34 @@ return nullptr; } -bool WindowTargeter::ProcessEventIfTargetsDifferentRootWindow( - Window* root_window, - Window* target, - ui::Event* event) { - if (root_window->Contains(target)) - return false; - - // |window| is the root window, but |target| is not a descendent of - // |window|. So do not allow dispatching from here. Instead, dispatch the - // event through the WindowEventDispatcher that owns |target|. - Window* new_root = target->GetRootWindow(); - DCHECK(new_root); - if (event->IsLocatedEvent()) { - // The event has been transformed to be in |target|'s coordinate system. - // But dispatching the event through the EventProcessor requires the event - // to be in the host's coordinate system. So, convert the event to be in - // the root's coordinate space, and then to the host's coordinate space by - // applying the host's transform. - ui::LocatedEvent* located_event = event->AsLocatedEvent(); - located_event->ConvertLocationToTarget(target, new_root); - WindowTreeHost* window_tree_host = new_root->GetHost(); - located_event->UpdateForRootTransform( - window_tree_host->GetRootTransform(), - window_tree_host->GetRootTransformForLocalEventCoordinates()); - } - ignore_result(new_root->GetHost()->event_sink()->OnEventFromSource(event)); - return true; -} - ui::EventTarget* WindowTargeter::FindTargetForEvent(ui::EventTarget* root, ui::Event* event) { Window* window = static_cast<Window*>(root); Window* target = event->IsKeyEvent() ? FindTargetForKeyEvent(window, *event->AsKeyEvent()) : FindTargetForNonKeyEvent(window, event); - if (target && !window->parent() && - ProcessEventIfTargetsDifferentRootWindow(window, target, event)) { - return nullptr; + if (target && !window->parent() && !window->Contains(target)) { + // |window| is the root window, but |target| is not a descendent of + // |window|. So do not allow dispatching from here. Instead, dispatch the + // event through the WindowEventDispatcher that owns |target|. + Window* new_root = target->GetRootWindow(); + DCHECK(new_root); + if (event->IsLocatedEvent()) { + // The event has been transformed to be in |target|'s coordinate system. + // But dispatching the event through the EventProcessor requires the event + // to be in the host's coordinate system. So, convert the event to be in + // the root's coordinate space, and then to the host's coordinate space by + // applying the host's transform. + ui::LocatedEvent* located_event = static_cast<ui::LocatedEvent*>(event); + located_event->ConvertLocationToTarget(target, new_root); + WindowTreeHost* window_tree_host = new_root->GetHost(); + located_event->UpdateForRootTransform( + window_tree_host->GetRootTransform(), + window_tree_host->GetRootTransformForLocalEventCoordinates()); + } + ignore_result(new_root->GetHost()->event_sink()->OnEventFromSource(event)); + + target = nullptr; } return target; }
diff --git a/ui/aura/window_targeter.h b/ui/aura/window_targeter.h index 1aea7f82..cb07c10 100644 --- a/ui/aura/window_targeter.h +++ b/ui/aura/window_targeter.h
@@ -60,21 +60,9 @@ virtual std::unique_ptr<HitTestRects> GetExtraHitTestShapeRects( Window* target) const; - // If there is a target that takes priority over normal WindowTargeter (such - // as a capture window) this returns it. - Window* GetPriorityTargetInRootWindow(Window* root_window, - const ui::LocatedEvent& event); - Window* FindTargetInRootWindow(Window* root_window, const ui::LocatedEvent& event); - // If |target| is not a child of |root_window|, then converts |event| to - // be relative to |root_window| and dispatches the event to |root_window|. - // Returns false if the |target| is a child of |root_window|. - bool ProcessEventIfTargetsDifferentRootWindow(Window* root_window, - Window* target, - ui::Event* event); - // ui::EventTargeter: ui::EventTarget* FindTargetForEvent(ui::EventTarget* root, ui::Event* event) override;
diff --git a/ui/display/mac/screen_mac.mm b/ui/display/mac/screen_mac.mm index 11eca13..da15115 100644 --- a/ui/display/mac/screen_mac.mm +++ b/ui/display/mac/screen_mac.mm
@@ -90,8 +90,10 @@ base::FeatureList::IsEnabled(features::kColorCorrectRendering); if (base::mac::IsAtLeastOS10_12() && !color_correct_rendering_enabled) color_space = base::mac::GetSystemColorSpace(); - display.set_color_space( - gfx::ICCProfile::FromCGColorSpace(color_space).GetColorSpace()); + gfx::ICCProfile icc_profile = + gfx::ICCProfile::FromCGColorSpace(color_space); + icc_profile.HistogramDisplay(display.id()); + display.set_color_space(icc_profile.GetColorSpace()); } display.set_color_depth(NSBitsPerPixelFromDepth([screen depth])); display.set_depth_per_component(NSBitsPerSampleFromDepth([screen depth]));
diff --git a/ui/display/win/color_profile_reader.cc b/ui/display/win/color_profile_reader.cc index d1220cfd..2a61591 100644 --- a/ui/display/win/color_profile_reader.cc +++ b/ui/display/win/color_profile_reader.cc
@@ -110,9 +110,10 @@ if (profile_data.empty()) { display_id_to_color_space_map_[display_id] = default_color_space_; } else { - display_id_to_color_space_map_[display_id] = - gfx::ICCProfile::FromData(profile_data.data(), profile_data.size()) - .GetColorSpace(); + gfx::ICCProfile icc_profile = + gfx::ICCProfile::FromData(profile_data.data(), profile_data.size()); + icc_profile.HistogramDisplay(display_id); + display_id_to_color_space_map_[display_id] = icc_profile.GetColorSpace(); } }
diff --git a/ui/display/win/screen_win_unittest.cc b/ui/display/win/screen_win_unittest.cc index 58f1b602..6c44428f 100644 --- a/ui/display/win/screen_win_unittest.cc +++ b/ui/display/win/screen_win_unittest.cc
@@ -143,7 +143,7 @@ virtual HWND CreateFakeHwnd(const gfx::Rect& bounds) = 0; }; -class TestScreenWinManager : public TestScreenWinInitializer { +class TestScreenWinManager final : public TestScreenWinInitializer { public: TestScreenWinManager() = default;
diff --git a/ui/events/blink/DEPS b/ui/events/blink/DEPS index 38bfc422..1c63c5b 100644 --- a/ui/events/blink/DEPS +++ b/ui/events/blink/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+cc/input/input_handler.h", "+cc/input/main_thread_scrolling_reason.h", + "+cc/input/scroll_boundary_behavior.h", "+cc/input/scroll_elasticity_helper.h", "+cc/trees/swap_promise_monitor.h",
diff --git a/ui/events/blink/did_overscroll_params.h b/ui/events/blink/did_overscroll_params.h index 46eeb15..9c3ea4b1 100644 --- a/ui/events/blink/did_overscroll_params.h +++ b/ui/events/blink/did_overscroll_params.h
@@ -5,6 +5,7 @@ #ifndef UI_EVENTS_BLINK_DID_OVERSCROLL_PARAMS_H_ #define UI_EVENTS_BLINK_DID_OVERSCROLL_PARAMS_H_ +#include "cc/input/scroll_boundary_behavior.h" #include "ui/gfx/geometry/point_f.h" #include "ui/gfx/geometry/vector2d_f.h" @@ -17,6 +18,7 @@ gfx::Vector2dF latest_overscroll_delta; gfx::Vector2dF current_fling_velocity; gfx::PointF causal_event_viewport_point; + cc::ScrollBoundaryBehavior scroll_boundary_behavior; }; } // namespace ui
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc index a551486..e79247fd 100644 --- a/ui/events/blink/input_handler_proxy.cc +++ b/ui/events/blink/input_handler_proxy.cc
@@ -1461,13 +1461,16 @@ ToClientScrollIncrement(current_fling_velocity_); current_overscroll_params_->causal_event_viewport_point = gfx::PointF(causal_event_viewport_point); + current_overscroll_params_->scroll_boundary_behavior = + scroll_result.scroll_boundary_behavior; return; } client_->DidOverscroll(scroll_result.accumulated_root_overscroll, scroll_result.unused_scroll_delta, ToClientScrollIncrement(current_fling_velocity_), - gfx::PointF(causal_event_viewport_point)); + gfx::PointF(causal_event_viewport_point), + scroll_result.scroll_boundary_behavior); } bool InputHandlerProxy::CancelCurrentFling() {
diff --git a/ui/events/blink/input_handler_proxy_client.h b/ui/events/blink/input_handler_proxy_client.h index b2f4d666..6cefb93 100644 --- a/ui/events/blink/input_handler_proxy_client.h +++ b/ui/events/blink/input_handler_proxy_client.h
@@ -49,7 +49,8 @@ const gfx::Vector2dF& accumulated_overscroll, const gfx::Vector2dF& latest_overscroll_delta, const gfx::Vector2dF& current_fling_velocity, - const gfx::PointF& causal_event_viewport_point) = 0; + const gfx::PointF& causal_event_viewport_point, + const cc::ScrollBoundaryBehavior& scroll_boundary_behavior) = 0; virtual void DidStopFlinging() = 0;
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc index 776a8c6..8ccb5e5 100644 --- a/ui/events/blink/input_handler_proxy_unittest.cc +++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -312,11 +312,13 @@ blink::WebFloatSize(cumulative_scroll.width, cumulative_scroll.height)); } - MOCK_METHOD4(DidOverscroll, - void(const gfx::Vector2dF& accumulated_overscroll, - const gfx::Vector2dF& latest_overscroll_delta, - const gfx::Vector2dF& current_fling_velocity, - const gfx::PointF& causal_event_viewport_point)); + MOCK_METHOD5( + DidOverscroll, + void(const gfx::Vector2dF& accumulated_overscroll, + const gfx::Vector2dF& latest_overscroll_delta, + const gfx::Vector2dF& current_fling_velocity, + const gfx::PointF& causal_event_viewport_point, + const cc::ScrollBoundaryBehavior& scroll_boundary_behavior)); void DidStopFlinging() override {} void DidAnimateForInput() override {} MOCK_METHOD3(SetWhiteListedTouchAction, @@ -2239,11 +2241,10 @@ .WillOnce(testing::Return(overscroll)); EXPECT_CALL( mock_client_, - DidOverscroll( - overscroll.accumulated_root_overscroll, - overscroll.unused_scroll_delta, - testing::Property(&gfx::Vector2dF::y, testing::Lt(0)), - testing::_)); + DidOverscroll(overscroll.accumulated_root_overscroll, + overscroll.unused_scroll_delta, + testing::Property(&gfx::Vector2dF::y, testing::Lt(0)), + testing::_, overscroll.scroll_boundary_behavior)); if (!touchpad_and_wheel_scroll_latching_enabled_) EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)); EXPECT_SET_NEEDS_ANIMATE_INPUT(1); @@ -2404,11 +2405,10 @@ .WillOnce(testing::Return(overscroll)); EXPECT_CALL( mock_client_, - DidOverscroll( - overscroll.accumulated_root_overscroll, - overscroll.unused_scroll_delta, - testing::Property(&gfx::Vector2dF::y, testing::Lt(0)), - testing::_)); + DidOverscroll(overscroll.accumulated_root_overscroll, + overscroll.unused_scroll_delta, + testing::Property(&gfx::Vector2dF::y, testing::Lt(0)), + testing::_, overscroll.scroll_boundary_behavior)); EXPECT_SET_NEEDS_ANIMATE_INPUT(1); time += base::TimeDelta::FromMilliseconds(10); Animate(time); @@ -2433,11 +2433,10 @@ .WillOnce(testing::Return(overscroll)); EXPECT_CALL( mock_client_, - DidOverscroll( - overscroll.accumulated_root_overscroll, - overscroll.unused_scroll_delta, - testing::Property(&gfx::Vector2dF::x, testing::Lt(0)), - testing::_)); + DidOverscroll(overscroll.accumulated_root_overscroll, + overscroll.unused_scroll_delta, + testing::Property(&gfx::Vector2dF::x, testing::Lt(0)), + testing::_, overscroll.scroll_boundary_behavior)); EXPECT_CALL(mock_input_handler_, ScrollEnd(testing::_)); time += base::TimeDelta::FromMilliseconds(10); Animate(time);
diff --git a/ui/events/event.h b/ui/events/event.h index 61861900..6b5ccbd 100644 --- a/ui/events/event.h +++ b/ui/events/event.h
@@ -378,7 +378,7 @@ gfx::Point offset = gfx::ToFlooredPoint(location_); T::ConvertPointToTarget(source, target, &offset); gfx::Vector2d diff = gfx::ToFlooredPoint(location_) - offset; - location_ = location_ - diff; + location_= location_ - diff; } protected:
diff --git a/ui/events/event_processor.cc b/ui/events/event_processor.cc index 316dcdd..f80cb91 100644 --- a/ui/events/event_processor.cc +++ b/ui/events/event_processor.cc
@@ -22,54 +22,45 @@ event_to_dispatch = event_copy.get(); } - EventDispatchDetails details; OnEventProcessingStarted(event_to_dispatch); - // GetInitialEventTarget() may handle the event. - EventTarget* initial_target = event_to_dispatch->handled() - ? nullptr - : GetInitialEventTarget(event_to_dispatch); + EventTarget* target = nullptr; + EventTargeter* targeter = nullptr; if (!event_to_dispatch->handled()) { - EventTarget* target = initial_target; - EventTargeter* targeter = nullptr; - - if (!target) { - EventTarget* root = GetRootForEvent(event_to_dispatch); - DCHECK(root); - targeter = root->GetEventTargeter(); - if (targeter) { + EventTarget* root = GetRootForEvent(event_to_dispatch); + DCHECK(root); + targeter = root->GetEventTargeter(); + if (targeter) { + target = targeter->FindTargetForEvent(root, event_to_dispatch); + } else { + targeter = GetDefaultEventTargeter(); + if (event_to_dispatch->target()) + target = root; + else target = targeter->FindTargetForEvent(root, event_to_dispatch); - } else { - targeter = GetDefaultEventTargeter(); - if (event_to_dispatch->target()) - target = root; - else - target = targeter->FindTargetForEvent(root, event_to_dispatch); - } - DCHECK(targeter); } - - while (target) { - details = DispatchEvent(target, event_to_dispatch); - - if (!dispatch_original_event) { - if (event_to_dispatch->stopped_propagation()) - event->StopPropagation(); - else if (event_to_dispatch->handled()) - event->SetHandled(); - } - - if (details.dispatcher_destroyed) - return details; - - if (details.target_destroyed || event->handled() || - target == initial_target) { - break; - } - - DCHECK(targeter); - target = targeter->FindNextBestTarget(target, event_to_dispatch); - } + DCHECK(targeter); } + + EventDispatchDetails details; + while (target) { + details = DispatchEvent(target, event_to_dispatch); + + if (!dispatch_original_event) { + if (event_to_dispatch->stopped_propagation()) + event->StopPropagation(); + else if (event_to_dispatch->handled()) + event->SetHandled(); + } + + if (details.dispatcher_destroyed) + return details; + + if (details.target_destroyed || event->handled()) + break; + + target = targeter->FindNextBestTarget(target, event_to_dispatch); + } + OnEventProcessingFinished(event); return details; }
diff --git a/ui/events/event_processor.h b/ui/events/event_processor.h index cdb834b..7be5f2d 100644 --- a/ui/events/event_processor.h +++ b/ui/events/event_processor.h
@@ -23,11 +23,6 @@ // EventSink overrides: EventDispatchDetails OnEventFromSource(Event* event) override; - // Returns the initial target for the event. A value of null means use the - // root and default targeter to find the target. This pass may process the - // event. - virtual EventTarget* GetInitialEventTarget(Event* event) = 0; - // Returns the EventTarget with the right EventTargeter that we should use for // dispatching this |event|. virtual EventTarget* GetRootForEvent(Event* event) = 0;
diff --git a/ui/events/test/test_event_processor.cc b/ui/events/test/test_event_processor.cc index 748d47c9a2..dd83c4c 100644 --- a/ui/events/test/test_event_processor.cc +++ b/ui/events/test/test_event_processor.cc
@@ -37,10 +37,6 @@ return true; } -EventTarget* TestEventProcessor::GetInitialEventTarget(Event* event) { - return nullptr; -} - EventTarget* TestEventProcessor::GetRootForEvent(Event* event) { return root_.get(); }
diff --git a/ui/events/test/test_event_processor.h b/ui/events/test/test_event_processor.h index 8ff9e5a..1e484a45 100644 --- a/ui/events/test/test_event_processor.h +++ b/ui/events/test/test_event_processor.h
@@ -36,7 +36,6 @@ // EventProcessor: bool CanDispatchToTarget(EventTarget* target) override; - EventTarget* GetInitialEventTarget(Event* event) override; EventTarget* GetRootForEvent(Event* event) override; EventTargeter* GetDefaultEventTargeter() override; EventDispatchDetails OnEventFromSource(Event* event) override;
diff --git a/ui/file_manager/file_manager/foreground/js/directory_contents.js b/ui/file_manager/file_manager/foreground/js/directory_contents.js index f58a0d55..33165631 100644 --- a/ui/file_manager/file_manager/foreground/js/directory_contents.js +++ b/ui/file_manager/file_manager/foreground/js/directory_contents.js
@@ -325,7 +325,7 @@ /** * @private {string} */ - this.query_ = query; + this.query_ = query.toLowerCase(); /** * @private {string}
diff --git a/ui/file_manager/video_player/js/media_controls.js b/ui/file_manager/video_player/js/media_controls.js index aa49c92..afec5e7 100644 --- a/ui/file_manager/video_player/js/media_controls.js +++ b/ui/file_manager/video_player/js/media_controls.js
@@ -377,7 +377,7 @@ this.progressSlider_.setAttribute('aria-label', str('MEDIA_PLAYER_SEEK_SLIDER_LABEL')); this.progressSlider_.addEventListener('change', function(event) { - this.onProgressChange_(this.progressSlider_.ratio); + this.onProgressChange_(this.progressSlider_.ratio / 100); }.bind(this)); this.progressSlider_.addEventListener( 'immediate-value-change', @@ -452,7 +452,7 @@ this.progressSlider_.value = Math.max(Math.min( this.progressSlider_.value + stepsToSkip, this.progressSlider_.max), 0); - this.onProgressChange_(this.progressSlider_.ratio); + this.onProgressChange_(this.progressSlider_.ratio / 100); } }; @@ -582,7 +582,7 @@ this.volume_.setAttribute('aria-label', str('MEDIA_PLAYER_VOLUME_SLIDER_LABEL')); this.volume_.addEventListener('change', function(event) { - this.onVolumeChange_(this.volume_.ratio); + this.onVolumeChange_(this.volume_.ratio / 100); }.bind(this)); this.volume_.addEventListener('immediate-value-change', function(event) { this.onVolumeDrag_();
diff --git a/ui/gfx/icc_profile.cc b/ui/gfx/icc_profile.cc index a982db5..d69b746a 100644 --- a/ui/gfx/icc_profile.cc +++ b/ui/gfx/icc_profile.cc
@@ -5,10 +5,12 @@ #include "ui/gfx/icc_profile.h" #include <list> +#include <set> #include "base/command_line.h" #include "base/containers/mru_cache.h" #include "base/lazy_instance.h" +#include "base/metrics/histogram_macros.h" #include "base/synchronization/lock.h" #include "third_party/skia/include/core/SkColorSpaceXform.h" #include "third_party/skia/include/core/SkICC.h" @@ -25,32 +27,173 @@ const uint64_t ICCProfile::test_id_a2b_only_ = 6; const uint64_t ICCProfile::test_id_overshoot_ = 7; -namespace { +// A MRU cache of ICC profiles. The cache key is a uin64_t which a +// gfx::ColorSpace may use to refer back to an ICC profile in the cache. The +// data cached for each profile is the gfx::ICCProfile structure (which includes +// the associated gfx::ColorSpace approximations and SkColorSpace structures) +// and whether or not the ICC profile has been histogrammed. +class ICCProfileCache { + public: + // Allow keeping around a maximum of 16 cached ICC profiles. Beware that + // we will do a linear search thorugh currently-cached ICC profiles, + // when creating a new ICC profile. + static const size_t kMaxCachedICCProfiles = 16; -// Allow keeping around a maximum of 8 cached ICC profiles. Beware that -// we will do a linear search thorugh currently-cached ICC profiles, -// when creating a new ICC profile. -const size_t kMaxCachedICCProfiles = 8; + ICCProfileCache() : id_to_icc_profile_mru_(kMaxCachedICCProfiles) {} + ~ICCProfileCache() {} -struct Cache { - Cache() : id_to_icc_profile_mru(kMaxCachedICCProfiles) {} - ~Cache() {} + // Add |icc_profile| to the cache. If |icc_profile| does not have an id set + // yet, assign an id to it. + void InsertAndSetIdIfNeeded(ICCProfile* icc_profile) { + base::AutoLock lock(lock_); + + if (FindByIdUnderLock(icc_profile->id_, icc_profile)) + return; + + if (FindByDataUnderLock(icc_profile->data_.data(), + icc_profile->data_.size(), icc_profile)) { + return; + } + + if (!icc_profile->id_) + icc_profile->id_ = next_unused_id_++; + + Entry entry; + entry.icc_profile = *icc_profile; + id_to_icc_profile_mru_.Put(icc_profile->id_, entry); + } + + // We maintain UMA histograms of display ICC profiles. Only histogram a + // display once for each |display_id| (because we will re-read the same + // ICC profile repeatedly when reading other display profiles, which will + // skew samples). Return true if we need to histogram this profile for + // |display_id|, and ensure that all future calls will return false for + // |display_id|. + bool GetAndSetNeedsHistogram(uint64_t display_id, + const ICCProfile& icc_profile) { + base::AutoLock lock(lock_); + + // If we don't find the profile in the cache, don't histogram it. + auto found = id_to_icc_profile_mru_.Get(icc_profile.id_); + if (found == id_to_icc_profile_mru_.end()) + return false; + + // If we have already histogrammed this display, don't histogram it. + std::set<int64_t>& histogrammed_display_ids = + found->second.histogrammed_display_ids; + if (histogrammed_display_ids.count(display_id)) + return false; + + // Histogram this display, and mark that we have done so. + histogrammed_display_ids.insert(display_id); + return true; + } + + // Move this ICC profile to the most recently used end of the cache, + // re-inserting if needed. + void TouchEntry(const ICCProfile& icc_profile) { + base::AutoLock lock(lock_); + + if (!icc_profile.id_) + return; + + // Look up the profile by id to move it to the front of the MRU. + auto found = id_to_icc_profile_mru_.Get(icc_profile.id_); + if (found != id_to_icc_profile_mru_.end()) + return; + + // If the entry was not found, insert it. + Entry entry; + entry.icc_profile = icc_profile; + id_to_icc_profile_mru_.Put(icc_profile.id_, entry); + } + + // Look up an ICC profile in the cache by its data (to ensure that the same + // data gets the same id every time). On success, return true and populate + // |icc_profile| with the associated profile. + bool FindByData(const void* data, size_t size, ICCProfile* icc_profile) { + base::AutoLock lock(lock_); + return FindByDataUnderLock(data, size, icc_profile); + } + + // Look up an ICC profile in the cache by its id. On success, return true and + // populate |icc_profile| with the associated profile. + bool FindById(uint64_t id, ICCProfile* icc_profile) { + base::AutoLock lock(lock_); + return FindByIdUnderLock(id, icc_profile); + } + + private: + struct Entry { + ICCProfile icc_profile; + + // The set of display ids which have have caused this ICC profile to be + // recorded in UMA histograms. Only record an ICC profile once per display + // id (since the same profile will be re-read repeatedly, e.g, when displays + // are resized). + std::set<int64_t> histogrammed_display_ids; + }; + + // Body for FindById, executed when the cache lock is already held. + bool FindByIdUnderLock(uint64_t id, ICCProfile* icc_profile) { + lock_.AssertAcquired(); + if (!id) + return false; + + auto found = id_to_icc_profile_mru_.Get(id); + if (found == id_to_icc_profile_mru_.end()) + return false; + + *icc_profile = found->second.icc_profile; + return true; + } + + // Body for FindByData, executed when the cache lock is already held. + bool FindByDataUnderLock(const void* data, + size_t size, + ICCProfile* icc_profile) { + lock_.AssertAcquired(); + if (size == 0) + return false; + + for (const auto& id_entry_pair : id_to_icc_profile_mru_) { + const ICCProfile& cached_profile = id_entry_pair.second.icc_profile; + const std::vector<char>& iter_data = cached_profile.data_; + if (iter_data.size() != size || memcmp(data, iter_data.data(), size)) + continue; + + *icc_profile = cached_profile; + id_to_icc_profile_mru_.Get(cached_profile.id_); + return true; + } + return false; + } // Start from-ICC-data IDs at the end of the hard-coded test id list above. - uint64_t next_unused_id = 10; - base::MRUCache<uint64_t, ICCProfile> id_to_icc_profile_mru; - base::Lock lock; + uint64_t next_unused_id_ = 10; + base::MRUCache<uint64_t, Entry> id_to_icc_profile_mru_; + + // Lock that must be held to access |id_to_icc_profile_mru_| and + // |next_unused_id_|. + base::Lock lock_; }; -static base::LazyInstance<Cache>::DestructorAtExit g_cache = + +namespace { + +static base::LazyInstance<ICCProfileCache>::DestructorAtExit g_cache = LAZY_INSTANCE_INITIALIZER; -void ExtractColorSpaces(const std::vector<char>& data, - gfx::ColorSpace* parametric_color_space, - bool* parametric_color_space_is_accurate, - sk_sp<SkColorSpace>* useable_sk_color_space) { +} // namespace + +// static +ICCProfile::AnalyzeResult ICCProfile::ExtractColorSpaces( + const std::vector<char>& data, + gfx::ColorSpace* parametric_color_space, + float* parametric_tr_fn_max_error, + sk_sp<SkColorSpace>* useable_sk_color_space) { // Initialize the output parameters as invalid. *parametric_color_space = gfx::ColorSpace(); - *parametric_color_space_is_accurate = false; + *parametric_tr_fn_max_error = 0; *useable_sk_color_space = nullptr; // Parse the profile and attempt to create a SkColorSpaceXform out of it. @@ -58,20 +201,20 @@ sk_sp<SkICC> sk_icc = SkICC::Make(data.data(), data.size()); if (!sk_icc) { DLOG(ERROR) << "Failed to parse ICC profile to SkICC."; - return; + return kICCFailedToParse; } sk_sp<SkColorSpace> sk_icc_color_space = SkColorSpace::MakeICC(data.data(), data.size()); if (!sk_icc_color_space) { DLOG(ERROR) << "Failed to parse ICC profile to SkColorSpace."; - return; + return kICCFailedToExtractSkColorSpace; } std::unique_ptr<SkColorSpaceXform> sk_color_space_xform = SkColorSpaceXform::New(sk_srgb_color_space.get(), sk_icc_color_space.get()); if (!sk_color_space_xform) { DLOG(ERROR) << "Parsed ICC profile but can't create SkColorSpaceXform."; - return; + return kICCFailedToCreateXform; } // Because this SkColorSpace can be used to construct a transform, mark it @@ -82,15 +225,14 @@ // If our SkColorSpace representation is sRGB then return that. if (SkColorSpace::Equals(sk_srgb_color_space.get(), sk_icc_color_space.get())) { - *parametric_color_space_is_accurate = true; - return; + return kICCExtractedSRGBColorSpace; } // A primary matrix is required for our parametric approximation. SkMatrix44 to_XYZD50_matrix; if (!sk_icc->toXYZD50(&to_XYZD50_matrix)) { DLOG(ERROR) << "Failed to extract ICC profile primary matrix."; - return; + return kICCFailedToExtractMatrix; } // Try to directly extract a numerical transfer function. @@ -98,27 +240,7 @@ if (sk_icc->isNumericalTransferFn(&exact_tr_fn)) { *parametric_color_space = gfx::ColorSpace::CreateCustom(to_XYZD50_matrix, exact_tr_fn); - *parametric_color_space_is_accurate = true; - return; - } - - // If that fails, try to numerically approximate the transfer function. - SkColorSpaceTransferFn approx_tr_fn; - float approx_tr_fn_max_error = 0; - if (SkApproximateTransferFn(sk_icc, &approx_tr_fn_max_error, &approx_tr_fn)) { - const float kMaxError = 2.f / 256.f; - if (approx_tr_fn_max_error < kMaxError) { - *parametric_color_space = - gfx::ColorSpace::CreateCustom(to_XYZD50_matrix, approx_tr_fn); - *parametric_color_space_is_accurate = true; - return; - } else { - DLOG(ERROR) - << "Failed to accurately approximate transfer function, error: " - << 256.f * approx_tr_fn_max_error << "/256"; - } - } else { - DLOG(ERROR) << "Failed approximate transfer function."; + return kICCExtractedMatrixAndAnalyticTrFn; } // If we fail to get a transfer function, use the sRGB transfer function, @@ -127,9 +249,31 @@ // SkColorSpace. *parametric_color_space = gfx::ColorSpace::CreateCustom( to_XYZD50_matrix, ColorSpace::TransferID::IEC61966_2_1); -} -} // namespace + // Attempt to fit a parametric transfer function to the table data in the + // profile. + SkColorSpaceTransferFn approx_tr_fn; + if (!SkApproximateTransferFn(sk_icc, parametric_tr_fn_max_error, + &approx_tr_fn)) { + DLOG(ERROR) << "Failed approximate transfer function."; + return kICCFailedToConvergeToApproximateTrFn; + } + + // If this converged, but has too high error, use the sRGB transfer function + // from above. + const float kMaxError = 2.f / 256.f; + if (*parametric_tr_fn_max_error >= kMaxError) { + DLOG(ERROR) << "Failed to accurately approximate transfer function, error: " + << 256.f * (*parametric_tr_fn_max_error) << "/256"; + return kICCFailedToApproximateTrFnAccurately; + }; + + // If the error is sufficiently low, declare that the approximation is + // accurate. + *parametric_color_space = + gfx::ColorSpace::CreateCustom(to_XYZD50_matrix, approx_tr_fn); + return kICCExtractedMatrixAndApproximatedTrFn; +} ICCProfile::ICCProfile() = default; ICCProfile::ICCProfile(ICCProfile&& other) = default; @@ -147,7 +291,15 @@ } bool ICCProfile::IsValid() const { - return successfully_parsed_by_sk_icc_; + switch (analyze_result_) { + case kICCFailedToParse: + case kICCFailedToExtractSkColorSpace: + case kICCFailedToCreateXform: + return false; + default: + break; + } + return true; } // static @@ -159,30 +311,14 @@ ICCProfile ICCProfile::FromDataWithId(const void* data, size_t size, uint64_t new_profile_id) { - if (!size) - return ICCProfile(); + ICCProfile icc_profile; - const char* data_as_char = reinterpret_cast<const char*>(data); - { - // Linearly search the cached ICC profiles to find one with the same data. - // If it exists, re-use its id and touch it in the cache. - Cache& cache = g_cache.Get(); - base::AutoLock lock(cache.lock); - for (auto iter = cache.id_to_icc_profile_mru.begin(); - iter != cache.id_to_icc_profile_mru.end(); ++iter) { - const std::vector<char>& iter_data = iter->second.data_; - if (iter_data.size() != size || memcmp(data, iter_data.data(), size)) - continue; - auto found = cache.id_to_icc_profile_mru.Get(iter->second.id_); - return found->second; - } - if (!new_profile_id) - new_profile_id = cache.next_unused_id++; - } + if (!size) + return icc_profile; // Create a new cached id and add it to the cache. - ICCProfile icc_profile; icc_profile.id_ = new_profile_id; + const char* data_as_char = reinterpret_cast<const char*>(data); icc_profile.data_.insert(icc_profile.data_.begin(), data_as_char, data_as_char + size); icc_profile.ComputeColorSpaceAndCache(); @@ -203,93 +339,91 @@ } const ColorSpace& ICCProfile::GetColorSpace() const { - // Move this ICC profile to the most recently used end of the cache, - // inserting if needed. - if (id_) { - Cache& cache = g_cache.Get(); - base::AutoLock lock(cache.lock); - auto found = cache.id_to_icc_profile_mru.Get(id_); - if (found == cache.id_to_icc_profile_mru.end()) - found = cache.id_to_icc_profile_mru.Put(id_, *this); - } + g_cache.Get().TouchEntry(*this); return color_space_; } const ColorSpace& ICCProfile::GetParametricColorSpace() const { - // Move this ICC profile to the most recently used end of the cache, - // inserting if needed. - if (id_) { - Cache& cache = g_cache.Get(); - base::AutoLock lock(cache.lock); - auto found = cache.id_to_icc_profile_mru.Get(id_); - if (found == cache.id_to_icc_profile_mru.end()) - found = cache.id_to_icc_profile_mru.Put(id_, *this); - } + g_cache.Get().TouchEntry(*this); return parametric_color_space_; } // static bool ICCProfile::FromId(uint64_t id, ICCProfile* icc_profile) { - if (!id) - return false; - - Cache& cache = g_cache.Get(); - base::AutoLock lock(cache.lock); - - auto found = cache.id_to_icc_profile_mru.Get(id); - if (found == cache.id_to_icc_profile_mru.end()) - return false; - - *icc_profile = found->second; - return true; + return g_cache.Get().FindById(id, icc_profile); } void ICCProfile::ComputeColorSpaceAndCache() { - if (!id_) + // Early out for empty entries. + if (data_.empty()) return; - // If this already exists in the cache, just update its |color_space_|. - { - Cache& cache = g_cache.Get(); - base::AutoLock lock(cache.lock); - auto found = cache.id_to_icc_profile_mru.Get(id_); - if (found != cache.id_to_icc_profile_mru.end()) { - color_space_ = found->second.color_space_; - parametric_color_space_ = found->second.parametric_color_space_; - successfully_parsed_by_sk_icc_ = - found->second.successfully_parsed_by_sk_icc_; - return; - } - } + // If this id already exists in the cache, copy |this| from the cache entry. + if (g_cache.Get().FindById(id_, this)) + return; + + // If this data already exists in the cache, copy |this| from the cache entry. + if (g_cache.Get().FindByData(data_.data(), data_.size(), this)) + return; // Parse the ICC profile sk_sp<SkColorSpace> useable_sk_color_space; - bool parametric_color_space_is_accurate = false; - ExtractColorSpaces(data_, ¶metric_color_space_, - ¶metric_color_space_is_accurate, - &useable_sk_color_space); - if (parametric_color_space_is_accurate) { - successfully_parsed_by_sk_icc_ = true; - parametric_color_space_.icc_profile_id_ = id_; - color_space_ = parametric_color_space_; - } else if (useable_sk_color_space) { - successfully_parsed_by_sk_icc_ = true; - color_space_ = ColorSpace(ColorSpace::PrimaryID::ICC_BASED, - ColorSpace::TransferID::ICC_BASED); - color_space_.icc_profile_id_ = id_; - color_space_.icc_profile_sk_color_space_ = useable_sk_color_space; - } else { - successfully_parsed_by_sk_icc_ = false; - DCHECK(!color_space_.IsValid()); - color_space_ = parametric_color_space_; + analyze_result_ = + ExtractColorSpaces(data_, ¶metric_color_space_, + ¶metric_tr_fn_error_, &useable_sk_color_space); + switch (analyze_result_) { + case kICCExtractedSRGBColorSpace: + case kICCExtractedMatrixAndAnalyticTrFn: + case kICCExtractedMatrixAndApproximatedTrFn: + // Successfully and accurately extracted color space. + parametric_color_space_.icc_profile_id_ = id_; + color_space_ = parametric_color_space_; + break; + case kICCFailedToExtractRawTrFn: + case kICCFailedToExtractMatrix: + case kICCFailedToConvergeToApproximateTrFn: + case kICCFailedToApproximateTrFnAccurately: + // Successfully but extracted a color space, but it isn't accurate enough. + color_space_ = ColorSpace(ColorSpace::PrimaryID::ICC_BASED, + ColorSpace::TransferID::ICC_BASED); + color_space_.icc_profile_id_ = id_; + color_space_.icc_profile_sk_color_space_ = useable_sk_color_space; + break; + case kICCFailedToParse: + case kICCFailedToExtractSkColorSpace: + case kICCFailedToCreateXform: + // Can't even use this color space as a LUT. + DCHECK(!parametric_color_space_.IsValid()); + color_space_ = parametric_color_space_; + break; } // Add to the cache. - { - Cache& cache = g_cache.Get(); - base::AutoLock lock(cache.lock); - cache.id_to_icc_profile_mru.Put(id_, *this); + g_cache.Get().InsertAndSetIdIfNeeded(this); +} + +void ICCProfile::HistogramDisplay(int64_t display_id) const { + if (!g_cache.Get().GetAndSetNeedsHistogram(display_id, *this)) + return; + + UMA_HISTOGRAM_ENUMERATION("Blink.ColorSpace.Destination.ICCResult", + analyze_result_, kICCProfileAnalyzeLast); + + // Add histograms for numerical approximation. + bool nonlinear_fit_converged = + analyze_result_ == kICCExtractedMatrixAndApproximatedTrFn || + analyze_result_ == kICCFailedToApproximateTrFnAccurately; + bool nonlinear_fit_did_not_converge = + analyze_result_ == kICCFailedToConvergeToApproximateTrFn; + if (nonlinear_fit_converged || nonlinear_fit_did_not_converge) { + UMA_HISTOGRAM_BOOLEAN("Blink.ColorSpace.Destination.NonlinearFitConverged", + nonlinear_fit_converged); + } + if (nonlinear_fit_converged) { + UMA_HISTOGRAM_CUSTOM_COUNTS( + "Blink.ColorSpace.Destination.NonlinearFitError", + static_cast<int>(parametric_tr_fn_error_ * 255), 0, 127, 16); } }
diff --git a/ui/gfx/icc_profile.h b/ui/gfx/icc_profile.h index 03170ad..4049df8 100644 --- a/ui/gfx/icc_profile.h +++ b/ui/gfx/icc_profile.h
@@ -23,6 +23,8 @@ namespace gfx { +class ICCProfileCache; + // Used to represent a full ICC profile, usually retrieved from a monitor. It // can be lossily compressed into a ColorSpace object. This structure should // only be sent from higher-privilege processes to lower-privilege processes, @@ -68,6 +70,10 @@ const std::vector<char>& GetData() const; + // Histogram how we this was approximated by a gfx::ColorSpace. Only + // histogram a given profile once per display. + void HistogramDisplay(int64_t display_id) const; + #if defined(OS_WIN) // This will read monitor ICC profiles from disk and cache the results for the // other functions to read. This should not be called on the UI or IO thread. @@ -76,6 +82,22 @@ #endif private: + // This must match ICCProfileAnalyzeResult enum in histograms.xml. + enum AnalyzeResult { + kICCExtractedMatrixAndAnalyticTrFn = 0, + kICCExtractedMatrixAndApproximatedTrFn = 1, + kICCFailedToConvergeToApproximateTrFn = 2, + kICCFailedToExtractRawTrFn = 3, + kICCFailedToExtractMatrix = 4, + kICCFailedToParse = 5, + kICCFailedToExtractSkColorSpace = 6, + kICCFailedToCreateXform = 7, + kICCFailedToApproximateTrFnAccurately = 8, + kICCExtractedSRGBColorSpace = 9, + kICCProfileAnalyzeLast = kICCExtractedSRGBColorSpace, + }; + + friend class ICCProfileCache; friend ICCProfile ICCProfileForTestingAdobeRGB(); friend ICCProfile ICCProfileForTestingColorSpin(); friend ICCProfile ICCProfileForTestingGenericRGB(); @@ -103,6 +125,12 @@ size_t size, uint64_t id); + static AnalyzeResult ExtractColorSpaces( + const std::vector<char>& data, + gfx::ColorSpace* parametric_color_space, + float* parametric_tr_fn_max_error, + sk_sp<SkColorSpace>* useable_sk_color_space); + void ComputeColorSpaceAndCache(); // This globally identifies this ICC profile. It is used to look up this ICC @@ -111,6 +139,9 @@ uint64_t id_ = 0; std::vector<char> data_; + // The result of attepting to extract a color space from the color profile. + AnalyzeResult analyze_result_ = kICCFailedToParse; + // |color_space| always links back to this ICC profile, and its SkColorSpace // is always equal to the SkColorSpace created from this ICCProfile. gfx::ColorSpace color_space_; @@ -119,8 +150,10 @@ // is accurate, and its SkColorSpace will always be parametrically created. gfx::ColorSpace parametric_color_space_; - // This is set to true if SkICC successfully parsed this profile. - bool successfully_parsed_by_sk_icc_ = false; + // The L-infinity error of the parametric color space fit. This is undefined + // unless |analyze_result_| is kICCFailedToApproximateTrFnAccurately or + // kICCExtractedMatrixAndApproximatedTrFn. + float parametric_tr_fn_error_ = -1; FRIEND_TEST_ALL_PREFIXES(SimpleColorSpace, BT709toSRGBICC); FRIEND_TEST_ALL_PREFIXES(SimpleColorSpace, GetColorSpace);
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py index 3444293..9503ad28 100755 --- a/ui/gl/generate_bindings.py +++ b/ui/gl/generate_bindings.py
@@ -1783,7 +1783,7 @@ { 'return_type': 'void', 'names': ['glViewport'], 'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', }, -{ 'return_type': 'GLenum', +{ 'return_type': 'void', 'versions': [{ 'name': 'glWaitSync', 'extensions': ['GL_ARB_sync'] }], 'arguments':
diff --git a/ui/gl/gl_bindings_api_autogen_gl.h b/ui/gl/gl_bindings_api_autogen_gl.h index 5403786b..ed10bfc0 100644 --- a/ui/gl/gl_bindings_api_autogen_gl.h +++ b/ui/gl/gl_bindings_api_autogen_gl.h
@@ -1271,4 +1271,4 @@ GLsizei stride, const void* ptr) override; void glViewportFn(GLint x, GLint y, GLsizei width, GLsizei height) override; -GLenum glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) override; +void glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) override;
diff --git a/ui/gl/gl_bindings_autogen_gl.cc b/ui/gl/gl_bindings_autogen_gl.cc index 95faee85..268b41e 100644 --- a/ui/gl/gl_bindings_autogen_gl.cc +++ b/ui/gl/gl_bindings_autogen_gl.cc
@@ -5121,10 +5121,8 @@ driver_->fn.glViewportFn(x, y, width, height); } -GLenum GLApiBase::glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) { - return driver_->fn.glWaitSyncFn(sync, flags, timeout); +void GLApiBase::glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) { + driver_->fn.glWaitSyncFn(sync, flags, timeout); } void TraceGLApi::glActiveTextureFn(GLenum texture) { @@ -8222,11 +8220,9 @@ gl_api_->glViewportFn(x, y, width, height); } -GLenum TraceGLApi::glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) { +void TraceGLApi::glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) { TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glWaitSync") - return gl_api_->glWaitSyncFn(sync, flags, timeout); + gl_api_->glWaitSyncFn(sync, flags, timeout); } void DebugGLApi::glActiveTextureFn(GLenum texture) { @@ -12325,14 +12321,10 @@ gl_api_->glViewportFn(x, y, width, height); } -GLenum DebugGLApi::glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) { +void DebugGLApi::glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) { GL_SERVICE_LOG("glWaitSync" << "(" << sync << ", " << flags << ", " << timeout << ")"); - GLenum result = gl_api_->glWaitSyncFn(sync, flags, timeout); - GL_SERVICE_LOG("GL_RESULT: " << result); - return result; + gl_api_->glWaitSyncFn(sync, flags, timeout); } void NoContextGLApi::glActiveTextureFn(GLenum texture) { @@ -15814,12 +15806,11 @@ LOG(ERROR) << "Trying to call glViewport() without current GL context"; } -GLenum NoContextGLApi::glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) { +void NoContextGLApi::glWaitSyncFn(GLsync sync, + GLbitfield flags, + GLuint64 timeout) { NOTREACHED() << "Trying to call glWaitSync() without current GL context"; LOG(ERROR) << "Trying to call glWaitSync() without current GL context"; - return static_cast<GLenum>(0); } } // namespace gl
diff --git a/ui/gl/gl_bindings_autogen_gl.h b/ui/gl/gl_bindings_autogen_gl.h index d077f3e..a895d6c 100644 --- a/ui/gl/gl_bindings_autogen_gl.h +++ b/ui/gl/gl_bindings_autogen_gl.h
@@ -1527,9 +1527,9 @@ GLint y, GLsizei width, GLsizei height); -typedef GLenum(GL_BINDING_CALL* glWaitSyncProc)(GLsync sync, - GLbitfield flags, - GLuint64 timeout); +typedef void(GL_BINDING_CALL* glWaitSyncProc)(GLsync sync, + GLbitfield flags, + GLuint64 timeout); struct ExtensionsGL { bool b_GL_ANGLE_framebuffer_blit; @@ -3360,9 +3360,9 @@ GLint y, GLsizei width, GLsizei height) = 0; - virtual GLenum glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) = 0; + virtual void glWaitSyncFn(GLsync sync, + GLbitfield flags, + GLuint64 timeout) = 0; }; } // namespace gl
diff --git a/ui/gl/gl_bindings_autogen_mock.cc b/ui/gl/gl_bindings_autogen_mock.cc index 616ac69..2fc21f9 100644 --- a/ui/gl/gl_bindings_autogen_mock.cc +++ b/ui/gl/gl_bindings_autogen_mock.cc
@@ -3940,11 +3940,11 @@ interface_->Viewport(x, y, width, height); } -GLenum GL_BINDING_CALL MockGLInterface::Mock_glWaitSync(GLsync sync, - GLbitfield flags, - GLuint64 timeout) { +void GL_BINDING_CALL MockGLInterface::Mock_glWaitSync(GLsync sync, + GLbitfield flags, + GLuint64 timeout) { MakeFunctionUnique("glWaitSync"); - return interface_->WaitSync(sync, flags, timeout); + interface_->WaitSync(sync, flags, timeout); } static void MockInvalidFunction() {
diff --git a/ui/gl/gl_bindings_autogen_mock.h b/ui/gl/gl_bindings_autogen_mock.h index 89ca6cd..0726b0e 100644 --- a/ui/gl/gl_bindings_autogen_mock.h +++ b/ui/gl/gl_bindings_autogen_mock.h
@@ -1687,6 +1687,6 @@ GLint y, GLsizei width, GLsizei height); -static GLenum GL_BINDING_CALL Mock_glWaitSync(GLsync sync, - GLbitfield flags, - GLuint64 timeout); +static void GL_BINDING_CALL Mock_glWaitSync(GLsync sync, + GLbitfield flags, + GLuint64 timeout);
diff --git a/ui/gl/gl_context_egl.cc b/ui/gl/gl_context_egl.cc index 2fbfe08..8a5638b 100644 --- a/ui/gl/gl_context_egl.cc +++ b/ui/gl/gl_context_egl.cc
@@ -154,7 +154,7 @@ } } - if (GLSurfaceEGL::HasEGLExtension("EGL_ANGLE_display_texture_share_group")) { + if (GLSurfaceEGL::IsDisplayTextureShareGroupSupported()) { context_attributes.push_back(EGL_DISPLAY_TEXTURE_SHARE_GROUP_ANGLE); context_attributes.push_back( attribs.global_texture_share_group ? EGL_TRUE : EGL_FALSE); @@ -162,7 +162,7 @@ DCHECK(!attribs.global_texture_share_group); } - if (GLSurfaceEGL::HasEGLExtension("EGL_ANGLE_create_context_client_arrays")) { + if (GLSurfaceEGL::IsCreateContextClientArraysSupported()) { // Disable client arrays if the context supports it context_attributes.push_back(EGL_CONTEXT_CLIENT_ARRAYS_ENABLED_ANGLE); context_attributes.push_back(EGL_FALSE);
diff --git a/ui/gl/gl_context_glx.cc b/ui/gl/gl_context_glx.cc index a4493a2..5475f4e 100644 --- a/ui/gl/gl_context_glx.cc +++ b/ui/gl/gl_context_glx.cc
@@ -172,16 +172,9 @@ if (GLSurfaceGLX::IsCreateContextSupported()) { DVLOG(1) << "GLX_ARB_create_context supported."; - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kCreateDefaultGLContext)) { - context_ = CreateContextAttribs( - display_, static_cast<GLXFBConfig>(compatible_surface->GetConfig()), - share_handle, GLVersion(0, 0), 0); - } else { - context_ = CreateHighestVersionContext( - display_, static_cast<GLXFBConfig>(compatible_surface->GetConfig()), - share_handle); - } + context_ = CreateHighestVersionContext( + display_, static_cast<GLXFBConfig>(compatible_surface->GetConfig()), + share_handle); if (!context_) { LOG(ERROR) << "Failed to create GL context with " << "glXCreateContextAttribsARB.";
diff --git a/ui/gl/gl_mock_autogen_gl.h b/ui/gl/gl_mock_autogen_gl.h index 60f96b0..381389a4 100644 --- a/ui/gl/gl_mock_autogen_gl.h +++ b/ui/gl/gl_mock_autogen_gl.h
@@ -1237,4 +1237,4 @@ GLsizei stride, const void* ptr)); MOCK_METHOD4(Viewport, void(GLint x, GLint y, GLsizei width, GLsizei height)); -MOCK_METHOD3(WaitSync, GLenum(GLsync sync, GLbitfield flags, GLuint64 timeout)); +MOCK_METHOD3(WaitSync, void(GLsync sync, GLbitfield flags, GLuint64 timeout));
diff --git a/ui/gl/gl_stub_api.cc b/ui/gl/gl_stub_api.cc index c7ce0ba6..e73f87a6 100644 --- a/ui/gl/gl_stub_api.cc +++ b/ui/gl/gl_stub_api.cc
@@ -336,10 +336,4 @@ return GL_TRUE; } -GLenum GLStubApi::glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) { - return GL_TRUE; -} - } // namespace gl
diff --git a/ui/gl/gl_stub_api.h b/ui/gl/gl_stub_api.h index 4c9f8ad..01bd331 100644 --- a/ui/gl/gl_stub_api.h +++ b/ui/gl/gl_stub_api.h
@@ -70,9 +70,6 @@ GLboolean glTestFenceAPPLEFn(GLuint fence) override; GLboolean glTestFenceNVFn(GLuint fence) override; GLboolean glUnmapBufferFn(GLenum target) override; - GLenum glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) override; private: std::string version_;
diff --git a/ui/gl/gl_stub_autogen_gl.cc b/ui/gl/gl_stub_autogen_gl.cc index 95f66430..e30dbfd 100644 --- a/ui/gl/gl_stub_autogen_gl.cc +++ b/ui/gl/gl_stub_autogen_gl.cc
@@ -164,10 +164,4 @@ return 0; } -GLenum GLStubApiBase::glWaitSyncFn(GLsync sync, - GLbitfield flags, - GLuint64 timeout) { - return 0; -} - } // namespace gl
diff --git a/ui/gl/gl_stub_autogen_gl.h b/ui/gl/gl_stub_autogen_gl.h index e14d946a..6c3bc361 100644 --- a/ui/gl/gl_stub_autogen_gl.h +++ b/ui/gl/gl_stub_autogen_gl.h
@@ -1292,4 +1292,4 @@ GLsizei stride, const void* ptr) override {} void glViewportFn(GLint x, GLint y, GLsizei width, GLsizei height) override {} -GLenum glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) override; +void glWaitSyncFn(GLsync sync, GLbitfield flags, GLuint64 timeout) override {}
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc index b3752d7b..17c46a6 100644 --- a/ui/gl/gl_surface_egl.cc +++ b/ui/gl/gl_surface_egl.cc
@@ -144,6 +144,9 @@ bool g_egl_khr_colorspace = false; bool g_egl_ext_colorspace_display_p3 = false; bool g_use_direct_composition = false; +bool g_egl_robust_resource_init_supported = false; +bool g_egl_display_texture_share_group_supported = false; +bool g_egl_create_context_client_arrays_supported = false; class EGLSyncControlVSyncProvider : public SyncControlVSyncProvider { public: @@ -575,6 +578,11 @@ !base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableDirectComposition); + g_egl_display_texture_share_group_supported = + HasEGLExtension("EGL_ANGLE_display_texture_share_group"); + g_egl_create_context_client_arrays_supported = + HasEGLExtension("EGL_ANGLE_create_context_client_arrays"); + // TODO(oetuaho@nvidia.com): Surfaceless is disabled on Android as a temporary // workaround, since code written for Android WebView takes different paths // based on whether GL surface objects have underlying EGL surface handles, @@ -635,6 +643,9 @@ g_egl_surface_orientation_supported = false; g_use_direct_composition = false; g_egl_surfaceless_context_supported = false; + g_egl_robust_resource_init_supported = false; + g_egl_display_texture_share_group_supported = false; + g_egl_create_context_client_arrays_supported = false; initialized_ = false; } @@ -687,6 +698,18 @@ return g_use_direct_composition; } +bool GLSurfaceEGL::IsRobustResourceInitSupported() { + return g_egl_robust_resource_init_supported; +} + +bool GLSurfaceEGL::IsDisplayTextureShareGroupSupported() { + return g_egl_display_texture_share_group_supported; +} + +bool GLSurfaceEGL::IsCreateContextClientArraysSupported() { + return g_egl_create_context_client_arrays_supported; +} + GLSurfaceEGL::~GLSurfaceEGL() {} // InitializeDisplay is necessary because the static binding code @@ -719,12 +742,12 @@ ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_null"); } - bool supports_robust_resource_init = + g_egl_robust_resource_init_supported = client_extensions && ExtensionsContain(client_extensions, "EGL_ANGLE_display_robust_resource_initialization"); bool use_robust_resource_init = - supports_robust_resource_init && + g_egl_robust_resource_init_supported && UsePassthroughCommandDecoder(base::CommandLine::ForCurrentProcess()); std::vector<DisplayType> init_displays;
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h index 13ae8378..042bf07 100644 --- a/ui/gl/gl_surface_egl.h +++ b/ui/gl/gl_surface_egl.h
@@ -75,6 +75,9 @@ static bool IsEGLSurfacelessContextSupported(); static bool IsEGLContextPrioritySupported(); static bool IsDirectCompositionSupported(); + static bool IsRobustResourceInitSupported(); + static bool IsDisplayTextureShareGroupSupported(); + static bool IsCreateContextClientArraysSupported(); protected: ~GLSurfaceEGL() override;
diff --git a/ui/gl/gl_switches.cc b/ui/gl/gl_switches.cc index 7fe2566..f34a0b7 100644 --- a/ui/gl/gl_switches.cc +++ b/ui/gl/gl_switches.cc
@@ -28,10 +28,6 @@ namespace switches { -// Ask the GLX driver for the default context instead of trying to get the -// highest version possible. -const char kCreateDefaultGLContext[] = "create-default-gl-context"; - // Disables use of D3D11. const char kDisableD3D11[] = "disable-d3d11"; @@ -129,6 +125,7 @@ const char* const kGLSwitchesCopiedFromGpuProcessHost[] = { kDisableGpuVsync, kDisableD3D11, + kDisableES3GLContext, kEnableGPUServiceLogging, kEnableGPUServiceTracing, kEnableSgiVideoSync, @@ -136,7 +133,6 @@ kDisableGLDrawingForTests, kOverrideUseSoftwareGLForTests, kUseANGLE, - kDisableDirectComposition, kEnableSwapBuffersWithBounds, kEnableDirectCompositionLayers, kDisableDirectCompositionLayers,
diff --git a/ui/gl/gl_switches.h b/ui/gl/gl_switches.h index 0d6255a..75a8a24e 100644 --- a/ui/gl/gl_switches.h +++ b/ui/gl/gl_switches.h
@@ -34,7 +34,6 @@ namespace switches { -GL_EXPORT extern const char kCreateDefaultGLContext[]; GL_EXPORT extern const char kDisableD3D11[]; GL_EXPORT extern const char kDisableES3GLContext[]; GL_EXPORT extern const char kDisableGpuVsync[];
diff --git a/ui/message_center/notification.h b/ui/message_center/notification.h index 9d3198ad..6ed727be 100644 --- a/ui/message_center/notification.h +++ b/ui/message_center/notification.h
@@ -108,9 +108,19 @@ // notification. Optional. gfx::Image small_image; - // Vector version of |small_image|. Used by Notification::GetMaskedSmallIcon. + // Vector version of |small_image|. + // Used by Notification::GenerateMaskedSmallIcon. // If not available, |small_image| will be used by the method. Optional. - gfx::VectorIcon vector_small_image = gfx::kNoneIcon; + // + // Due to the restriction of CreateVectorIcon, this should be a pointer to + // globally defined VectorIcon instance e.g. kNotificationCapsLockIcon. + // gfx::Image created by gfx::CreateVectorIcon internally stores reference to + // VectorIcon, so the VectorIcon should live longer than gfx::Image instance. + // As a temporary solution to this problem, we make this variable a pointer + // and only pass globally defined constants. + // TODO(tetsui): Remove the pointer, after fixing VectorIconSource not to + // retain VectorIcon reference. https://crbug.com/760866 + const gfx::VectorIcon* vector_small_image = &gfx::kNoneIcon; // Items to display on the notification. Only applicable for notifications // that have type NOTIFICATION_TYPE_MULTIPLE. @@ -323,10 +333,13 @@ } const gfx::VectorIcon& vector_small_image() const { - return optional_fields_.vector_small_image; + return *optional_fields_.vector_small_image; } + // Due to the restriction of CreateVectorIcon, this should be a pointer to + // globally defined VectorIcon instance e.g. kNotificationCapsLockIcon. + // See detailed comment in RichNotificationData::vector_small_image. void set_vector_small_image(const gfx::VectorIcon& image) { - optional_fields_.vector_small_image = image; + optional_fields_.vector_small_image = ℑ } // Mask the color of |small_image| to the given |color|.
diff --git a/ui/message_center/views/message_center_button_bar.cc b/ui/message_center/views/message_center_button_bar.cc index 95500a5..116d3b84 100644 --- a/ui/message_center/views/message_center_button_bar.cc +++ b/ui/message_center/views/message_center_button_bar.cc
@@ -159,8 +159,7 @@ } void MessageCenterButtonBar::ViewVisibilityChanged() { - views::GridLayout* layout = new views::GridLayout(this); - SetLayoutManager(layout); + views::GridLayout* layout = views::GridLayout::CreateAndInstall(this); views::ColumnSet* column = layout->AddColumnSet(0); constexpr int kFooterLeftMargin = 4; column->AddPaddingColumn(0, kFooterLeftMargin);
diff --git a/ui/message_center/views/message_popup_collection.cc b/ui/message_center/views/message_popup_collection.cc index e95c33b..5695d1b 100644 --- a/ui/message_center/views/message_popup_collection.cc +++ b/ui/message_center/views/message_popup_collection.cc
@@ -201,6 +201,7 @@ // Disable pinned feature since this is a popup. view->set_force_disable_pinned(); #endif // defined(OS_CHROMEOS) + view->SetExpanded(true); // TODO(yoshiki): Temporary disable context menu on custom notifications. // See crbug.com/750307 for detail.
diff --git a/ui/message_center/views/message_view.cc b/ui/message_center/views/message_view.cc index 7809ff3f..be708d9 100644 --- a/ui/message_center/views/message_view.cc +++ b/ui/message_center/views/message_view.cc
@@ -113,6 +113,15 @@ -gfx::ShadowValue::GetMargin(shadow.values))); } +void MessageView::SetExpanded(bool expanded) { + // Not implemented by default. +} + +bool MessageView::IsExpanded() const { + // Not implemented by default. + return false; +} + void MessageView::GetAccessibleNodeData(ui::AXNodeData* node_data) { node_data->role = ui::AX_ROLE_BUTTON; node_data->AddStringAttribute(
diff --git a/ui/message_center/views/message_view.h b/ui/message_center/views/message_view.h index 19a9107..e6aeacd 100644 --- a/ui/message_center/views/message_view.h +++ b/ui/message_center/views/message_view.h
@@ -55,6 +55,9 @@ virtual void RequestFocusOnCloseButton() = 0; virtual void UpdateControlButtonsVisibility() = 0; + virtual void SetExpanded(bool expanded); + virtual bool IsExpanded() const; + void OnCloseButtonPressed(); void OnSettingsButtonPressed();
diff --git a/ui/message_center/views/notification_view_md.cc b/ui/message_center/views/notification_view_md.cc index f8ded7a..69e15176 100644 --- a/ui/message_center/views/notification_view_md.cc +++ b/ui/message_center/views/notification_view_md.cc
@@ -884,11 +884,7 @@ } void NotificationViewMD::ToggleExpanded() { - expanded_ = !expanded_; - UpdateViewForExpandedState(expanded_); - content_row_->InvalidateLayout(); - if (controller()) - controller()->UpdateNotificationSize(notification_id()); + SetExpanded(!expanded_); } void NotificationViewMD::UpdateViewForExpandedState(bool expanded) { @@ -945,4 +941,19 @@ return control_buttons_view_.get(); } +bool NotificationViewMD::IsExpanded() const { + return expanded_; +} + +void NotificationViewMD::SetExpanded(bool expanded) { + if (expanded_ == expanded) + return; + expanded_ = expanded; + + UpdateViewForExpandedState(expanded_); + content_row_->InvalidateLayout(); + if (controller()) + controller()->UpdateNotificationSize(notification_id()); +} + } // namespace message_center
diff --git a/ui/message_center/views/notification_view_md.h b/ui/message_center/views/notification_view_md.h index 1a029ec..51f8f72 100644 --- a/ui/message_center/views/notification_view_md.h +++ b/ui/message_center/views/notification_view_md.h
@@ -82,6 +82,8 @@ void RequestFocusOnCloseButton() override; void UpdateControlButtonsVisibility() override; NotificationControlButtonsView* GetControlButtonsView() const override; + bool IsExpanded() const override; + void SetExpanded(bool expanded) override; // views::ViewTargeterDelegate: views::View* TargetForRect(views::View* root, const gfx::Rect& rect) override;
diff --git a/ui/message_center/views/notifier_settings_view.cc b/ui/message_center/views/notifier_settings_view.cc index 639c334..f527556 100644 --- a/ui/message_center/views/notifier_settings_view.cc +++ b/ui/message_center/views/notifier_settings_view.cc
@@ -362,8 +362,7 @@ using views::ColumnSet; using views::GridLayout; - GridLayout* layout = new GridLayout(this); - SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(this); ColumnSet* cs = layout->AddColumnSet(0); // Add a column for the checkbox. cs->AddPaddingColumn(0, kInnateCheckboxRightPadding);
diff --git a/ui/native_theme/common_theme.cc b/ui/native_theme/common_theme.cc index 96c81702..d299f91d 100644 --- a/ui/native_theme/common_theme.cc +++ b/ui/native_theme/common_theme.cc
@@ -35,7 +35,7 @@ // FocusableBorder case NativeTheme::kColorId_UnfocusedBorderColor: - return SkColorSetA(SK_ColorBLACK, 0x33); + return SkColorSetA(SK_ColorBLACK, 0x4e); // Textfields case NativeTheme::kColorId_TextfieldDefaultColor:
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc index 3340f37..649f3b2 100644 --- a/ui/native_theme/native_theme_win.cc +++ b/ui/native_theme/native_theme_win.cc
@@ -457,8 +457,12 @@ // FocusableBorder case kColorId_FocusedBorderColor: + if (ui::MaterialDesignController::IsSecondaryUiMaterial()) + break; return kFocusedBorderColor; case kColorId_UnfocusedBorderColor: + if (ui::MaterialDesignController::IsSecondaryUiMaterial()) + break; return kUnfocusedBorderColor; // Button
diff --git a/ui/ozone/platform/cast/DEPS b/ui/ozone/platform/cast/DEPS index a967e61a..ffc9eafa 100644 --- a/ui/ozone/platform/cast/DEPS +++ b/ui/ozone/platform/cast/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+chromecast/base/cast_features.h", "+chromecast/base/chromecast_switches.h", "+chromecast/chromecast_features.h", "+chromecast/public"
diff --git a/ui/ozone/platform/cast/gl_surface_cast.cc b/ui/ozone/platform/cast/gl_surface_cast.cc index 9dbd096..28822a3 100644 --- a/ui/ozone/platform/cast/gl_surface_cast.cc +++ b/ui/ozone/platform/cast/gl_surface_cast.cc
@@ -4,16 +4,25 @@ #include "ui/ozone/platform/cast/gl_surface_cast.h" +#include "base/feature_list.h" #include "base/memory/ptr_util.h" +#include "chromecast/base/cast_features.h" #include "ui/gfx/vsync_provider.h" #include "ui/ozone/common/egl_util.h" #include "ui/ozone/platform/cast/gl_ozone_egl_cast.h" namespace { -// Target fixed 30fps. +// Target fixed 30fps, or 60fps if doing triple-buffer 720p. // TODO(halliwell): We might need to customize this value on various devices // or make it dynamic that throttles framerate if device is overheating. -const base::TimeDelta kVSyncInterval = base::TimeDelta::FromSeconds(2) / 59.9; +base::TimeDelta GetVSyncInterval() { + if (base::FeatureList::IsEnabled(chromecast::kTripleBuffer720)) { + return base::TimeDelta::FromSeconds(1) / 59.9; + } else { + return base::TimeDelta::FromSeconds(2) / 59.9; + } +} + } // namespace namespace ui { @@ -23,7 +32,7 @@ : NativeViewGLSurfaceEGL( parent->GetNativeWindow(), base::MakeUnique<gfx::FixedVSyncProvider>(base::TimeTicks(), - kVSyncInterval)), + GetVSyncInterval())), widget_(widget), parent_(parent), supports_swap_buffer_with_bounds_(
diff --git a/ui/views/bubble/bubble_dialog_delegate_unittest.cc b/ui/views/bubble/bubble_dialog_delegate_unittest.cc index a6c2b175..f556302 100644 --- a/ui/views/bubble/bubble_dialog_delegate_unittest.cc +++ b/ui/views/bubble/bubble_dialog_delegate_unittest.cc
@@ -19,18 +19,19 @@ #include "ui/views/test/views_test_base.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_observer.h" +#include "ui/views/window/dialog_client_view.h" namespace views { namespace { +constexpr int kContentHeight = 200; +constexpr int kContentWidth = 200; + class TestBubbleDialogDelegateView : public BubbleDialogDelegateView { public: TestBubbleDialogDelegateView(View* anchor_view) - : BubbleDialogDelegateView(anchor_view, BubbleBorder::TOP_LEFT), - view_(new View()), - title_view_(nullptr), - should_show_close_button_(false) { + : BubbleDialogDelegateView(anchor_view, BubbleBorder::TOP_LEFT) { view_->SetFocusBehavior(FocusBehavior::ALWAYS); AddChildView(view_); } @@ -39,7 +40,7 @@ // BubbleDialogDelegateView overrides: View* GetInitiallyFocusedView() override { return view_; } gfx::Size CalculatePreferredSize() const override { - return gfx::Size(200, 200); + return gfx::Size(kContentWidth, kContentHeight); } void AddedToWidget() override { if (title_view_) @@ -50,21 +51,36 @@ return base::ASCIIToUTF16("TITLE TITLE TITLE"); } + bool ShouldShowWindowTitle() const override { + return should_show_window_title_; + } + bool ShouldShowCloseButton() const override { return should_show_close_button_; } + int GetDialogButtons() const override { return buttons_; } + void set_title_view(View* title_view) { title_view_.reset(title_view); } void show_close_button() { should_show_close_button_ = true; } + void hide_buttons() { + should_show_close_button_ = false; + buttons_ = ui::DIALOG_BUTTON_NONE; + } + void set_should_show_window_title(bool should_show_window_title) { + should_show_window_title_ = should_show_window_title; + } using BubbleDialogDelegateView::SetAnchorRect; using BubbleDialogDelegateView::GetBubbleFrameView; using BubbleDialogDelegateView::SizeToContents; private: - View* view_; + View* view_ = new View; std::unique_ptr<View> title_view_; - bool should_show_close_button_; + int buttons_ = ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL; + bool should_show_close_button_ = false; + bool should_show_window_title_ = true; DISALLOW_COPY_AND_ASSIGN(TestBubbleDialogDelegateView); }; @@ -360,8 +376,8 @@ std::unique_ptr<Widget> anchor_widget(CreateTestWidget()); TestBubbleDialogDelegateView* bubble_delegate = new TestBubbleDialogDelegateView(anchor_widget->GetContentsView()); - constexpr int kTitlePreferredHeight = 20; - View* title_view = new StaticSizedView(gfx::Size(10, kTitlePreferredHeight)); + constexpr int kTitleHeight = 20; + View* title_view = new StaticSizedView(gfx::Size(10, kTitleHeight)); bubble_delegate->set_title_view(title_view); Widget* bubble_widget = BubbleDialogDelegateView::CreateBubble(bubble_delegate); @@ -373,7 +389,7 @@ EXPECT_EQ(bubble_frame, title_view->parent()); // Title takes up the whole bubble width when there's no icon or close button. EXPECT_EQ(bubble_delegate->width(), title_view->size().width()); - EXPECT_EQ(kTitlePreferredHeight, title_view->size().height()); + EXPECT_EQ(kTitleHeight, title_view->size().height()); bubble_delegate->show_close_button(); bubble_frame->ResetWindowControls(); @@ -384,6 +400,50 @@ EXPECT_EQ(close_button->x() - LayoutProvider::Get()->GetDistanceMetric( DISTANCE_CLOSE_BUTTON_MARGIN), title_view->bounds().right()); + + LayoutProvider* provider = LayoutProvider::Get(); + const gfx::Insets content_margins = + provider->GetInsetsMetric(INSETS_DIALOG_CONTENTS); + const gfx::Insets title_margins = + provider->GetInsetsMetric(INSETS_DIALOG_TITLE); + EXPECT_EQ(content_margins, bubble_delegate->margins()); + // Note there is no title_margins() accessor (it should not be customizable). + + // To perform checks on the precise size, first hide the dialog buttons so the + // calculations are simpler (e.g. platform font discrepancies can be ignored). + DialogClientView* client_view = + static_cast<DialogClientView*>(bubble_widget->client_view()); + bubble_delegate->hide_buttons(); + bubble_frame->ResetWindowControls(); + client_view->UpdateDialogButtons(); + bubble_delegate->SizeToContents(); + + // Use GetContentsBounds() to exclude the bubble border, which can change per + // platform. + gfx::Rect frame_size = bubble_frame->GetContentsBounds(); + EXPECT_EQ(content_margins.height() + kContentHeight + title_margins.height() + + kTitleHeight, + frame_size.height()); + EXPECT_EQ(content_margins.width() + kContentWidth, frame_size.width()); + + // Set the title preferred size to 0. The bubble frame makes fewer assumptions + // about custom title views, so there should still be margins for it while the + // WidgetDelegate says it should be shown, even if its preferred size is zero. + title_view->SetPreferredSize(gfx::Size()); + bubble_widget->UpdateWindowTitle(); + bubble_delegate->SizeToContents(); + frame_size = bubble_frame->GetContentsBounds(); + EXPECT_EQ(content_margins.height() + kContentHeight + title_margins.height(), + frame_size.height()); + EXPECT_EQ(content_margins.width() + kContentWidth, frame_size.width()); + + // Now hide the title properly. The margins should also disappear. + bubble_delegate->set_should_show_window_title(false); + bubble_widget->UpdateWindowTitle(); + bubble_delegate->SizeToContents(); + frame_size = bubble_frame->GetContentsBounds(); + EXPECT_EQ(content_margins.height() + kContentHeight, frame_size.height()); + EXPECT_EQ(content_margins.width() + kContentWidth, frame_size.width()); } // Ensure the BubbleFrameView correctly resizes when the title is provided by a
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc index ec09f7b1..302bce5 100644 --- a/ui/views/bubble/bubble_frame_view.cc +++ b/ui/views/bubble/bubble_frame_view.cc
@@ -606,8 +606,10 @@ } bool BubbleFrameView::HasTitle() const { - return custom_title_ != nullptr || - default_title_->GetPreferredSize().height() > 0 || + return (custom_title_ != nullptr && + GetWidget()->widget_delegate()->ShouldShowWindowTitle()) || + (default_title_ != nullptr && + default_title_->GetPreferredSize().height() > 0) || title_icon_->GetPreferredSize().height() > 0; }
diff --git a/ui/views/color_chooser/color_chooser_view.cc b/ui/views/color_chooser/color_chooser_view.cc index df8d0cf..531e121 100644 --- a/ui/views/color_chooser/color_chooser_view.cc +++ b/ui/views/color_chooser/color_chooser_view.cc
@@ -377,8 +377,7 @@ AddChildView(container); View* container2 = new View(); - GridLayout* layout = new GridLayout(container2); - container2->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container2); ColumnSet* columns = layout->AddColumnSet(0); columns->AddColumn( GridLayout::LEADING, GridLayout::FILL, 0, GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc index cba9fbd6..14dc8b3 100644 --- a/ui/views/controls/button/checkbox.cc +++ b/ui/views/controls/button/checkbox.cc
@@ -23,6 +23,7 @@ #include "ui/views/painter.h" #include "ui/views/resources/grit/views_resources.h" #include "ui/views/style/platform_style.h" +#include "ui/views/style/typography.h" #include "ui/views/vector_icons.h" namespace views { @@ -207,18 +208,15 @@ } SkColor Checkbox::GetInkDropBaseColor() const { - return GetNativeTheme()->GetSystemColor( - ui::NativeTheme::kColorId_LabelEnabledColor); + // Usually ink drop ripples match the text color. Checkboxes use the color of + // the unchecked icon. + return GetIconImageColor(false); } gfx::ImageSkia Checkbox::GetImage(ButtonState for_state) const { if (UseMd()) { - return gfx::CreateVectorIcon( - GetVectorIcon(), 16, - // When not checked, the icon color matches the button text color. - GetNativeTheme()->GetSystemColor( - checked_ ? ui::NativeTheme::kColorId_FocusedBorderColor - : ui::NativeTheme::kColorId_LabelEnabledColor)); + return gfx::CreateVectorIcon(GetVectorIcon(), 16, + GetIconImageColor(checked_)); } const size_t checked_index = checked_ ? 1 : 0; @@ -259,6 +257,17 @@ return checked() ? kCheckboxActiveIcon : kCheckboxNormalIcon; } +SkColor Checkbox::GetIconImageColor(bool checked) const { + DCHECK(UseMd()); + const ui::NativeTheme* theme = GetNativeTheme(); + return checked + ? theme->GetSystemColor( + ui::NativeTheme::kColorId_FocusedBorderColor) + // When unchecked, the icon color matches push button text color. + : style::GetColor(style::CONTEXT_BUTTON_MD, style::STYLE_PRIMARY, + theme); +} + void Checkbox::NotifyClick(const ui::Event& event) { SetChecked(!checked()); LabelButton::NotifyClick(event);
diff --git a/ui/views/controls/button/checkbox.h b/ui/views/controls/button/checkbox.h index deb26a2..d260a86 100644 --- a/ui/views/controls/button/checkbox.h +++ b/ui/views/controls/button/checkbox.h
@@ -70,6 +70,8 @@ private: friend class IconFocusRing; + SkColor GetIconImageColor(bool checked) const; + // Button: void NotifyClick(const ui::Event& event) override;
diff --git a/ui/views/controls/message_box_view.cc b/ui/views/controls/message_box_view.cc index 2445444..af7b8062 100644 --- a/ui/views/controls/message_box_view.cc +++ b/ui/views/controls/message_box_view.cc
@@ -14,6 +14,7 @@ #include "ui/base/clipboard/clipboard.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/gfx/geometry/insets.h" +#include "ui/views/border.h" #include "ui/views/controls/button/checkbox.h" #include "ui/views/controls/label.h" #include "ui/views/controls/link.h" @@ -178,6 +179,9 @@ // MessageBoxView, private: void MessageBoxView::Init(const InitParams& params) { + SetBorder(CreateEmptyBorder( + LayoutProvider::Get()->GetInsetsMetric(INSETS_DIALOG_CONTENTS))); + if (params.options & DETECT_DIRECTIONALITY) { std::vector<base::string16> texts; SplitStringIntoParagraphs(params.message, &texts); @@ -213,8 +217,7 @@ void MessageBoxView::ResetLayoutManager() { // Initialize the Grid Layout Manager used for this dialog box. - GridLayout* layout = GridLayout::CreatePanel(this); - SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(this); // Add the column set for the message displayed at the top of the dialog box. const int message_column_view_set_id = 0;
diff --git a/ui/views/examples/button_sticker_sheet.cc b/ui/views/examples/button_sticker_sheet.cc index 9b32de4f..eb804408 100644 --- a/ui/views/examples/button_sticker_sheet.cc +++ b/ui/views/examples/button_sticker_sheet.cc
@@ -31,7 +31,7 @@ const GridLayout::SizeType kColumnUsesFixedSize = GridLayout::FIXED; const int kColumnWidth = 96; - GridLayout* layout = new GridLayout(host); + GridLayout* layout = GridLayout::CreateAndInstall(host); ColumnSet* columns = layout->AddColumnSet(kStretchyGridColumnSetId); for (int i = 0; i < ncols; ++i) { if (i != 0) @@ -89,7 +89,6 @@ void ButtonStickerSheet::CreateExampleView(View* container) { GridLayout* layout = MakeStretchyGridLayout(container, 3); - container->SetLayoutManager(layout); if (!ui::MaterialDesignController::IsSecondaryUiMaterial()) { const char* kNeedsMdWarning =
diff --git a/ui/views/examples/dialog_example.cc b/ui/views/examples/dialog_example.cc index 2318b01..f5f348f 100644 --- a/ui/views/examples/dialog_example.cc +++ b/ui/views/examples/dialog_example.cc
@@ -133,8 +133,7 @@ views::LayoutProvider* provider = views::LayoutProvider::Get(); const int horizontal_spacing = provider->GetDistanceMetric(views::DISTANCE_RELATED_BUTTON_HORIZONTAL); - GridLayout* layout = GridLayout::CreatePanel(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); ColumnSet* column_set = layout->AddColumnSet(kFieldsColumnId); column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, kFixed, GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/examples/examples_window.cc b/ui/views/examples/examples_window.cc index ae5e2ab..a81925f 100644 --- a/ui/views/examples/examples_window.cc +++ b/ui/views/examples/examples_window.cc
@@ -143,8 +143,7 @@ combobox_->ModelChanged(); SetBackground(CreateStandardPanelBackground()); - GridLayout* layout = new GridLayout(this); - SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(this); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddPaddingColumn(0, 5); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
diff --git a/ui/views/examples/label_example.cc b/ui/views/examples/label_example.cc index 3244135..dbc8932 100644 --- a/ui/views/examples/label_example.cc +++ b/ui/views/examples/label_example.cc
@@ -163,8 +163,7 @@ View* control_container = new View(); control_container->SetBorder(CreateSolidBorder(2, SK_ColorGRAY)); control_container->SetBackground(CreateSolidBackground(SK_ColorLTGRAY)); - GridLayout* layout = GridLayout::CreatePanel(control_container); - control_container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(control_container); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
diff --git a/ui/views/examples/message_box_example.cc b/ui/views/examples/message_box_example.cc index cb9e924..3327ff9 100644 --- a/ui/views/examples/message_box_example.cc +++ b/ui/views/examples/message_box_example.cc
@@ -27,8 +27,7 @@ status_ = new LabelButton(this, ASCIIToUTF16("Show Status")); toggle_ = new LabelButton(this, ASCIIToUTF16("Toggle Checkbox")); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); message_box_view_->SetCheckBoxLabel(ASCIIToUTF16("Check Box"));
diff --git a/ui/views/examples/multiline_example.cc b/ui/views/examples/multiline_example.cc index c92800f..e4d2461 100644 --- a/ui/views/examples/multiline_example.cc +++ b/ui/views/examples/multiline_example.cc
@@ -159,8 +159,7 @@ textfield_->set_controller(this); textfield_->SetText(kTestString); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
diff --git a/ui/views/examples/progress_bar_example.cc b/ui/views/examples/progress_bar_example.cc index 4cb75a15..c9d82665 100644 --- a/ui/views/examples/progress_bar_example.cc +++ b/ui/views/examples/progress_bar_example.cc
@@ -36,8 +36,7 @@ } void ProgressBarExample::CreateExampleView(View* container) { - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
diff --git a/ui/views/examples/radio_button_example.cc b/ui/views/examples/radio_button_example.cc index 38072ef4..e0daa38f 100644 --- a/ui/views/examples/radio_button_example.cc +++ b/ui/views/examples/radio_button_example.cc
@@ -38,8 +38,7 @@ radio_buttons_[i]->set_listener(this); } - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::FILL, GridLayout::FILL,
diff --git a/ui/views/examples/scroll_view_example.cc b/ui/views/examples/scroll_view_example.cc index 39ffd8fb..ef6ff41 100644 --- a/ui/views/examples/scroll_view_example.cc +++ b/ui/views/examples/scroll_view_example.cc
@@ -87,8 +87,7 @@ scrollable_->SetBounds(0, 0, 1000, 100); scrollable_->SetColor(SK_ColorYELLOW, SK_ColorCYAN); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); // Add scroll view. ColumnSet* column_set = layout->AddColumnSet(0);
diff --git a/ui/views/examples/tabbed_pane_example.cc b/ui/views/examples/tabbed_pane_example.cc index 524fec6c9..2623c10b 100644 --- a/ui/views/examples/tabbed_pane_example.cc +++ b/ui/views/examples/tabbed_pane_example.cc
@@ -27,8 +27,7 @@ add_at_ = new LabelButton(this, ASCIIToUTF16("Add At 1")); select_at_ = new LabelButton(this, ASCIIToUTF16("Select At 1")); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); const int tabbed_pane_column = 0; ColumnSet* column_set = layout->AddColumnSet(tabbed_pane_column);
diff --git a/ui/views/examples/table_example.cc b/ui/views/examples/table_example.cc index 041270a..f3bd426 100644 --- a/ui/views/examples/table_example.cc +++ b/ui/views/examples/table_example.cc
@@ -58,8 +58,7 @@ column4_visible_checkbox_->SetChecked(true); column4_visible_checkbox_->set_listener(this); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); std::vector<ui::TableColumn> columns; columns.push_back(TestTableColumn(0, "Fruit"));
diff --git a/ui/views/examples/text_example.cc b/ui/views/examples/text_example.cc index 6869b076..37b1ef11 100644 --- a/ui/views/examples/text_example.cc +++ b/ui/views/examples/text_example.cc
@@ -160,8 +160,7 @@ void TextExample::CreateExampleView(View* container) { text_view_ = new TextExampleView; text_view_->SetBorder(CreateSolidBorder(1, SK_ColorGRAY)); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); layout->AddPaddingRow(0, 8); ColumnSet* column_set = layout->AddColumnSet(0);
diff --git a/ui/views/examples/textfield_example.cc b/ui/views/examples/textfield_example.cc index 6f3c5f2..e166ac0 100644 --- a/ui/views/examples/textfield_example.cc +++ b/ui/views/examples/textfield_example.cc
@@ -61,8 +61,7 @@ name_->set_controller(this); password_->set_controller(this); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); ColumnSet* column_set = layout->AddColumnSet(0); column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
diff --git a/ui/views/examples/tree_view_example.cc b/ui/views/examples/tree_view_example.cc index 8e0f6a1..4ecdd6d3 100644 --- a/ui/views/examples/tree_view_example.cc +++ b/ui/views/examples/tree_view_example.cc
@@ -54,8 +54,7 @@ change_title_->SetFocusForPlatform(); change_title_->set_request_focus_on_press(true); - GridLayout* layout = new GridLayout(container); - container->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(container); const int tree_view_column = 0; ColumnSet* column_set = layout->AddColumnSet(tree_view_column);
diff --git a/ui/views/layout/grid_layout.cc b/ui/views/layout/grid_layout.cc index eff6527..0775b73 100644 --- a/ui/views/layout/grid_layout.cc +++ b/ui/views/layout/grid_layout.cc
@@ -632,29 +632,16 @@ // GridLayout ------------------------------------------------------------- -GridLayout::GridLayout(View* host) - : host_(host), - calculated_master_columns_(false), - remaining_row_span_(0), - current_row_(-1), - next_column_(0), - current_row_col_set_(nullptr), - adding_view_(false) { - DCHECK(host); +// static +GridLayout* GridLayout::CreateAndInstall(View* host) { + GridLayout* result = new GridLayout(host); + host->SetLayoutManager(result); + return result; } GridLayout::~GridLayout() { } -// static -GridLayout* GridLayout::CreatePanel(View* host) { - GridLayout* layout = new GridLayout(host); - host->SetBorder(CreateEmptyBorder( - LayoutProvider::Get()->GetInsetsMetric(INSETS_DIALOG_CONTENTS))); - host->SetLayoutManager(layout); - return layout; -} - ColumnSet* GridLayout::AddColumnSet(int id) { DCHECK(GetColumnSet(id) == nullptr); column_sets_.push_back(base::WrapUnique(new ColumnSet(id))); @@ -810,6 +797,17 @@ return pref.height(); } +GridLayout::GridLayout(View* host) + : host_(host), + calculated_master_columns_(false), + remaining_row_span_(0), + current_row_(-1), + next_column_(0), + current_row_col_set_(nullptr), + adding_view_(false) { + DCHECK(host); +} + void GridLayout::SizeRowsAndColumns(bool layout, int width, int height, gfx::Size* pref) const { // Protect against clients asking for metrics during the addition of a View.
diff --git a/ui/views/layout/grid_layout.h b/ui/views/layout/grid_layout.h index 66d9f65a..a2521d4 100644 --- a/ui/views/layout/grid_layout.h +++ b/ui/views/layout/grid_layout.h
@@ -100,12 +100,10 @@ USE_PREF }; - explicit GridLayout(View* host); - ~GridLayout() override; + // Creates a new GridLayout and installs it as the LayoutManager for |host|. + static GridLayout* CreateAndInstall(View* host); - // Creates a GridLayout, assigns it as the LayoutManager of |host|, and gives - // it a INSETS_PANEL-sized padding border. - static GridLayout* CreatePanel(View* host); + ~GridLayout() override; // Creates a new column set with the specified id and returns it. // The id is later used when starting a new row. @@ -180,6 +178,8 @@ void set_minimum_size(const gfx::Size& size) { minimum_size_ = size; } private: + explicit GridLayout(View* host); + // As both Layout and GetPreferredSize need to do nearly the same thing, // they both call into this method. This sizes the Columns/Rows as // appropriate. If layout is true, width/height give the width/height the
diff --git a/ui/views/layout/grid_layout_unittest.cc b/ui/views/layout/grid_layout_unittest.cc index ac58f08e..686eefb 100644 --- a/ui/views/layout/grid_layout_unittest.cc +++ b/ui/views/layout/grid_layout_unittest.cc
@@ -78,50 +78,54 @@ class GridLayoutTest : public testing::Test { public: - GridLayoutTest() : layout(&host) {} + GridLayoutTest() : layout_(GridLayout::CreateAndInstall(&host_)) {} void RemoveAll() { - for (int i = host.child_count() - 1; i >= 0; i--) - host.RemoveChildView(host.child_at(i)); + for (int i = host_.child_count() - 1; i >= 0; i--) + host_.RemoveChildView(host_.child_at(i)); } - void GetPreferredSize() { - pref = layout.GetPreferredSize(&host); - } + gfx::Size GetPreferredSize() { return layout_->GetPreferredSize(&host_); } - gfx::Size pref; - gfx::Rect bounds; - View host; - GridLayout layout; + View& host() { return host_; } + GridLayout* layout() { return layout_; } + + private: + View host_; + GridLayout* layout_; }; class GridLayoutAlignmentTest : public testing::Test { public: - GridLayoutAlignmentTest() : layout(&host) { - v1.SetPreferredSize(gfx::Size(10, 20)); + GridLayoutAlignmentTest() : layout_(GridLayout::CreateAndInstall(&host_)) { + v1_.SetPreferredSize(gfx::Size(10, 20)); } void RemoveAll() { - for (int i = host.child_count() - 1; i >= 0; i--) - host.RemoveChildView(host.child_at(i)); + for (int i = host_.child_count() - 1; i >= 0; i--) + host_.RemoveChildView(host_.child_at(i)); } void TestAlignment(GridLayout::Alignment alignment, gfx::Rect* bounds) { - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout_->AddColumnSet(0); c1->AddColumn(alignment, alignment, 1, GridLayout::USE_PREF, 0, 0); - layout.StartRow(1, 0); - layout.AddView(&v1); - gfx::Size pref = layout.GetPreferredSize(&host); + layout_->StartRow(1, 0); + layout_->AddView(&v1_); + gfx::Size pref = layout_->GetPreferredSize(&host_); EXPECT_EQ(gfx::Size(10, 20), pref); - host.SetBounds(0, 0, 100, 100); - layout.Layout(&host); - *bounds = v1.bounds(); + host_.SetBounds(0, 0, 100, 100); + layout_->Layout(&host_); + *bounds = v1_.bounds(); RemoveAll(); } - View host; - View v1; - GridLayout layout; + View& host() { return host_; } + GridLayout* layout() { return layout_; } + + private: + View host_; + View v1_; + GridLayout* layout_; }; TEST_F(GridLayoutAlignmentTest, Fill) { @@ -153,20 +157,20 @@ v1.SetPreferredSize(gfx::Size(10, 20)); View v2; v2.SetPreferredSize(gfx::Size(20, 20)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(30, 20), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 10, 20, &v1); ExpectViewBoundsEquals(10, 0, 20, 20, &v2); @@ -181,7 +185,7 @@ v2.SetPreferredSize(gfx::Size(20, 20)); View v3; v3.SetPreferredSize(gfx::Size(0, 20)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); // Fill widths. c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 0, GridLayout::USE_PREF, @@ -191,29 +195,30 @@ c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2); - layout.AddView(&v3); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2); + layout()->AddView(&v3); // Link all the columns. c1->LinkColumnSizes(0, 1, 2, -1); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); // |v1| and |v3| should obtain the same width as |v2|, since |v2| is largest. + pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(20 + 20 + 20, 20), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 20, 20, &v1); ExpectViewBoundsEquals(20, 0, 20, 20, &v2); ExpectViewBoundsEquals(40, 0, 20, 20, &v3); // If the limit is zero, behaves as though the columns are not linked. c1->set_linked_column_size_limit(0); - GetPreferredSize(); + pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(10 + 20 + 0, 20), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 10, 20, &v1); ExpectViewBoundsEquals(10, 0, 20, 20, &v2); ExpectViewBoundsEquals(30, 0, 0, 20, &v3); @@ -221,12 +226,12 @@ // Set a size limit. c1->set_linked_column_size_limit(40); v1.SetPreferredSize(gfx::Size(35, 20)); - GetPreferredSize(); // |v1| now dominates, but it is still below the limit. + pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(35 + 35 + 35, 20), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 35, 20, &v1); ExpectViewBoundsEquals(35, 0, 35, 20, &v2); ExpectViewBoundsEquals(70, 0, 35, 20, &v3); @@ -234,10 +239,10 @@ // Go over the limit. |v1| shouldn't influence size at all, but the others // should still be linked to the next largest width. v1.SetPreferredSize(gfx::Size(45, 20)); - GetPreferredSize(); + pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(45 + 20 + 20, 20), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 45, 20, &v1); ExpectViewBoundsEquals(45, 0, 20, 20, &v2); ExpectViewBoundsEquals(65, 0, 20, 20, &v3); @@ -250,21 +255,21 @@ v1.SetPreferredSize(gfx::Size(100, 20)); View v2; v2.SetPreferredSize(gfx::Size(10, 40)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1, 2, 1); - layout.StartRow(0, 0); - layout.AddView(&v2); + layout()->StartRow(0, 0); + layout()->AddView(&v1, 2, 1); + layout()->StartRow(0, 0); + layout()->AddView(&v2); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(100, 60), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 100, 20, &v1); ExpectViewBoundsEquals(0, 20, 10, 40, &v2); @@ -276,22 +281,22 @@ v1.SetPreferredSize(gfx::Size(100, 20)); View v2; v2.SetPreferredSize(gfx::Size(10, 20)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1, 2, 1); - layout.StartRow(0, 0); - layout.SkipColumns(1); - layout.AddView(&v2); + layout()->StartRow(0, 0); + layout()->AddView(&v1, 2, 1); + layout()->StartRow(0, 0); + layout()->SkipColumns(1); + layout()->AddView(&v2); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(100, 40), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 100, 20, &v1); ExpectViewBoundsEquals(90, 20, 10, 20, &v2); @@ -305,22 +310,22 @@ v2.SetPreferredSize(gfx::Size(10, 20)); View v3; v3.SetPreferredSize(gfx::Size(10, 20)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1, 2, 1); - layout.StartRow(0, 0); - layout.AddView(&v2); - layout.AddView(&v3); + layout()->StartRow(0, 0); + layout()->AddView(&v1, 2, 1); + layout()->StartRow(0, 0); + layout()->AddView(&v2); + layout()->AddView(&v3); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(100, 40), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 100, 20, &v1); ExpectViewBoundsEquals(0, 20, 10, 20, &v2); ExpectViewBoundsEquals(50, 20, 10, 20, &v3); @@ -330,7 +335,7 @@ TEST_F(GridLayoutTest, ColSpan4) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); @@ -343,17 +348,17 @@ v2.SetPreferredSize(gfx::Size(10, 10)); View v3; v3.SetPreferredSize(gfx::Size(25, 20)); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2); - layout.StartRow(0, 0); - layout.AddView(&v3, 2, 1); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2); + layout()->StartRow(0, 0); + layout()->AddView(&v3, 2, 1); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(25, 30), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 10, 10, &v1); ExpectViewBoundsEquals(12, 0, 10, 10, &v2); ExpectViewBoundsEquals(0, 10, 25, 20, &v3); @@ -364,7 +369,7 @@ // Verifies the sizing of a view that doesn't start in the first column // and has a column span > 1 (crbug.com/254092). TEST_F(GridLayoutTest, ColSpanStartSecondColumn) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, GridLayout::USE_PREF, 0, 0); @@ -378,15 +383,15 @@ View v2; v2.SetPreferredSize(gfx::Size(20, 10)); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2, 2, 1); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2, 2, 1); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(30, 10), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 10, 10, &v1); ExpectViewBoundsEquals(10, 0, 20, 10, &v2); @@ -398,21 +403,21 @@ v1.SetPreferredSize(gfx::Size(50, 20)); View v2; v2.SetPreferredSize(gfx::Size(10, 10)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); c1->LinkColumnSizes(0, 1, -1); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2); - gfx::Size pref = layout.GetPreferredSize(&host); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(100, 20), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 50, 20, &v1); ExpectViewBoundsEquals(50, 0, 10, 10, &v2); @@ -424,17 +429,17 @@ v1.SetPreferredSize(gfx::Size(50, 20)); View v2; v2.SetPreferredSize(gfx::Size(10, 10)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2); - host.SetBounds(0, 0, 110, 20); - layout.Layout(&host); + host().SetBounds(0, 0, 110, 20); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 100, 20, &v1); ExpectViewBoundsEquals(100, 0, 10, 10, &v2); @@ -446,17 +451,17 @@ v1.SetPreferredSize(gfx::Size(50, 20)); View v2; v2.SetPreferredSize(gfx::Size(10, 10)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::TRAILING, GridLayout::LEADING, 1, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2); - host.SetBounds(0, 0, 120, 20); - layout.Layout(&host); + host().SetBounds(0, 0, 120, 20); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 80, 20, &v1); ExpectViewBoundsEquals(110, 0, 10, 10, &v2); @@ -472,20 +477,20 @@ v2.SetPreferredSize(gfx::Size(10, 10)); View v3; v3.SetPreferredSize(gfx::Size(10, 10)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 1, GridLayout::USE_PREF, 0, 0); c1->AddColumn(GridLayout::TRAILING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1); - layout.AddView(&v2); - layout.AddView(&v3); + layout()->StartRow(0, 0); + layout()->AddView(&v1); + layout()->AddView(&v2); + layout()->AddView(&v3); - host.SetBounds(0, 0, 31, 10); - layout.Layout(&host); + host().SetBounds(0, 0, 31, 10); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 10, 10, &v1); ExpectViewBoundsEquals(10, 0, 11, 10, &v2); ExpectViewBoundsEquals(21, 0, 10, 10, &v3); @@ -498,19 +503,19 @@ v1.SetPreferredSize(gfx::Size(50, 20)); View v2; v2.SetPreferredSize(gfx::Size(10, 10)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, GridLayout::USE_PREF, 0, 0); - layout.StartRow(1, 0); - layout.AddView(&v1); - layout.StartRow(0, 0); - layout.AddView(&v2); + layout()->StartRow(1, 0); + layout()->AddView(&v1); + layout()->StartRow(0, 0); + layout()->AddView(&v2); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(50, 30), pref); - host.SetBounds(0, 0, 50, 100); - layout.Layout(&host); + host().SetBounds(0, 0, 50, 100); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 50, 90, &v1); ExpectViewBoundsEquals(0, 90, 50, 10, &v2); @@ -518,29 +523,29 @@ } TEST_F(GridLayoutTest, Border) { - host.SetBorder(CreateEmptyBorder(1, 2, 3, 4)); + host().SetBorder(CreateEmptyBorder(1, 2, 3, 4)); View v1; v1.SetPreferredSize(gfx::Size(10, 20)); - ColumnSet* c1 = layout.AddColumnSet(0); + ColumnSet* c1 = layout()->AddColumnSet(0); c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1); + layout()->StartRow(0, 0); + layout()->AddView(&v1); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(16, 24), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(2, 1, 10, 20, &v1); RemoveAll(); } TEST_F(GridLayoutTest, FixedSize) { - host.SetBorder(CreateEmptyBorder(2, 2, 2, 2)); + host().SetBorder(CreateEmptyBorder(2, 2, 2, 2)); - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); int column_count = 4; int title_width = 100; @@ -558,17 +563,17 @@ } for (int row = 0; row < row_count; ++row) { - layout.StartRow(0, 0); + layout()->StartRow(0, 0); for (int col = 0; col < column_count; ++col) { - layout.AddView(CreateSizedView(gfx::Size(pref_width, pref_height))); + layout()->AddView(CreateSizedView(gfx::Size(pref_width, pref_height))); } } - layout.Layout(&host); + layout()->Layout(&host()); for (int i = 0; i < column_count; ++i) { for (int row = 0; row < row_count; ++row) { - View* view = host.child_at(row * column_count + i); + View* view = host().child_at(row * column_count + i); ExpectViewBoundsEquals( 2 + title_width * i + (title_width - pref_width) / 2, 2 + pref_height * row, @@ -577,13 +582,13 @@ } } - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(column_count * title_width + 4, row_count * pref_height + 4), pref); } TEST_F(GridLayoutTest, RowSpanWithPaddingRow) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::CENTER, GridLayout::CENTER, @@ -592,13 +597,13 @@ 10, 10); - layout.StartRow(0, 0); - layout.AddView(CreateSizedView(gfx::Size(10, 10)), 1, 2); - layout.AddPaddingRow(0, 10); + layout()->StartRow(0, 0); + layout()->AddView(CreateSizedView(gfx::Size(10, 10)), 1, 2); + layout()->AddPaddingRow(0, 10); } TEST_F(GridLayoutTest, RowSpan) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, @@ -613,112 +618,114 @@ 0, 0); - layout.StartRow(0, 0); - layout.AddView(CreateSizedView(gfx::Size(20, 10))); - layout.AddView(CreateSizedView(gfx::Size(20, 40)), 1, 2); - layout.StartRow(1, 0); + layout()->StartRow(0, 0); + layout()->AddView(CreateSizedView(gfx::Size(20, 10))); + layout()->AddView(CreateSizedView(gfx::Size(20, 40)), 1, 2); + layout()->StartRow(1, 0); View* s3 = CreateSizedView(gfx::Size(20, 10)); - layout.AddView(s3); + layout()->AddView(s3); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(40, 40), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 10, 20, 10, s3); } TEST_F(GridLayoutTest, RowSpan2) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(CreateSizedView(gfx::Size(20, 20))); + layout()->StartRow(0, 0); + layout()->AddView(CreateSizedView(gfx::Size(20, 20))); View* s3 = CreateSizedView(gfx::Size(64, 64)); - layout.AddView(s3, 1, 3); + layout()->AddView(s3, 1, 3); - layout.AddPaddingRow(0, 10); + layout()->AddPaddingRow(0, 10); - layout.StartRow(0, 0); - layout.AddView(CreateSizedView(gfx::Size(10, 20))); + layout()->StartRow(0, 0); + layout()->AddView(CreateSizedView(gfx::Size(10, 20))); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(84, 64), pref); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(20, 0, 64, 64, s3); } TEST_F(GridLayoutTest, FixedViewWidth) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); + layout()->StartRow(0, 0); View* view = CreateSizedView(gfx::Size(30, 40)); - layout.AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 10, 0); + layout()->AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 10, + 0); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(10, pref.width()); EXPECT_EQ(40, pref.height()); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 10, 40, view); } TEST_F(GridLayoutTest, FixedViewHeight) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, GridLayout::USE_PREF, 0, 0); set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); + layout()->StartRow(0, 0); View* view = CreateSizedView(gfx::Size(30, 40)); - layout.AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 0, 10); + layout()->AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 0, + 10); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(30, pref.width()); EXPECT_EQ(10, pref.height()); - host.SetBounds(0, 0, pref.width(), pref.height()); - layout.Layout(&host); + host().SetBounds(0, 0, pref.width(), pref.height()); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 30, 10, view); } // Make sure that for views that span columns the underlying columns are resized // based on the resize percent of the column. TEST_F(GridLayoutTest, ColumnSpanResizing) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 2, GridLayout::USE_PREF, 0, 0); set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 4, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); + layout()->StartRow(0, 0); // span_view spans two columns and is twice as big the views added below. View* span_view = CreateSizedView(gfx::Size(12, 40)); - layout.AddView(span_view, 2, 1, GridLayout::LEADING, GridLayout::LEADING); + layout()->AddView(span_view, 2, 1, GridLayout::LEADING, GridLayout::LEADING); - layout.StartRow(0, 0); + layout()->StartRow(0, 0); View* view1 = CreateSizedView(gfx::Size(2, 40)); View* view2 = CreateSizedView(gfx::Size(4, 40)); - layout.AddView(view1); - layout.AddView(view2); + layout()->AddView(view1); + layout()->AddView(view2); - host.SetBounds(0, 0, 12, 80); - layout.Layout(&host); + host().SetBounds(0, 0, 12, 80); + layout()->Layout(&host()); ExpectViewBoundsEquals(0, 0, 12, 40, span_view); @@ -736,55 +743,55 @@ // there is additional space in the case we have column sets of different // preferred sizes. TEST_F(GridLayoutTest, ColumnResizingOnGetPreferredSize) { - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, GridLayout::USE_PREF, 0, 0); - set = layout.AddColumnSet(1); + set = layout()->AddColumnSet(1); set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, GridLayout::USE_PREF, 0, 0); - set = layout.AddColumnSet(2); + set = layout()->AddColumnSet(2); set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 1, GridLayout::USE_PREF, 0, 0); // Make a row containing a flexible view that trades width for height. - layout.StartRow(0, 0); + layout()->StartRow(0, 0); View* view1 = new FlexibleView(100); - layout.AddView(view1, 1, 1, GridLayout::FILL, GridLayout::LEADING); + layout()->AddView(view1, 1, 1, GridLayout::FILL, GridLayout::LEADING); // The second row contains a view of fixed size that will enforce a column // width of 20 pixels. - layout.StartRow(0, 1); + layout()->StartRow(0, 1); View* view2 = CreateSizedView(gfx::Size(20, 20)); - layout.AddView(view2, 1, 1, GridLayout::FILL, GridLayout::LEADING); + layout()->AddView(view2, 1, 1, GridLayout::FILL, GridLayout::LEADING); // Add another flexible view in row three in order to ensure column set // ordering doesn't influence sizing behaviour. - layout.StartRow(0, 2); + layout()->StartRow(0, 2); View* view3 = new FlexibleView(40); - layout.AddView(view3, 1, 1, GridLayout::FILL, GridLayout::LEADING); + layout()->AddView(view3, 1, 1, GridLayout::FILL, GridLayout::LEADING); // We expect a height of 50: 30 from the variable width view in the first row // plus 20 from the statically sized view in the second row. The flexible // view in the third row should contribute no height. - EXPECT_EQ(gfx::Size(20, 50), layout.GetPreferredSize(&host)); + EXPECT_EQ(gfx::Size(20, 50), GetPreferredSize()); } TEST_F(GridLayoutTest, MinimumPreferredSize) { View v1; v1.SetPreferredSize(gfx::Size(10, 20)); - ColumnSet* set = layout.AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, GridLayout::USE_PREF, 0, 0); - layout.StartRow(0, 0); - layout.AddView(&v1); + layout()->StartRow(0, 0); + layout()->AddView(&v1); - GetPreferredSize(); + gfx::Size pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(10, 20), pref); - layout.set_minimum_size(gfx::Size(40, 40)); - GetPreferredSize(); + layout()->set_minimum_size(gfx::Size(40, 40)); + pref = GetPreferredSize(); EXPECT_EQ(gfx::Size(40, 40), pref); RemoveAll(); @@ -801,22 +808,18 @@ if (PlatformTestHelper::IsMus()) return; - // Don't use the |layout| data member from the test harness, otherwise - // SetLayoutManager() can take not take ownership. - GridLayout* grid_layout = new GridLayout(&host); - host.SetLayoutManager(grid_layout); - ColumnSet* set = grid_layout->AddColumnSet(0); + ColumnSet* set = layout()->AddColumnSet(0); set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, GridLayout::USE_PREF, 0, 0); - grid_layout->StartRow(0, 0); + layout()->StartRow(0, 0); LayoutOnAddView view; - EXPECT_DCHECK_DEATH(grid_layout->AddView(&view)); + EXPECT_DCHECK_DEATH(layout()->AddView(&view)); // Death tests use fork(), so nothing should be added here. EXPECT_FALSE(view.parent()); // If the View has nothing to change, adding should succeed. view.set_target_size(view.GetPreferredSize()); - grid_layout->AddView(&view); + layout()->AddView(&view); EXPECT_TRUE(view.parent()); RemoveAll();
diff --git a/ui/views/test/event_generator_delegate_mac.mm b/ui/views/test/event_generator_delegate_mac.mm index af8c4001..3203a23d 100644 --- a/ui/views/test/event_generator_delegate_mac.mm +++ b/ui/views/test/event_generator_delegate_mac.mm
@@ -272,9 +272,6 @@ ui::EventSink* GetEventSink() override { return this; } // Overridden from ui::EventProcessor: - ui::EventTarget* GetInitialEventTarget(ui::Event* event) override { - return nullptr; - } ui::EventTarget* GetRootForEvent(ui::Event* event) override { return this; } ui::EventTargeter* GetDefaultEventTargeter() override { return this->GetEventTargeter();
diff --git a/ui/views/view_tracker.cc b/ui/views/view_tracker.cc index c1391ab..4d2032a8 100644 --- a/ui/views/view_tracker.cc +++ b/ui/views/view_tracker.cc
@@ -8,7 +8,7 @@ namespace views { -ViewTracker::ViewTracker(View* view) : view_(view) { +ViewTracker::ViewTracker(View* view) : view_(nullptr) { SetView(view); }
diff --git a/ui/views/view_tracker_unittest.cc b/ui/views/view_tracker_unittest.cc index 34f48cf0..998d234 100644 --- a/ui/views/view_tracker_unittest.cc +++ b/ui/views/view_tracker_unittest.cc
@@ -4,6 +4,7 @@ #include "ui/views/view_tracker.h" +#include "base/memory/ptr_util.h" #include "ui/views/test/views_test_base.h" #include "ui/views/view.h" @@ -21,4 +22,14 @@ EXPECT_EQ(nullptr, tracker.view()); } +TEST_F(ViewTrackerTest, ObservedAtConstruction) { + std::unique_ptr<ViewTracker> tracker; + { + View view; + tracker = base::MakeUnique<ViewTracker>(&view); + EXPECT_EQ(&view, tracker->view()); + } + EXPECT_EQ(nullptr, tracker->view()); +} + } // namespace views
diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11.cc b/ui/views/widget/desktop_aura/desktop_screen_x11.cc index c31728ca..df8884e7 100644 --- a/ui/views/widget/desktop_aura/desktop_screen_x11.cc +++ b/ui/views/widget/desktop_aura/desktop_screen_x11.cc
@@ -377,8 +377,9 @@ // TODO(ccameron): Populate this based on this specific display. // http://crbug.com/735613 if (!display::Display::HasForceColorProfile()) { - display.set_color_space( - gfx::ICCProfile::FromBestMonitor().GetColorSpace()); + gfx::ICCProfile icc_profile = gfx::ICCProfile::FromBestMonitor(); + icc_profile.HistogramDisplay(display.id()); + display.set_color_space(icc_profile.GetColorSpace()); } displays.push_back(display);
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc index fa2878ae..316cf855 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
@@ -974,7 +974,7 @@ } bool DesktopWindowTreeHostX11::ShouldWindowContentsBeTransparent() const { - return IsTranslucentWindowOpacitySupported(); + return false; } void DesktopWindowTreeHostX11::FrameTypeChanged() {
diff --git a/ui/views/widget/root_view.cc b/ui/views/widget/root_view.cc index e1e866f..acc2aaf6 100644 --- a/ui/views/widget/root_view.cc +++ b/ui/views/widget/root_view.cc
@@ -241,11 +241,6 @@ //////////////////////////////////////////////////////////////////////////////// // RootView, ui::EventProcessor overrides: -ui::EventTarget* RootView::GetInitialEventTarget(ui::Event* event) { - // Views has no special initial target. - return nullptr; -} - ui::EventTarget* RootView::GetRootForEvent(ui::Event* event) { return this; }
diff --git a/ui/views/widget/root_view.h b/ui/views/widget/root_view.h index 6d8761fe..17ae8112 100644 --- a/ui/views/widget/root_view.h +++ b/ui/views/widget/root_view.h
@@ -93,7 +93,6 @@ View* GetFocusTraversableParentView() override; // Overridden from ui::EventProcessor: - ui::EventTarget* GetInitialEventTarget(ui::Event* event) override; ui::EventTarget* GetRootForEvent(ui::Event* event) override; ui::EventTargeter* GetDefaultEventTargeter() override; void OnEventProcessingStarted(ui::Event* event) override;
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc index 256ba5dc..7cd77e42 100644 --- a/ui/views/window/dialog_client_view.cc +++ b/ui/views/window/dialog_client_view.cc
@@ -326,14 +326,14 @@ void DialogClientView::SetupLayout() { base::AutoReset<bool> auto_reset(&adding_or_removing_views_, true); - GridLayout* layout = new GridLayout(button_row_container_); - layout->set_minimum_size(minimum_size_); FocusManager* focus_manager = GetFocusManager(); ViewTracker view_tracker(focus_manager->GetFocusedView()); // Clobber any existing LayoutManager since it has weak references to child // Views which may be removed by SetupViews(). - button_row_container_->SetLayoutManager(layout); + GridLayout* layout = GridLayout::CreateAndInstall(button_row_container_); + layout->set_minimum_size(minimum_size_); + SetupViews(); const std::array<View*, kNumButtons> views = GetButtonRowViews();
diff --git a/ui/views/window/dialog_client_view_unittest.cc b/ui/views/window/dialog_client_view_unittest.cc index a143aa9..4192b0e 100644 --- a/ui/views/window/dialog_client_view_unittest.cc +++ b/ui/views/window/dialog_client_view_unittest.cc
@@ -465,4 +465,18 @@ EXPECT_TRUE(client_view()->cancel_button()->HasFocus()); } +// Ensures that the focus persistence works correctly when buttons are removed. +TEST_F(DialogClientViewTest, FocusChangingButtons) { + // Start with ok and cancel buttons. + widget()->Show(); + SetDialogButtons(ui::DIALOG_BUTTON_CANCEL | ui::DIALOG_BUTTON_OK); + client_view()->cancel_button()->RequestFocus(); // Set focus. + FocusManager* focus_manager = GetFocusManager(); + EXPECT_EQ(client_view()->cancel_button(), focus_manager->GetFocusedView()); + + // Remove buttons. + SetDialogButtons(ui::DIALOG_BUTTON_NONE); + EXPECT_EQ(nullptr, focus_manager->GetFocusedView()); +} + } // namespace views
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_apnlist.html b/ui/webui/resources/cr_components/chromeos/network/network_apnlist.html index b0fa003..1a2c716e 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_apnlist.html +++ b/ui/webui/resources/cr_components/chromeos/network/network_apnlist.html
@@ -14,7 +14,7 @@ margin: 4px 0; } </style> - <div class="property-box first"> + <div class="property-box"> <div class="start">[[i18n('networkAccessPoint')]]</div> <div class="md-select-wrapper"> <select id="selectApn" class="md-select" on-change="onSelectApnChange_" @@ -28,7 +28,7 @@ </div> </div> - <div class="property-box continuation single-column" + <div class="property-box single-column indented" hidden$="[[!isOtherSelected_(selectedApn_, networkProperties)]]"> <network-property-list on-property-change="onOtherApnChange_" fields="[[otherApnFields_]]" property-dict="[[otherApn_]]"
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_ip_config.html b/ui/webui/resources/cr_components/chromeos/network/network_ip_config.html index 6c107a2..8999e86a 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_ip_config.html +++ b/ui/webui/resources/cr_components/chromeos/network/network_ip_config.html
@@ -9,7 +9,7 @@ <dom-module id="network-ip-config"> <template> <style include="network-shared iron-flex"></style> - <div class="property-box first"> + <div class="property-box"> <div id="autoIPConfigLabel" class="start"> [[i18n('networkIPConfigAuto')]] </div> @@ -17,7 +17,7 @@ aria-labelledby="autoIPConfigLabel"> </paper-toggle-button> </div> - <div class="property-box single-column continuation indented stretch" + <div class="property-box single-column indented stretch" hidden$="[[!ipConfig_]]"> <network-property-list fields="[[ipConfigFields_]]" property-dict="[[ipConfig_]]"
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html b/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html index 2496e889..a64f6ca 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html +++ b/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html
@@ -14,7 +14,7 @@ } </style> - <div class="property-box first"> + <div class="property-box"> <div class="start">[[i18n('networkNameservers')]]</div> <div class="md-select-wrapper"> <select id="nameserverType" class="md-select" on-change="onTypeChange_" @@ -28,7 +28,7 @@ </div> </div> - <div class="property-box continuation single-column indented" + <div class="property-box single-column indented" hidden$="[[!nameservers_.length]]"> <template is="dom-repeat" items="[[nameservers_]]"> <paper-input-container no-label-float>
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_proxy.html b/ui/webui/resources/cr_components/chromeos/network/network_proxy.html index 67de461..4b328f9 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_proxy.html +++ b/ui/webui/resources/cr_components/chromeos/network/network_proxy.html
@@ -28,13 +28,12 @@ } #manualProxy { - -webkit-padding-end: 20px; - -webkit-padding-start: 60px; + -webkit-padding-start: var(--cr-section-padding); } </style> <!-- Proxy type dropdown --> - <div class="property-box start"> + <div class="property-box"> <div class="start">[[i18n('networkProxyConnectionType')]]</div> <div class="md-select-wrapper"> <select id="proxyType" class="md-select" on-change="onTypeChange_" @@ -51,7 +50,7 @@ </div> <!-- Autoconfiguration (PAC) --> - <div class="property-box continuation" + <div class="property-box indented" hidden$="[[!matches_(proxy_.Type, ProxySettingsType_.PAC)]]"> <div>[[i18n('networkProxyAutoConfig')]]</div> <paper-input no-label-float class="middle" value="{{proxy_.PAC}}" @@ -62,14 +61,14 @@ </div> <!-- Web Proxy Auto Discovery (WPAD) --> - <div class="property-box continuation" + <div class="property-box indented" hidden$="[[!matches_(proxy_.Type, ProxySettingsType_.WPAD)]]"> <div>[[i18n('networkProxyWpad')]]</div> <div class="middle">[[WPAD_]]</div> </div> <!-- Manual --> - <div class="property-box continuation" + <div class="property-box indented" hidden$="[[!matches_(proxy_.Type, ProxySettingsType_.MANUAL)]]"> <div id="networkProxyToggleLabel" class="flex"> [[i18n('networkProxyUseSame')]]
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html b/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html index d5e231a..c235c502 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html +++ b/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html
@@ -5,18 +5,11 @@ <dom-module id="network-shared"> <template> <style include="cr-shared-style"> - /* This mirrors .settings-box.two-line. */ .property-box { - align-items: center; - border-top: var(--cr-separator-line); - display: flex; - min-height: var(--cr-section-two-line-min-height); - padding: 0 var(--cr-section-padding); - } - - .property-box.first, - .property-box.continuation { + @apply(--cr-section); border-top: none; + min-height: var(--cr-section-two-line-min-height); + padding: 0; } .property-box.indented {
diff --git a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html index a6c8777e..abc2e47a 100644 --- a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html +++ b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html
@@ -46,6 +46,7 @@ border: 2px solid rgba(66, 133, 244, 0.6); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.17); margin: 4px; + outline: none; } #container {
diff --git a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html index 6e99999..a494cbe 100644 --- a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html +++ b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html
@@ -13,12 +13,14 @@ --scroll-border: 1px solid var(--paper-grey-300); border: 0; border-radius: 2px; - bottom: 0; box-shadow: 0 0 16px rgba(0, 0, 0, 0.12), 0 16px 16px rgba(0, 0, 0, 0.24); color: inherit; + left: 50%; + margin: 0; padding: 0; - top: 0; + top: 50%; + transform: translate(-50%, -50%); width: 512px; }
diff --git a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js index 59ee2f6..836f7b3 100644 --- a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js +++ b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js
@@ -212,10 +212,10 @@ this.animate( [ - {transform: 'scale(1)', offset: 0}, - {transform: 'scale(1.02)', offset: 0.4}, - {transform: 'scale(1.02)', offset: 0.6}, - {transform: 'scale(1)', offset: 1}, + {transform: 'translate(-50%, -50%) scale(1)', offset: 0}, + {transform: 'translate(-50%, -50%) scale(1.02)', offset: 0.4}, + {transform: 'translate(-50%, -50%) scale(1.02)', offset: 0.6}, + {transform: 'translate(-50%, -50%) scale(1)', offset: 1}, ], /** @type {!KeyframeEffectOptions} */ ({ duration: 180,
diff --git a/ui/webui/resources/cr_elements/shared_vars_css.html b/ui/webui/resources/cr_elements/shared_vars_css.html index 4c773e5e..2352c44 100644 --- a/ui/webui/resources/cr_elements/shared_vars_css.html +++ b/ui/webui/resources/cr_elements/shared_vars_css.html
@@ -40,6 +40,11 @@ --cr-primary-text: { color: var(--paper-grey-900); line-height: 154%; /* 20px. */ + } + + --cr-secondary-text: { + color: var(--paper-grey-600); + font-weight: 400; } /* TODO (scottchen): re-implement with paddings instead; */